Azure Container Apps を別のリージョンに再配置する

この記事では、ターゲット リージョンでマネージド環境とコンテナー アプリを再作成して、Azure Container Apps ワークロードを別の Azure リージョンに再配置する方法について説明します。 このプロセスでは、アプリケーション構成のエクスポート、リソースの再デプロイ、デプロイの検証、ソース リージョン内のリソースのクリーンアップについて説明します。

重要

Azure Container Apps では、インプレース リージョンの移行はサポートされていません。 ターゲット リージョンにリソースを 再作成 します。既存のリソースは移動されません。 この記事では、Container Apps の構成とインフラストラクチャの再配置について説明します。 アプリケーション データ、データベース、またはその他のステートフルな依存関係のレプリケートについては説明しません。

[前提条件]

開始する前に、次の要件を満たしていることを確認します。

  • Azure Container Apps は ターゲット リージョンで使用できます。
  • ターゲット リージョンでは、ソース リージョンで使用するのと同じ Container Apps の機能、ワークロード プロファイル、およびネットワーク オプションがサポートされます。
  • デプロイする予定のリソースに対して、ターゲット リージョンに十分なクォータがあります。
  • ソース サブスクリプションとターゲット サブスクリプションの両方に、次のアクセス許可があります。
    • リソース グループの所有者または共同作成者。
    • コンテナアプリの貢献者 (推奨)。 この役割には、コンテナアプリの秘密値へのアクセスを許可するワイルドカード権限が含まれます。 より狭いアクセスについては、「 秘密管理の権限」を参照してください。
  • コンテナー イメージは、ターゲット リージョンからアクセスできるレジストリ (Azure Container Registry やサポートされている外部レジストリなど) にあります。
  • Key Vault、ストレージ アカウント、データベース、仮想ネットワーク、メッセージング サービスなどの依存 Azure リソースは、ターゲット リージョンで既に使用可能であるか、再デプロイ 計画を持っています。

ヒント

Azure Container Registry (ACR) を使用する場合は、 geo レプリケーション を有効にして、レジストリを再デプロイせずにターゲット リージョンでイメージを使用できるようにすることを検討してください。

az acr replication create --registry <REGISTRY_NAME> --location <TARGET_REGION>

ダウンタイムの要件を理解する

Azure Container Apps では、ライブ リージョンの移行はサポートされていません。 ダウンタイムは、主に、カットオーバー中の DNS 伝達とトラフィック ルーティングの変更によって発生します。 影響を最小限に抑えるには:

  1. 先にターゲット リージョンにコンテナー アプリをデプロイして検証します。
  2. 事前に DNS TTL 値を小さく (たとえば 60 秒に)、ルーティングの変更がすぐに反映されるようにします。
  3. 検証が完了した後にのみ、運用トラフィックを新しいエンドポイントにリダイレクトします。
  4. ターゲットのデプロイが正常であることを確認するまで、ソース コンテナー アプリを実行したままにします。

準備

再配置の準備をするには、ソース構成をエクスポートし、すべてのリージョン固有の設定を確認します。

依存関係を識別する

カットオーバーの前に、次の依存リソースがターゲット リージョンに存在する必要があります。

  • Azure Key Vault
  • ストレージアカウント
  • データベースとメッセージング サービス (Azure Service Bus、Azure Cosmos DB など)
  • 仮想ネットワーク、サブネット、およびプライベート エンドポイント
  • ネットワーク セキュリティ グループ (NSG) とユーザー定義ルート (UDR)
  • プライベート DNS ゾーン
  • Log Analytics ワークスペース
  • DAPRコンポーネント(使用されている場合)

重要

シークレット、証明書、カスタム ドメイン、およびセキュリティで保護された構成値は、エクスポートされたテンプレートには 保持されません 。 これらのリソースは、元のソースからターゲット リージョンに手動で再作成する必要があります。

マネージド ID の変更を計画する

マネージド ID の処理は、ID の種類によって異なります。

  • システム割り当て ID: コンテナー アプリを再作成すると、Azure によって新しいプリンシパル ID が生成されます。 すべての RBAC ロール、Key Vault アクセス ポリシー、ダウンストリーム サービスのアクセス許可を新しい ID に再割り当てする必要があります。

  • ユーザー割り当て ID: ユーザー割り当てマネージド ID はリージョン リソースであり、リージョン間で移動することはできません。 ターゲット リージョンに新しいユーザー割り当て ID を作成し、デプロイ前に必要なアクセス許可を割り当てます。

