Azure Container Apps を使用すると、Azure Pipelines を使用して リビジョン をコンテナー アプリに発行できます。 コミットが Azure DevOps リポジトリにプッシュされると、コンテナー レジストリ内のコンテナー イメージを更新するパイプラインがトリガーされます。 Container Apps では、更新されたコンテナー イメージに基づいて新しいリビジョンが作成されます。
リポジトリ内の特定のブランチへのコミットによって、パイプラインがトリガーされます。 パイプラインを作成する際、トリガーとなるブランチを決定します。
Container Apps の Azure Pipelines タスク
このタスクは、次のシナリオをサポートします。
- Dockerfile からビルドし、Container Apps にデプロイします。
- Dockerfile を使用せずにソース コードからビルドし、Container Apps にデプロイする。 サポートされている言語には、.NET、Java、Node.js、PHP、Python が含まれます。
- 既存のコンテナー イメージを Container Apps にデプロイします。
運用環境のリリースでは、このタスクは Azure DevOps に付属しており、明示的なインストールは必要ありません。 完全なドキュメントについては、「AzureContainerApps@1 - Azure Container Apps デプロイ v1 タスク」を参照してください。
使用例
タスクを使用するための一般的なシナリオを次に示します。 詳細については、タスクのドキュメントを参照してください。
Container Apps をビルドしてデプロイする
次のスニペットは、コンテナー イメージをソース コードからビルドし、Container Apps にデプロイする方法を示しています。
steps:
- task: AzureContainerApps@1
inputs:
appSourcePath: '$(Build.SourcesDirectory)/src'
azureSubscription: 'my-subscription-service-connection'
acrName: 'myregistry'
containerAppName: 'my-container-app'
resourceGroup: 'my-container-app-rg'
このタスクでは、 appSourcePath の Dockerfile を使用してコンテナー イメージをビルドします。 Dockerfile が見つからない場合、タスクは、appSourcePath 内のソース コードからコンテナー イメージをビルドすることを試みます。
既存のコンテナー イメージを Container Apps にデプロイする
次のスニペットは、既存のコンテナー イメージを Container Apps にデプロイする方法を示しています。 タスクは、サービス接続を使用してレジストリで認証します。 サービス接続の ID にレジストリの AcrPush ロールが割り当てられていない場合は、 acrUsername と acrPassword 入力パラメーターを使用してレジストリの管理者資格情報を指定します。
steps:
- task: AzureContainerApps@1
inputs:
azureSubscription: 'my-subscription-service-connection'
containerAppName: 'my-container-app'
resourceGroup: 'my-container-app-rg'
imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'
重要
別の手順でコンテナー イメージをビルドする場合は、 latestなどの安定したタグではなく、ビルド ID などの一意のタグを使用してください。 詳細については、「イメージ タグのベスト プラクティス」を参照してください。
Azure Container Registry での認証
コンテナー イメージをプッシュするには、Container Apps タスクを Azure Container Registry で認証する必要があります。 コンテナー アプリは、コンテナー イメージをプルするために、コンテナー レジストリで認証する必要もあります。
イメージをプッシュするために、タスクは、acrNameで提供されるサービス接続を使用して、azureSubscriptionで指定されたコンテナー レジストリで自動的に認証されます。 サービス接続の ID にレジストリの AcrPush ロールが割り当てられていない場合は、 acrUsername と acrPasswordを使用してレジストリの管理者資格情報を指定します。
イメージをプルするために、Container Apps はマネージド ID (推奨) または管理者資格情報を使用してコンテナー レジストリで認証します。 マネージド ID を使用するには、タスクのターゲット コンテナー アプリを、マネージド ID を使用するように構成する必要があります。 レジストリの管理者資格情報で認証するには、タスクの acrUsername と acrPassword 入力を設定します。
構成
Container Apps にデプロイするように Azure DevOps パイプラインを構成するには、次の手順を実行します。
- アプリ用の Azure DevOps リポジトリを作成する
- マネージド ID が有効になっているコンテナー アプリを作成する
- コンテナー レジストリの
AcrPullロールをコンテナー アプリのマネージド ID に割り当てる - Azure サブスクリプションの Azure DevOps サービス接続を構成する
- Azure DevOps パイプラインを作成する
前提条件
| 要件 | 手順 |
|---|---|
| Azure アカウント | お持ちでない場合は、無料のアカウントを作成してください。 この記事の手順を完了するには、Azure サブスクリプションに対する 共同作成者 または 所有者 のアクセス許可が必要です。 詳細については、Azure ポータルを使用して Azure ロールを割り当てる を参照してください。 |
| Azure DevOps プロジェクト | |
| Azure CLI | Azure CLI をインストールします。 |
Azure DevOps リポジトリを作成し、ソース コードを複製する
パイプラインを作成する前に、アプリのソース コードをリポジトリに配置する必要があります。
Azure DevOps にサインインし、プロジェクトに移動します。
左側のウィンドウで [リポジトリ ] を選択します。
[ リポジトリのインポート] を選択します。
次の値を入力し、[ インポート] を選択します。
フィールド 値 リポジトリの種類 Git クローン作成用 URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git インポート を選択します。
リポジトリの URL を表示してコピーするには、複製 を選択します。
コマンド プロンプトを開き、次のコマンドを実行します。
git clone <REPOSITORY_URL> my-container-app<REPOSITORY_URL>を、コピーした URL に置き換えます。
コンテナー アプリを作成し、マネージド ID を構成する
次の手順を実行して、コンテナー アプリを作成します。
az containerapp up コマンドは、Azure リソースを作成し、コンテナー イメージをビルドし、レジストリにイメージを格納して、コンテナー アプリをデプロイします。
アプリを作成したら、マネージド ID をアプリに追加し、その ID に AcrPull ロールを割り当てて、ID でレジストリからイメージをプルできるようにすることができます。
複製されたリポジトリの src フォルダーに切り替えます。
cd my-container-app cd srcaz containerapp upコマンドを使用して、Azure リソースを作成し、コンテナー アプリをデプロイします。az containerapp up \ --name my-container-app \ --source . \ --ingress externalヒント
ビルドが Debian リポジトリ エラーで失敗した場合は、
az extension add --name containerapp --upgradeを実行して、最新の Azure CLI バージョンと containerapp 拡張機能を使用していることを確認してください。 または、ビルドをより詳細に制御するために、Dockerfile をプロジェクトに追加します。コマンド出力で、Azure コンテナー レジストリの名前をメモします。
コンテナー レジストリの完全なリソース ID を取得します。
az acr show --name <ACR_NAME> --query id --output tsv<ACR_NAME>は自分のレジストリの名前に置き換えます。コンテナー アプリのマネージド ID を有効にします。
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assignedコマンド出力に示されているマネージド ID のプリンシパル ID をメモします。
コンテナー レジストリの
AcrPullロールをコンテナー アプリのマネージド ID に割り当てます。az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID><MANAGED_IDENTITY_PRINCIPAL_ID>をマネージド ID のプリンシパル ID に置き換え、<ACR_RESOURCE_ID>をコンテナー レジストリのリソース ID に置き換えます。マネージド ID を使用してコンテナー レジストリからイメージをプルするようにコンテナー アプリを構成します。
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system<ACR_NAME>を Azure コンテナー レジストリの名前に置き換えます。
Azure DevOps サービス接続を作成する
Container Apps にデプロイするには、Azure サブスクリプションの Azure DevOps サービス接続を作成する必要があります。
Azure DevOps で、プロジェクト設定 を選択します。
[サービス接続] を選択します。
サービス接続の作成を選択します。
[Azure Resource Manager] を選択してから、[次へ] を選択します。
[ アプリの登録 (自動)] を選択し、[ 次へ] を選択します。
次の値を指定し、[保存] を選択 します。
フィールド 値 サブスクリプション Azure サブスクリプションを選択します。 リソース グループ コンテナー アプリとコンテナー レジストリが含まれているリソース グループ ( my-container-app-rg) を選択します。サービス接続名 my-subscription-service-connection
サービス接続の詳細については、「Microsoft Azure に接続する」を参照してください。
Azure DevOps YAML パイプラインを作成する
Azure DevOps プロジェクトで、[パイプライン] を選択します。
[パイプラインを作成] を選択します。
[Azure Repos Git] を選択します。
注
オプションとして Azure Repos Git が表示されない場合は、ソース コードが Azure DevOps プロジェクトの Git リポジトリにプッシュされていることを確認してください。
ソース コードが含まれているリポジトリ (
my-container-app) を選択します。[スタート パイプライン] を選択します。
エディターで、ファイルの内容を次の YAML に置き換えます。
trigger: branches: include: - main pool: vmImage: ubuntu-latest steps: - task: AzureContainerApps@1 inputs: appSourcePath: '$(Build.SourcesDirectory)/src' azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>' acrName: '<ACR_NAME>' containerAppName: 'my-container-app' resourceGroup: 'my-container-app-rg'<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>を、前の手順で作成した Azure DevOps サービス接続 (my-subscription-service-connection) の名前に置き換えます。<ACR_NAME>を Azure コンテナー レジストリの名前に置き換えます。[保存および実行] を選択します。
Azure Pipelines の実行によって、コンテナー アプリのビルドとデプロイが開始されます。 進行状況を確認するには、[ パイプライン ] に移動し、実行を選択します。 初めてパイプラインを実行するとき、パイプラインによるサービス接続の使用の認可を求められる場合があります。
アプリの新しいリビジョンをデプロイするには、新しいコミットを メイン ブランチにプッシュします。