次の方法で共有


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

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 ロールが割り当てられていない場合は、 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 での認証

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

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

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

構成

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

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

前提条件

要件 手順
Azure アカウント お持ちでない場合は、無料のアカウントを作成してください。 この記事の手順を完了するには、Azure サブスクリプションに対する 共同作成者 または 所有者 のアクセス許可が必要です。 詳細については、Azure ポータルを使用して Azure ロールを割り当てる を参照してください。
Azure DevOps プロジェクト Azure DevOpsget started with Azure を選択します。 次に、新しいプロジェクトを作成します。
Azure CLI Azure CLI をインストールします。

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

パイプラインを作成する前に、アプリのソース コードをリポジトリに配置する必要があります。

  1. Azure DevOps にサインインし、プロジェクトに移動します。

  2. 左側のウィンドウで [リポジトリ ] を選択します。

  3. [ リポジトリのインポート] を選択します

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

    フィールド
    リポジトリの種類 Git
    クローン作成用 URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
  5. インポート を選択します。

  6. リポジトリの URL を表示してコピーするには、複製 を選択します。

  7. コマンド プロンプトを開き、次のコマンドを実行します。

    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. az containerapp up コマンドを使用して、Azure リソースを作成し、コンテナー アプリをデプロイします。

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    ヒント

    ビルドが Debian リポジトリ エラーで失敗した場合は、 az extension add --name containerapp --upgradeを実行して、最新の Azure CLI バージョンと containerapp 拡張機能を使用していることを確認してください。 または、ビルドをより詳細に制御するために、Dockerfile をプロジェクトに追加します。

  3. コマンド出力で、Azure コンテナー レジストリの名前をメモします。

  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
    

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

  6. コンテナー レジストリの 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 に置き換えます。

  7. マネージド 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 サービス接続を作成する必要があります。

  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] を選択します。

    オプションとして Azure Repos Git が表示されない場合は、ソース コードが Azure DevOps プロジェクトの 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 コンテナー レジストリの名前に置き換えます。

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

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

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