Azure Container Apps のリビジョン
Azure Container Apps では、リビジョンを作成することで、コンテナー アプリのバージョン管理を実装します。 リビジョンとは、コンテナー アプリ バージョンの変更不可能なスナップショットです。
- コンテナー アプリをデプロイすると、最初のリビジョンが自動的にプロビジョニングされます。
- コンテナー アプリで "リビジョン スコープ" の変更を行うと、新しいリビジョンが自動的にプロビジョニングされます。
- リビジョンは変更不可ですが、すべてのリビジョンに適用される "アプリケーションスコープ" 変更の影響を受けます。
- 以前のリビジョンを更新することで、新しいリビジョンを作成できます。
- 最大 100 個のリビジョンを保持でき、コンテナー アプリ更新の履歴レコードを取得できます。
- 複数のリビジョンを同時に実行できます。
- アクティブなリビジョン間で外部 HTTP トラフィックを分割できます。
ユース ケース
Container Apps リビジョンは、アプリに "リビジョンスコープ" の変更を加えるたびに新しいリビジョンを作成することで、コンテナー アプリの更新のリリースを管理するのに役立ちます。 アクティブなリビジョンと、アクティブな各リビジョンにルーティングされる外部トラフィックを制御できます。
リビジョンを使用すると、次のことができます。
- アプリの新しいバージョンをリリースします。
- 以前のバージョンのアプリにすばやく戻します。
- A/B テストのリビジョン間でトラフィックを分割します。
- ブルーグリーン デプロイで、新しいリビジョンを段階的に導入します。 ブルーグリーン デプロイの詳細については、「BlueGreenDeployment」を参照してください。
リビジョンのライフサイクル
リビジョンは、ステータスと可用性に基づいて、一連の状態を経過します。
プロビジョニング状態
リビジョンは、最初に新しく作成されるときに、スタートアップチェックと準備状況のチェックに合格する必要があります。 "プロビジョニング ステータス" は、検証の間は "プロビジョニング中" に設定されます。 進行状況を追跡するには、"プロビジョニング ステータス" を使います。
リビジョンの検証が済むと、"実行ステータス" が "実行中" に設定されます。 リビジョンを利用可能で、動作できる状態になります。
"プロビジョニング ステータス" の値は次のとおりです。
- プロビジョニング
- プロビジョニング済み
- "プロビジョニング失敗"
実行ステータス
リビジョンは、プロビジョニングが完了した後で完全に機能します。 実行中の状態を使用して、リビジョンの状態を監視します。
実行ステータスの値は次のとおりです。
Status | 説明 |
---|---|
実行中 | リビジョンが実行されています。 報告する問題はありません。 |
異常 | リビジョンが正しく動作していません。 詳細については、リビジョンの状態の詳細を使用します。 次のような一般的な問題があります。 • コンテナーがクラッシュする • リソース クォータを超えました • ImagePullBackOff エラーを含むイメージ アクセスの問題 |
失敗 | リビジョンが正しく動作していません。 詳細については、 リビジョンの状態の詳細 を使用してください。 次のような一般的な問題があります。 • コンテナーがクラッシュする • リソース クォータを超えました • ImagePullBackOff エラーを含むイメージ アクセスの問題 |
失敗 | 重大なエラーにより、リビジョンが失敗しました。 "実行状態" で詳細が提供されます。 一般的な原因には、次のようなものがあります。 •終了 • 終了コード 137 |
実行状態の詳細を使って、現在のステータスを詳しく確認します。
非アクティブ ステータス
リビジョンは、アクティブまたは非アクティブに設定できます。
非アクティブなリビジョンには、プロビジョニングまたは実行の状態はありません。
非アクティブなリビジョンのリストには、最大 100 個の非アクティブなリビジョンが保持されます。
複数のリビジョン
次の図は、2 つのリビジョンを持つコンテナー アプリを示しています。
このシナリオでは、コンテナー アプリが次の状態であることが想定されています。
- イングレスが有効になっており、コンテナー アプリは HTTP または TCP 経由で利用できます。
- 最初のリビジョンは、"リビジョン 1" としてデプロイされました。
- コンテナーが更新された後、新しいリビジョンが "リビジョン 2" としてアクティブ化されました。
- トラフィックの分割ルールは、"リビジョン 1" が要求の 80% を受信し、"リビジョン 2" が残りの 20% を受信するように構成されています。
リビジョン名のサフィックス
リビジョン名は、リビジョンを識別するため、また、リビジョンの URL 内で使用されます。 リビジョンのサフィックスを設定することで、リビジョン名をカスタマイズできます。
リビジョン名の形式は次のとおりです。
<CONTAINER_APP_NAME>-<REVISION_SUFFIX>
既定では、英数字の半ランダム文字列で構成されるサフィックスを持つ一意のリビジョン名が Container Apps によって作成されます。 一意のカスタム リビジョン サフィックスを設定することで、名前をカスタマイズできます。
たとえば、 album-api という名前のコンテナー アプリの場合、リビジョン サフィックス名を first-revision に設定すると、 album-api--first-revision という名前のリビジョンが作成されます。
リビジョン サフィックス名は、次のようにする必要があります。
- 小文字の英数字またはダッシュ ('-') で構成される
- 英字で始まる
- 英数字で終わる
- 2 つの連続したダッシュがない (--)
- 64 文字以下
リビジョン サフィックスは、ARM テンプレートで、Azure CLI の az containerapp create
および az containerapp update
コマンドを使用して、または Azure portal からリビジョンを作成するときに設定できます。
変更の種類
コンテナー アプリに加えられた変更は、"リビジョンスコープ" または "アプリケーションスコープ" の変更の 2 つのカテゴリに分類されます。 アプリをデプロイするときに、"リビジョンスコープ" の変更では新しいリビジョンがトリガーされ、"アプリケーションスコープ" の変更ではトリガーされません。
リビジョンスコープの変更
新しいリビジョンは、コンテナー アプリが "リビジョンスコープ" の変更で更新されると、作成されます。 変更はデプロイされているリビジョンに限定され、他のリビジョンには影響しません。
"リビジョンスコープ" の変更とは、コンテナー アプリ リソース テンプレートの properties.template
セクションのパラメーターに対するあらゆる変更です。
これらのパラメーターには、以下のものがあります。
- リビジョン サフィックス
- コンテナーの構成とイメージ
- コンテナー アプリケーションのスケール ルール
アプリケーションスコープの変更
"アプリケーションスコープ" が変更されたコンテナー アプリをデプロイする場合、次のようになります。
- 変更はすべてのリビジョンにグローバルに適用されます。
- 新しいリビジョンは作成されません。
"アプリケーションスコープ" の変更は、コンテナー アプリ リソース テンプレートの properties.configuration
セクションのパラメーターに対するあらゆる変更と定義されます。
これらのパラメーターには、以下のものがあります。
- シークレット値 (コンテナーが新しいシークレット値を認識する前にリビジョンを再起動する必要があります)
- リビジョン モード
- 以下を含むイングレス構成:
- イングレスのオンとオフを切り替える
- トラフィックの分割ルール
- ラベル
- プライベート コンテナー レジストリの資格情報
- Dapr 設定
リビジョン モード
リビジョン モードでは、コンテナー アプリの 1 つのリビジョンのみ、または複数のリビジョンを同時にアクティブにできるかどうかを制御します。 アプリのリビジョン モードは、Azure portal のコンテナー アプリの [リビジョン管理] ページから、Azure CLI コマンドを使用して、または ARM テンプレート内で設定できます。
単一リビジョン モード
既定では、コンテナー アプリは "単一リビジョン モード" です。 このモジュールでは、新しいリビジョンが作成されると、最新のリビジョンがアクティブなリビジョンに取って代わります。 詳細については、「ダウンタイムなしのデプロイ」を参照してください。
複数リビジョン モード
リビジョン モードを "複数リビジョン モード" に設定して、アプリの複数のリビジョンを同時に実行します。 このモードでは、新しいリビジョンが、現在アクティブなリビジョンと共にアクティブになります。
外部 HTTP イングレスを実装するアプリの場合は、Azure portal のコンテナー アプリの [リビジョン管理] ページから、Azure CLI コマンドを使用して、または ARM テンプレート内で、アクティブな各リビジョンに含めるトラフィックの割合を制御できます。 詳細については、「トラフィックの分割」を参照してください。
リビジョン ラベル
外部 HTTP トラフィックがあるコンテナー アプリの場合、ラベルは、トラフィックを特定のリビジョンに誘導するための移植可能な手段です。 ラベルによって、ラベルが割り当てられているリビジョンにトラフィックをルーティングするために使用できる一意の URL が提供されます。 リビジョン間でトラフィックを切り替えるには、あるリビジョンから別のリビジョンにラベルを移動します。
- ラベルは、あるリビジョンから別のリビジョンに移動されても、同じ URL を保持します。
- ラベルは、一度に 1 つのリビジョンにのみ適用できます。
- ラベルを含むリビジョンでは、トラフィック分割の割り当ては必要ありません。
- ラベルは、アプリが "複数リビジョン" モードの場合に最も有用です。
- ラベル、トラフィック分割、またはその両方を有効にできます。
ラベルは、新しいリビジョンをテストするのに役立ちます。 たとえば、一連のテスト ユーザーにアクセス権を付与する場合、ラベルの URL を通知できます。 その後、ユーザーを別のリビジョンに移動する場合は、そのリビジョンにラベルを移動できます。
ラベルは、トラフィック分割とは独立して機能します。 トラフィック分割では、トラフィックの割合に基づいて、コンテナー アプリのアプリケーション URL に送信されるトラフィックがリビジョンに振り分けられます。 トラフィックがラベルの URL に誘導されると、このトラフィックは 1 つの特定のリビジョンにルーティングされます。
ラベル名は次の条件を満たしている必要があります。
- 小文字の英数字またはダッシュ ('-') で構成される
- 英字で始まる
- 英数字で終わる
- 2 つの連続したダッシュがない (--)
- 64 文字以下
ラベルは、Azure portal のコンテナー アプリの [リビジョン管理] ページから管理できます。
ラベル URL は、リビジョンの詳細ペインで確認できます。
アクティブ化の状態
"複数リビジョン モード" では、リビジョンは非アクティブ化されるまでアクティブ状態のままになります。 リビジョンのアクティブ化と非アクティブ化は、Azure portal のコンテナー アプリの [リビジョン管理] ページまたは Azure CLI からできます。
非アクティブなリビジョンには課金されません。 最大 100 個のリビジョンを持つことができ、その後は、最も古いリビジョンが消去されます。