Azure Container Apps でリビジョンとシークレットを管理する

完了

Azure Container Apps では、リビジョンを作成することで、コンテナー アプリのバージョン管理を実装します。 リビジョンとは、コンテナー アプリ バージョンの変更不可能なスナップショットです。 リビジョンを使って、アプリの新しいバージョンをリリースすることや、アプリの以前のバージョンにすばやく戻すことができます。 リビジョン スコープの変更でアプリケーションを更新すると、新しいリビジョンが作成されます。 特定のリビジョンに基づいてコンテナー アプリを更新することもできます。

アクティブなリビジョンと、アクティブな各リビジョンにルーティングされる外部トラフィックを制御できます。 リビジョン名は、リビジョンを識別するため、また、リビジョンの URL 内で使用されます。 リビジョンのサフィックスを設定することで、リビジョン名をカスタマイズできます。

既定では、英数字の半ランダム文字列で構成されるサフィックスを持つ一意のリビジョン名が Container Apps によって作成されます。 たとえば、album-api という名前のコンテナー アプリの場合、リビジョン サフィックス名を 1st-revision に設定すると、album-api--1st-revision という名前のリビジョンが作成されます。 ARM テンプレートで、Azure CLI az containerapp createaz containerapp update コマンドを使って、または Azure portal を介してリビジョンを作成するときに、リビジョンのサフィックスを設定できます。

コンテナー アプリの更新

az containerapp update コマンドを使うと、環境変数の変更、リソースの計算、パラメーターのスケーリング、別のイメージのデプロイを行うことができます。 コンテナー アプリの更新にリビジョンスコープの変更が含まれている場合は、新しいリビジョンが生成されます。

az containerapp update \
  --name <APPLICATION_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --image <IMAGE_NAME>

az containerapp revision list コマンドを使って、コンテナー アプリに関連付けられたすべてのリビジョンを一覧表示できます。

az containerapp revision list \
  --name <APPLICATION_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  -o table

Container Apps コマンドの詳細については、az containerapp リファレンスを参照してください。

Azure Container Apps でシークレットを管理する

Azure Container Apps を使うと、アプリケーションで機密性の高い構成値を安全に格納できます。 シークレットがアプリケーション レベルで定義されると、コンテナー アプリでセキュリティで保護された値を使用できるようになります。 具体的には、スケール ルール内でセキュリティで保護された値を参照できます。

  • シークレットのスコープはアプリケーションであり、アプリケーションの特定のリビジョンの外部です。
  • シークレットを追加、削除、または変更しても、新しいリビジョンは生成されません。
  • アプリケーションの各リビジョンで、1 つまたは複数のシークレットを参照できます。
  • 複数のリビジョンで同じシークレットを参照できます。

シークレットを更新または削除しても、アプリ内の既存のリビジョンには自動的には影響しません。 シークレットが更新または削除されるときは、2 つの方法のいずれかで変更に対応できます。

  1. 新しいリビジョンをデプロイします。
  2. 既存のリビジョンを再起動します。

シークレットを削除する前に、古いシークレットを参照しない新しいリビジョンをデプロイします。 次に、シークレットを参照するすべてのリビジョンを非アクティブ化します。

Note

コンテナー アプリでは、Azure Key Vault の統合はサポートされていません。 代わりに、コンテナー アプリでマネージド ID を有効にし、アプリの Key Vault SDK を使用してシークレットにアクセスします。

シークレットの定義

コンテナー アプリを作成するとき、--secrets パラメーターを使用してシークレットを定義します。

  • このパラメーターには、スペースで区切った一連の名前と値のペアを指定します。
  • 各ペアを区切るには、等号 (=) を使います。

以下の例では、キュー ストレージ アカウントへの接続文字列が --secrets パラメーター内で宣言されています。 queue-connection-string の値は、$CONNECTION_STRING という名前の環境変数から取得されます。

az containerapp create \
  --resource-group "my-resource-group" \
  --name queuereader \
  --environment "my-environment-name" \
  --image demos/queuereader:v1 \
  --secrets "queue-connection-string=$CONNECTION_STRING"

アプリケーション レベルでシークレットを宣言した後、コンテナー アプリで新しいリビジョンを作成するとき、環境変数でそれらのシークレットを参照できます。 環境変数でシークレットを参照すると、その値には、シークレットで定義されている値が設定されます。 Azure CLI を使用して、環境変数でシークレットを参照するには、その値を secretref: に設定し、その後にシークレットの名前を指定します。

次の例は、アプリケーション レベルで接続文字列を宣言するアプリケーションを示しています。 この接続は、コンテナー環境変数で参照されています。

az containerapp create \
  --resource-group "my-resource-group" \
  --name myQueueApp \
  --environment "my-environment-name" \
  --image demos/myQueueApp:v1 \
  --secrets "queue-connection-string=$CONNECTIONSTRING" \
  --env-vars "QueueName=myqueue" "ConnectionString=secretref:queue-connection-string"