スナップショット参照は、App Configuration ストア内の特定のスナップショットを指す特別なキー値です。 変更できない構成 (スナップショット) の安全性と、実行時にアプリケーションが使用するスナップショットを動的に変更する柔軟性を組み合わせることができます。
スナップショットを直接使用すると、アプリケーションはコード内の名前でスナップショットを選択します。 ターゲット スナップショットを変更するには、構成をビルドするコード パスに新しいデプロイまたは構成の変更が必要です。 スナップショット参照では、その制約が削除されます。参照キー値を 1 回読み込みます。ターゲット スナップショット名が後で変更された場合、構成プロバイダーは構成を新しい変更できないセットに自動的に再読み込みします。
スナップショット参照を使用する理由
スナップショット参照には次の情報が含まれます。
- 簡単な更新: 実行時でも、アプリケーション コードに触れることなく、参照先のスナップショットを更新します。
- 不変構成セット: 各スナップショットは変更されず、監査性とロールバックの保証が維持されます。
動作のしくみ
スナップショット参照は、使用するスナップショットの名前を含む値を持つキー値として格納されます。 構成プロバイダーがキー値を読み込むと、選択した項目間のスナップショット参照が自動的に解決されます。 参照されるスナップショットのキー値は、アプリケーションの構成にマージされます。 参照が別のスナップショットを指すよう変更された場合、構成プロバイダーの更新により、新しいスナップショットの内容が読み込まれます。
注
スナップショット参照をオプトインするために特殊な API を呼び出す必要はありません。 スナップショット参照であるキー値を選択すると、解決は自動的に行われます。
スナップショット参照の作成
- Azure portal で App Configuration ストアを開きます。
- [構成エクスプローラー] を選択します。
- [作成]を選択します。
- [ スナップショット参照] を選択します。
- 参照のキーを入力します。 必要に応じてラベルを設定します。
- 一覧からターゲット スナップショット名を選択 (または入力) します。
- を選択してを作成します。
作成されると、構成エクスプローラーでスナップショット参照が他のキー値と共に表示されます。
スナップショット参照の使用
スナップショット参照を使用するために新しいコードは必要ありません。 構成の作成時にスナップショット参照のキーが選択したキー値の一部である場合、プロバイダーは参照先スナップショットのキー値を自動的に解決して読み込みます。 これを比較して、 SelectSnapshot("SnapshotName")などの API を明示的に呼び出し、起動時にスナップショットの選択を修正し、後で切り替える場合はコードの変更または再デプロイが必要になるようにスナップショットを直接使用します。
更新の動作
更新が構成されている場合、スナップショット参照内のターゲット スナップショット名を変更すると、新しいスナップショットを使用するようにアプリケーションがシームレスに移動します。
- アプリケーションが起動します。
- 構成プロバイダーは、スナップショット参照を含む選択したキー値をフェッチします。
- 構成プロバイダーは、スナップショット
Snapshot_Aへの参照を解決し、そのキー値を読み込みます。 - スナップショット参照は、
Snapshot_Bを指すよう更新されます (変更できません)。 - 構成プロバイダーは、スナップショット参照キー値が変更されたことを検出します。
- 構成プロバイダーが再解決します。
Snapshot_Aのキー値がアンロードされます。 構成の再読み込みによって、Snapshot_Bのキー値が生成されます。
注
このシーケンスでは、アプリケーションの更新が構成されていることを前提としています。 更新を構成する方法の詳細については、 動的構成を参照してください。
スナップショット リファレンスの例
次の例は、スナップショット参照を示しています
{
"key": "app1/snapshot-reference",
"value": "{\"snapshot_name\":\"referenced-snapshot\"}",
"content_type": "application/json; profile=\"https://azconfig.io/mime-profiles/snapshot-ref\"; charset=utf-8",
"tags": {}
}
前述のように、スナップショット参照は、いくつかの制約が追加された通常のキー値です。 構成プロバイダーは、特定のコンテンツ タイプによってスナップショット参照を識別します。 スナップショット参照の値は、ターゲット スナップショットを指す name プロパティを持つ json オブジェクトです。
スナップショット参照コンテンツ タイプ: application/json; profile="https://azconfig.io/mime-profiles/snapshot-ref"; charset=utf-8
キーコンフリクトの解決
参照されるスナップショットには、通常のキー値 (スナップショットの外部) と競合するキーが含まれている場合があります。 構成プロバイダーは、最後に表示されたキーの値を使用して、これらの競合を解決します。 スナップショットの場合、スナップショット参照キーの構文の順序は、スナップショット参照キーが見られるとすぐに解決されるため、競合がある場合に特定のキーの最終的な値を考慮する際に重要な詳細になります。
簡略化された例
ストアに次の通常のキー値があるとします。
key: message
value: hello-world
key: request-limit
value: 100
次を含むスナップショットがあります。
key: message
value: bye
key: request-limit
value: 8000
前述のスナップショットを指すスナップショット参照が追加された場合、最終的な有効な構成は、スナップショット参照キーの辞書の位置によって異なります。
| スナップショット参照キー |
message、request-limit と対比した辞書式順序の位置 |
最終的な message 値 |
最終的な request-limit 値 |
なぜでしょうか |
|---|---|---|---|---|
a-snapshot-reference |
両方の前 | hello-world | 100 | スナップショット参照が最初に解決されます。それ以降の通常のキーは重複をオーバーライドします。 |
my-snapshot-reference |
messageの後、request-limitの前 |
さようなら | 100 |
message が最初に表示されます。 その後、スナップショット参照が解決され、 messageがオーバーライドされます。 最後に、通常の request-limit はスナップショットの request-limit 値をオーバーライドします。 |
some-snapshot-reference |
両方が終わった後に | さようなら | 8,000 | スナップショット参照は最後に解決されます。その値は、以前の重複をオーバーライドします。 |
考慮事項と特異なケース
- ターゲット スナップショットがない: 参照が存在しないスナップショット名を指している場合、または保持期間を超えてアーカイブされている場合、プロバイダーは参照を無視します。
- 推移的な解決なし: 参照先のスナップショットに、それ自体がスナップショット参照であるキー値が含まれている場合、その内部参照は解決されません。
- アクセス制御: 参照を使用してスナップショットを読み取るには、スナップショットを直接読み取るのと同様に、スナップショット の読み取りアクセス許可が必要です。
- 保持/アーカイブ: スナップショットの有効期限が切れると、アプリは含まれている構成にアクセスできなくなるため、アーカイブされたスナップショットを参照するときは注意が必要です。
利用可能な言語
| Language | 最小バージョン/状態 |
|---|---|
| .NET | 8.4.0+ |
| Java | 進行中の作業 |
| JavaScript | 進行中の作業 |
| Python | 進行中の作業 |
| Go | 進行中の作業 |
次のステップ
詳細な背景については、 スナップショットの概要を参照してください。