GitHub Actions を使用して Azure Container Apps にデプロイする
Azure Container Apps を使用すると GitHub Actions を使用して、コンテナー アプリにリビジョンを発行できます。 コミットが GitHub リポジトリにプッシュされると、コンテナー レジストリ内のコンテナー イメージを更新するワークフローがトリガーされます。 Azure Container Apps によって、更新されたコンテナー イメージに基づいて新しいリビジョンが作成されます。
GitHub Actions ワークフローは、リポジトリ内の特定のブランチへのコミットによってトリガーされます。 ワークフローを作成するときに、どのブランチがワークフローをトリガーするかを決定します。
この記事では、完全にカスタマイズ可能なワークフローを作成する方法について説明します。 Azure CLI を使用してスターター GitHub Actions ワークフローを生成するには、「Azure CLI を使用して GitHub Actions ワークフローを生成する」を参照してください。
Azure Container Apps GitHub アクション
コンテナー アプリをビルドしてデプロイするには、azure/container-apps-deploy-action
アクションを GitHub Actions ワークフローに追加します。
このアクションでは次のシナリオをサポートします。
- Dockerfile からビルドし、Container Apps にデプロイします
- Dockerfile を使用せずにソース コードからビルドし、Container Apps にデプロイする。 サポートされる言語には、.NET、Java、Node.js、PHP、Python が含まれる
- 既存のコンテナー イメージを Container Apps にデプロイする
使用例
アクションを使用するための一般的なシナリオを以下に示します。 詳細については、アクションの GitHub Marketplace ページを参照してください。
Container Apps をビルドしてデプロイする
次のスニペットは、コンテナー イメージをソース コードからビルドし、Container Apps にデプロイする方法を示しています。
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
appSourcePath: ${{ github.workspace }}/src
acrName: myregistry
containerAppName: my-container-app
resourceGroup: my-rg
アクションでは、appSourcePath
の Dockerfile を使用してコンテナー イメージをビルドします。 Dockerfile が見つからない場合、アクションは appSourcePath
のソース コードからコンテナー イメージをビルドしようとします。
既存のコンテナー イメージを Container Apps にデプロイする
次のスニペットは、既存のコンテナー イメージを Container Apps にデプロイする方法を示しています。
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Build and deploy Container App
uses: azure/container-apps-deploy-action@v1
with:
acrName: myregistry
containerAppName: my-container-app
resourceGroup: my-rg
imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}
重要
別の手順でコンテナー イメージを構築する場合は、latest
のような安定したタグではなく、コミット SHA などの一意のタグを使用してください。 詳細については、「イメージ タグのベスト プラクティス」を参照してください。
Azure Container Registry での認証
コンテナー イメージをプッシュするには、Azure Container Apps アクションを Azure Container Registry で認証する必要があります。 コンテナー イメージをプッシュするには、コンテナー アプリケーションを Container Registry で認証する必要もあります。
イメージをプッシュするには、azure/login
アクションに指定された資格情報を使用して、acrName
で指定されたコンテナー レジストリでアクションが自動的に認証されます。
イメージをプルするために、Azure Container Apps はマネージド ID (推奨) または管理者資格情報を使用して、Azure Container Registry で認証を行います。 マネージド ID を使用するには、アクションによってデプロイされるコンテナー アプリがマネージド ID を使用するように構成されている必要があります。 レジストリの管理者資格情報で認証するには、アクション acrUsername
と acrPassword
入力を設定します。
構成
Azure Container Apps にデプロイするように GitHub Actions ワークフローを構成するには、次の手順を実行します。
- アプリの GitHub リポジトリを作成する
- マネージド ID が有効になっているコンテナー アプリを作成する
- コンテナー アプリのマネージド ID に Azure Container Registry の
AcrPull
ロールを割り当てる - GitHub リポジトリにシークレットを構成する
- GitHub Actions ワークフローを作成する
前提条件
要件 | 手順 |
---|---|
Azure アカウント | お持ちでない場合は、無料のアカウントを作成してください。 続行するには、Azure サブスクリプションの "共同作成者" または "所有者" のアクセス許可が必要です。 詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。 |
GitHub アカウント | 無料試用版にサインアップします。 |
Azure CLI | Azure CLI をインストールします。 |
GitHub リポジトリを作成し、ソース コードをクローンする
ワークフローを作成する前に、アプリのソース コードが GitHub リポジトリに存在する必要があります。
Azure CLI を使用して Azure にサインインします。
az login
次に、CLI 用の最新の Azure Container Apps 拡張機能をインストールします。
az extension add --name containerapp --upgrade
独自の GitHub リポジトリがない場合は、サンプルから作成します。
- 次の場所に移動して、新しいリポジトリを作成します。
- リポジトリに
my-container-app
という名前を付けます。
ローカル コンピューターにリポジトリを複製します。
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
マネージド ID が有効になっているコンテナー アプリを作成する
次の手順の az containerapp up
コマンドを使用して、コンテナー アプリを作成します。 このコマンドは、Azure リソースの作成、コンテナー イメージのビルド、レジストリへのイメージの格納、コンテナー アプリへのデプロイを行います。
アプリを作成したら、アプリにマネージド ID を追加し、ID に AcrPull
ロールを割り当てて、ID がレジストリからイメージをプルできるようにします。
クローンされたレポジトリの src フォルダーに移動します。
cd my-container-app cd src
Azure リソースを作成し、
az containerapp up
コマンドを使用してコンテナー アプリをデプロイします。az containerapp up \ --name my-container-app \ --source . \ --ingress external
コマンド出力に示されている Azure Container Registry の名前をメモします。
コンテナー レジストリの完全なリソース 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 をメモします。
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 に置き換えます。マネージド 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 の名前に置き換えます。
GitHub リポジトリにシークレットを構成する
GitHub ワークフローでは、Azure で認証を行うために AZURE_CREDENTIALS
という名前のシークレットが必要です。 シークレットには、コンテナー アプリとコンテナー レジストリを含むリソース グループに対する共同作成者ロールを持つサービス プリンシパルの認証情報が含まれています。
コンテナー アプリとコンテナー レジストリを含むリソース グループに対する共同作成者ロールを持つサービス プリンシパルを作成します。
az ad sp create-for-rbac \ --name my-app-credentials \ --role contributor \ --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \ --json-auth \ --output json
<SUBSCRIPTION_ID>
を Azure サブスクリプション ID に置き換えます。 コンテナー レジストリが別のリソース グループにある場合は、--scopes
パラメーターに両方のリソース グループを指定します。コマンドからの JSON 出力をコピーします。
GitHub リポジトリで、[設定]>[シークレット]>[アクション] に移動し、[新しいリポジトリ シークレット] を選択します。
名前として「
AZURE_CREDENTIALS
」と入力し、JSON 出力のコンテンツを値として貼り付けます。[Add secret](シークレットの追加) を選択します。
GitHub Actions ワークフローを作成する
GitHub リポジトリで、[アクション] に移動し、[新しいワークフロー] を選択します。
[Set up a workflow yourself]\(ワークフローを自分でセットアップする\) を選択します。
エディターに次の YAML を貼り付けます。
name: Azure Container Apps Deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Log in to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Build and deploy Container App uses: azure/container-apps-deploy-action@v1 with: appSourcePath: ${{ github.workspace }}/src acrName: <ACR_NAME> containerAppName: my-container-app resourceGroup: my-container-app-rg
<ACR_NAME>
を Azure Container Registry の名前に置き換えます。branches
の下のブランチ名と、appSourcePath
、containerAppName
、およびresourceGroup
の値が、リポジトリと Azure リソースの値と一致していることを確認してください。メイン ブランチへの変更をコミットします。
GitHub Actions ワークフローの実行は、コンテナー アプリのビルドとデプロイを開始する必要があります。 進行状況を確認するには、[アクション] に移動します。
アプリの新しいリビジョンをデプロイするには、新しいコミットを メイン ブランチにプッシュします。