Azure Pipelines から Azure Container Apps にデプロイする

Azure Container Apps を使用すると、Azure Pipelines を使用してコンテナー アプリにリビジョンを発行できます。 コミットが Azure DevOps リポジトリにプッシュされると、コンテナー レジストリ内のコンテナー イメージを更新するパイプラインがトリガーされます。 Azure 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 ロールが割り当てられていない場合は、acrUsernameacrPassword 入力パラメーターを使用してレジストリの管理者資格情報を指定します。

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 での認証

コンテナー イメージをプッシュするには、Azure Container Apps タスクを Azure Container Registry で認証する必要があります。 コンテナー イメージをプッシュするには、コンテナー アプリケーションを Container Registry で認証する必要もあります。

イメージをプッシュするために、タスクは、azureSubscription で提供されるサービス接続を使用して、acrName で指定されたコンテナー レジストリで自動的に認証されます。 サービス接続の ID にレジストリの AcrPush ロールが割り当てられていない場合は、acrUsernameacrPassword を使用してレジストリの管理者資格情報を指定します。

イメージをプルするために、Azure Container Apps はマネージド ID (推奨) または管理者資格情報を使用して、Azure Container Registry で認証を行います。 マネージド ID を使用するには、タスクのターゲット コンテナー アプリを、マネージド ID を使用するように構成する必要があります。 レジストリの管理者資格情報で認証するには、タスクの acrUsernameacrPassword 入力を設定します。

構成

Azure Container Apps にデプロイするように Azure DevOps パイプラインを構成するには、次の手順を行います。

  • アプリ用の Azure DevOps リポジトリを作成する
  • マネージド ID が有効になっているコンテナー アプリを作成する
  • コンテナー アプリのマネージド ID に Azure Container Registry の AcrPull ロールを割り当てる
  • Azure DevOps Marketplace から Azure Container Apps タスクをインストールする
  • Azure サブスクリプションの Azure DevOps サービス接続を構成する
  • Azure DevOps パイプラインを作成する

前提条件

要件 手順
Azure アカウント お持ちでない場合は、無料のアカウントを作成してください。 続行するには、Azure サブスクリプションの "共同作成者" または "所有者" のアクセス許可が必要です。 詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
Azure DevOps プロジェクト Azure DevOps に移動し、[無料で開始する] を選択します。 次に、新しいプロジェクトを作成します。
Azure CLI Azure CLI をインストールします。

Azure DevOps リポジトリを作成し、ソース コードを複製する

パイプラインを作成する前に、アプリのソース コードがリポジトリ内に存在している必要があります。

  1. Azure DevOps にログインし、お使いのプロジェクトに移動します。

  2. [リポジトリ] ページを開きます。

  3. 上部のナビゲーション バーで、[リポジトリ] ドロップダウンを選択し、[リポジトリのインポート] を選択します。

  4. 次の情報を入力し、[インポート] を選択します。

    フィールド
    リポジトリの種類 Git
    クローン URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
    名前 my-container-app
  5. [複製] を選択してリポジトリの URL を表示し、コピーします。

  6. ターミナルを開き、次のコマンドを実行してリポジトリをクローンします。

    git clone <REPOSITORY_URL> my-container-app
    

    <REPOSITORY_URL> を、コピーした URL に置き換えます。

コンテナー アプリを作成し、マネージド ID を構成する

次の手順で az containerapp up コマンドを使用してコンテナー アプリを作成します。 このコマンドは、Azure リソースの作成、コンテナー イメージのビルド、レジストリへのイメージの格納、コンテナー アプリへのデプロイを行います。

アプリを作成したら、マネージド ID をアプリに追加し、その ID に AcrPull ロールを割り当てて、ID でレジストリからイメージをプルできるようにすることができます。

  1. クローンされたレポジトリの src フォルダーに移動します。

    cd my-container-app
    cd src
    
  2. Azure リソースを作成し、az containerapp up コマンドを使用してコンテナー アプリをデプロイします。

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. コマンド出力に示されている Azure Container Registry の名前をメモします。

  4. コンテナー レジストリの完全なリソース ID を取得します。

    az acr show --name <ACR_NAME> --query id --output tsv
    

    <ACR_NAME> は自分のレジストリの名前に置き換えます。

  5. コンテナー アプリのマネージド ID を有効にします。

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned \
      --output tsv
    

    コマンド出力に示されているマネージド ID のプリンシパル ID をメモします。

  6. Azure Container Registry の 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> を Azure Container Registry のリソース ID に置き換えます。

  7. マネージド ID を使用してイメージを Azure Container Registry からプルするようにコンテナー アプリを構成します。

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    <ACR_NAME> を Azure Container Registry の名前に置き換えます。

Azure DevOps サービス接続を作成する

Azure Container Apps をデプロイするには、お使いの Azure サブスクリプションの Azure DevOps サービス接続を作成する必要があります。

  1. Azure DevOps で、プロジェクト設定 を選択します。

  2. [サービス接続] を選択します。

  3. [新しいサービス接続] を選択します。

  4. [Azure Resource Manager] を選択します。

  5. [サービス プリンシパル (自動)] を選択し、[次へ] を選択します。

  6. 次の情報を入力して、 [保存] を選択します。

    フィールド
    サブスクリプション Azure サブスクリプションを選択します。
    リソース グループ コンテナー アプリとコンテナー レジストリが含まれているリソース グループ (my-container-app-rg) を選択します。
    サービス接続名 my-subscription-service-connection

サービス接続の詳細については、「Microsoft Azure に接続する」を参照してください。

Azure DevOps YAML パイプラインを作成する

  1. Azure DevOps プロジェクトで、[パイプライン] を選択します。

  2. [新しいパイプライン] を選択します。

  3. [Azure Repos Git] を選択します。

  4. ソース コードが含まれているリポジトリ (my-container-app) を選択します。

  5. [スタート パイプライン] を選択します。

  6. エディターで、ファイルの内容を次の 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 Container Registry の名前に置き換えます。

  7. [保存および実行] を選択します。

Azure Pipelines の実行によって、コンテナー アプリのビルドとデプロイが開始されます。 その進行状況を確認するには、[パイプライン] に移動し、[実行] を選択します。 1 回目のパイプラインの実行中、パイプラインによるサービス接続の使用を承認するように要求される場合があります。

アプリの新しいリビジョンをデプロイするには、新しいコミットを メイン ブランチにプッシュします。