ソース構成をエクスポートする

Azure portal を使用して、Container Apps マネージド環境と個々のコンテナー アプリの両方の ARM テンプレートをエクスポートします。

  1. Azure portal にサインインする
  2. Container Apps マネージド環境またはコンテナー アプリ リソースに移動します。
  3. 左側のメニューから、 Automation>Export テンプレートを選択します。
  4. [ ダウンロード ] を選択し、 .zip ファイルをローカル フォルダーに展開します。

抽出されたファイルには、次のものが含まれます。

File 説明
template.json リソース構成の定義
パラメーター ファイル デプロイ パラメーターの値
デプロイ スクリプト テンプレート実行用のスクリプト

注

エクスポートされたテンプレートは、構成を理解するための開始点として機能します。 削除する必要がある読み取り専用プロパティが含まれる場合があり、シークレットや証明書 の値は含まれません 。 エクスポートされた出力は、再デプロイに使用する前に注意深く確認してください。

マネージド環境テンプレートを変更する

マネージド環境を再デプロイする前に、エクスポートされた構成を更新します。

  • 場所を更新する: location プロパティをターゲットの Azure リージョンに設定します。
  • リソース名を検証する: マネージド環境名がターゲット リソース グループとリージョン内で一意であることを確認します。
  • Log Analytics の構成を確認する: ワークスペースがリージョン固有の場合は、Log Analytics ワークスペース参照を更新します。 場合によっては、ターゲット リージョンに新しいワークスペースを作成する必要があります。
  • 読み取り専用プロパティの削除: ポータルからエクスポートした場合は、展開エラーの原因となる id、 type、 systemData、その他の読み取り専用フィールドなどのプロパティを削除します。

コンテナー アプリ テンプレートを変更する

コンテナー アプリの構成をエクスポートした後、次の変更を行います。

  • マネージド環境のリファレンスを更新します。 managedEnvironmentId は、ターゲット リージョン内の新しいマネージド環境のリソース ID に置き換えます。 マネージド環境はリージョンにバインドされており、リージョン間で再利用することはできません。

  • コンテナー イメージ参照の確認: イメージ参照がターゲット リージョンからアクセス可能なコンテナー レジストリを指していることを確認します。 ACR geo レプリケーションを有効にした場合、既存の参照が変更なしで機能する可能性があります。

  • イングレス構成を確認する: 再デプロイ後、アプリケーションの完全修飾ドメイン名 (FQDN) が変更されます。 カットオーバー中にカスタム DNS レコードとトラフィック ルーティングを更新することを計画します。

  • シークレットとアプリの設定を再構成する: Azure Key Vault 参照またはアプリケーション構成を使用してシークレットを再作成します。 機密性の高い設定にエクスポートされた値に依存しないでください。

  • Dapr コンポーネントを更新する: Dapr を使用する場合は、Dapr コンポーネント構成がターゲット リージョンで使用可能なリソース (状態ストア、pub/sub ブローカー、シークレット ストアなど) を参照していることを確認します。

  • 診断と監視の更新: Log Analytics ワークスペースの参照を確認し、必要に応じて診断設定を再構成します。

再 デプロイ

Azure Container Apps のマネージド環境はリージョンにバインドされています。 コンテナー アプリを再デプロイする前に、ターゲット リージョンにマネージド環境を作成します。

マネージド環境をデプロイする

  1. Azure portal で、ターゲット リソース グループに移動します。
  2. [ カスタム テンプレートのデプロイ] を選択します。
  3. エディターで [独自のテンプレートを作成する] を選択し、変更した ARM テンプレートをアップロードします。
  4. 展開設定を確認し、[ 確認と作成 ] を選択してデプロイを開始します。

コンテナー レジストリのアクセスを検証する

コンテナー アプリをデプロイする前に、コンテナー アプリで使用される ID (システム割り当てマネージド ID またはユーザー割り当てマネージド ID) に、ターゲットの Azure Container Registry に AcrPull ロールが割り当てられていることを確認します。

az role assignment create \
  --assignee <IDENTITY_PRINCIPAL_ID> \
  --role AcrPull \
  --scope <ACR_RESOURCE_ID>

注

コンテナー アプリが別のサブスクリプションまたはリージョンの ACR を参照している場合は、デプロイ中にイメージのプルエラーが発生しないように、必要なアクセス許可が事前に構成されていることを確認します。

コンテナー アプリをデプロイする

  1. Azure portal で、ターゲット リソース グループに移動します。
  2. [ カスタム テンプレートのデプロイ] を選択します。
  3. コンテナー アプリの変更された ARM テンプレートをアップロードします。
  4. 設定を確認し、デプロイを完了します。

ネットワークの構成

デプロイ後、ソース構成と一致するようにネットワークを再構成します。

  1. イングレスの構成: アプリケーションの露出モデルに基づいて、パブリックまたはプライベートのイングレスを設定します。

  2. VNet 統合の再適用: コンテナー アプリがプライベート ネットワークを使用する場合は、ターゲット リージョンで VNet、サブネット、プライベート エンドポイント、プライベート DNS ゾーンを構成します。

  3. NSG と UDR の更新: 必要に応じて、ネットワーク セキュリティ グループとユーザー定義ルートを再作成します。

  4. IP 許可リストの更新: ダウンストリーム サービスで IP ベースの許可リストが使用されている場合は、ターゲット リージョン環境の新しい送信 IP アドレスで更新します。

  5. カスタム ドメインと証明書を構成する: カスタム ドメインと TLS 証明書は再配置中に転送されません。 新しいコンテナー アプリでこれらを再構成し、DNS レコードを更新します。

トラフィックをカットオーバーする

検証後、ターゲット リージョンのデプロイにトラフィックをリダイレクトします。

  1. 以前に DNS TTL を下げた場合は、新しいコンテナー アプリの FQDN を指す DNS レコードを更新します。

  2. Azure Front Door または Azure Traffic Manager を使用する場合は、バックエンド プールまたはエンドポイントを更新してターゲット リージョン コンテナー アプリを含め、ソースリージョンエンドポイントを削除します。

  3. トラフィックを監視して、要求が新しいデプロイメントに到達していることを確認します。

ヒント

ロールバック ウィンドウでソース コンテナー アプリを実行したままにします。 問題が発生した場合は、問題を解決するまで、DNS またはトラフィック ルーティングをソース エンドポイントに戻します。

確かめる

トラフィックのカットオーバー後、次の項目を検証します。

  • アプリケーションの可用性と応答時間。
  • 予想される負荷とピーク時の負荷でのスケーリング動作。
  • データベース、Key Vault、ストレージ、メッセージングなどの依存サービスへの接続。
  • ダウンストリーム リソースへのマネージド ID アクセス。
  • DAPRコンポーネント機能を使う場合。
  • Azure Monitor と Log Analytics に流れるログとメトリック。

CLI を使用して確認します。

# Confirm the container app is running
az containerapp show \
  --name <APP_NAME> \
  --resource-group <TARGET_RESOURCE_GROUP> \
  --query "{status:properties.runningStatus, fqdn:properties.configuration.ingress.fqdn}" \
  --output table

# Test the application endpoint
curl -s -o /dev/null -w "%{http_code}" https://<APP_FQDN>/health

重要

検証が完了し、ターゲットのデプロイが正常であることが確認されるまで、ソース コンテナー アプリを実行したままにします。 ソース リソースをクリーンアップする前に、ロールバック ウィンドウ (24 ~ 48 時間など) を定義します。

ソースリソースを整理する

検証とトラフィックのカットオーバーが成功した後:

  1. ソース コンテナー アプリを削除します。
  2. ソース管理環境が不要になった場合は削除します。
  3. 不要な料金が発生しないように、未使用のコンテナー イメージ、ネットワーク リソース、ID の割り当てを削除します。
  4. ソース リソースを参照した監視ダッシュボードまたはアラート ルールを更新します。

制限事項

  • Azure Container Apps では、インプレースまたはライブ リージョンの再配置はサポートされていません。
  • シークレット、証明書、およびカスタム ドメインを再作成する必要があります。
  • リビジョン履歴は、ターゲットデプロイには保持されません。
  • カットオーバー中にはダウンタイムが必要です。
  • システム割り当てマネージド ID プリンシパル ID が変更されるため、すべての RBAC 割り当てを再作成する必要があります。
  • ユーザー割り当てマネージド ID はリージョンであり、ターゲット リージョンで再作成する必要があります。
  • 送信 IP アドレスが変更され、ダウンストリーム サービスの許可リストに影響する可能性があります。