GitHub Action を構成してコンテナー インスタンスを作成します
GitHub Actions は GitHub の一連の機能であり、コードを格納するのと同じ場所でソフトウェア開発ワークフローを自動化したり、 pull request や問題に対して共同作業を行ったりするために使用します。
[Deploy to Azure Container Instances] (Azure Container Instances にデプロイ) GitHub Actions を使用して、Azure Container Instances への単一のコンテナーのデプロイを自動化します。 このアクションでは、az container create コマンドと同様にコンテナー インスタンスのプロパティを設定できます。
この記事では、以下のアクションを実行するワークフローを GitHub リポジトリで設定する方法について説明します。
- Dockerfile からのイメージのビルド
- Azure コンテナー レジストリにイメージをプッシュする
- Azure コンテナー インスタンスにコンテナー イメージをデプロイする
この記事では、ワークフローを設定する 2 つの方法を示します。
- GitHub ワークフローを構成する - [Deploy to Azure Container Instances] (Azure Container Instances にデプロイ) アクションやその他のアクションを使用して、GitHub リポジトリでワークフローを作成します。
- CLI 拡張機能を使用する - Azure CLI の [Azure に配置する] 拡張機能で
az container app up
コマンドを使用します。 このコマンドは、GitHub ワークフローの作成とデプロイ手順を効率化します。
重要
Azure Container Instances 用の GitHub Actions は現在、プレビュー段階です。 プレビュー版は、追加使用条件に同意することを条件に使用できます。 この機能の一部の側面は、一般公開 (GA) 前に変更される可能性があります。
前提条件
- GitHub アカウント - まだお持ちでない場合は、 https://github.com でアカウントを作成します。
- Azure CLI - Azure Cloud Shell または Azure CLI のローカル インストールを使用して、Azure CLI の手順を実行できます。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
- Azure コンテナー レジストリ - ない場合は、Azure CLI、Azure portal、またはその他の方法を使用して Basic レベルで Azure コンテナー レジストリを作成します。 デプロイに使用されるリソース グループをメモしておきます。これは、GitHub ワークフローに使用されます。
リポジトリの設定
この記事の例では、GitHub を使用して次のリポジトリをフォークします: https://github.com/Azure-Samples/acr-build-helloworld-node
このリポジトリには、小規模な Web アプリのコンテナー イメージを作成するための Dockerfile とソース ファイルが含まれています。
リポジトリに対して Actions が有効になっていることを確認します。 フォークされたリポジトリに移動し、 [Settings]>[Actions](アクション) を選択します。 [Actions permissions] (アクションのアクセス許可) で、[Allow all actions] (すべてのアクションを許可) が選択されていることを確認します。
GitHub ワークフローを構成する
Azure 認証の資格情報を作成する
GitHub ワークフローでは、Azure CLI に対して認証を行うための Azure 資格情報を指定する必要があります。 次の例では、共同作成者のロールを持ち、コンテナー レジストリのリソース グループをスコープとするサービス プリンシパルを作成します。
まず、リソース グループのリソース ID を取得します。 次の az group show コマンドでは、自分のグループの名前に置き換えます。
groupId=$(az group show \
--name <resource-group-name> \
--query id --output tsv)
サービス プリンシパルを作成するには、az ad sp create-for-rbac を使用します。
az ad sp create-for-rbac \
--scope $groupId \
--role Contributor \
--sdk-auth
出力は次のようになります。
{
"clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
"clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}
後の手順の中で使用するため、この JSON 出力を保存します。 また、次のセクションでサービス プリンシパルを更新する必要がある clientId
もメモしておいてください。
レジストリ認証のために更新する
Azure サービス プリンシパルの資格情報を更新して、コンテナー レジストリに対するプッシュとプルのアクセスを許可します。 この手順により、GitHub ワークフローでサービス プリンシパルを使用して、コンテナー レジストリに対する認証と、Docker イメージのプッシュおよびプルを実行できます。
コンテナー レジストリのリソース ID を取得します。 次の az acr show コマンドでは、自分のレジストリの名前に置き換えます。
registryId=$(az acr show \
--name <registry-name> \
--resource-group <resource-group-name> \
--query id --output tsv)
az role assignment create を使用して、レジストリに対するプッシュおよびプル アクセスを付与する AcrPush ロールを割り当てます。 サービス プリンシパルのクライアント ID は自分のものに置き換えてください。
az role assignment create \
--assignee <ClientId> \
--scope $registryId \
--role AcrPush
資格情報を GitHub リポジトリに保存する
GitHub UI で、フォークされたリポジトリに移動し、[セキュリティ] > [Secrets and variables] (シークレットと変数) > [アクション] を選びます。
[New repository secret] (新しいリポジトリ シークレット) を選択して、次のシークレットを追加します。
Secret | 値 |
---|---|
AZURE_CREDENTIALS |
サービス プリンシパルの作成ステップからの JSON 出力全体 |
REGISTRY_LOGIN_SERVER |
レジストリのログイン サーバー名 (すべて小文字)。 例: myregistry.azurecr.io |
REGISTRY_USERNAME |
サービス プリンシパルの作成からの JSON 出力からの clientId |
REGISTRY_PASSWORD |
サービス プリンシパルの作成からの JSON 出力からの clientSecret |
RESOURCE_GROUP |
サービス プリンシパルのスコープ指定に使用したリソース グループの名前 |
ワークフロー ファイルを作成する
- GitHub UI で [Actions] (アクション) を選択します。
- [Set up a workflow yourself](ワークフローを自分でセットアップする) を選択します。
- [Edit new file](新しいファイルの編集) で、次の YAML の内容を貼り付けてサンプル コードを上書きします。 既定のファイル名
main.yml
をそのまま使用するか、選択したファイル名を指定します。 - [Start commit](コミットの開始) を選択し、コミットの短い説明と詳細な説明を必要に応じて入力し、 [Commit new file](新しいファイルのコミット) を選択します。
on: [push]
name: Linux_Container_Workflow
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- name: 'Login via Azure CLI'
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: 'Build and push image'
uses: azure/docker-login@v1
with:
login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
- name: 'Deploy to Azure Container Instances'
uses: 'azure/aci-deploy@v1'
with:
resource-group: ${{ secrets.RESOURCE_GROUP }}
dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
registry-username: ${{ secrets.REGISTRY_USERNAME }}
registry-password: ${{ secrets.REGISTRY_PASSWORD }}
name: aci-sampleapp
location: 'west us'
ワークフローを検証する
ワークフロー ファイルをコミットすると、ワークフローがトリガーされます。 ワークフローの進行状況を確認するには、 [アクション]>[ワークフロー] に移動します。
ワークフローの各手順の状態と結果の表示については、「ワークフロー実行の履歴を表示する」を参照してください。 ワークフローが完了しない場合は、ログの表示とエラーの診断に関するページを参照してください。
ワークフローが正常に完了したら、az container show コマンドを実行して、aci-sampleapp という名前のコンテナー インスタンスの情報を取得します。 リソース グループの名前は自分のものに置き換えてください。
az container show \
--resource-group <resource-group-name> \
--name aci-sampleapp \
--query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
--output table
出力は次のようになります。
FQDN ProvisioningState
--------------------------------- -------------------
aci-action01.westus.azurecontainer.io Succeeded
インスタンスがプロビジョニングされたら、ブラウザーでコンテナーの FQDN にアクセスして、実行中の Web アプリを表示します。
[Azure に配置する] 拡張機能の使用
または、Azure CLI の [Azure に配置する] 拡張機能を使用してワークフローを構成します。 拡張機能の az container app up
コマンドは、Azure Container Instances にデプロイするワークフローを設定するための入力パラメーターを受け取ります。
Azure CLI によって作成されるワークフローは、GitHub を使用して手動で作成できるワークフローに似ています。
追加の前提条件
このシナリオの前提条件とリポジトリ設定に加えて、Azure CLI の [Azure に配置する] 拡張機能をインストールする必要があります。
az extension add コマンドを実行して、拡張機能をインストールします。
az extension add \
--name deploy-to-azure
拡張機能の検索、インストール、および管理の詳細については、「Azure CLI で拡張機能を使用する」を参照してください。
az container app up
を実行します。
az container app up コマンドを実行するには、少なくとも以下を指定します。
- Azure コンテナー レジストリの名前。例: myregistry
- GitHub リポジトリの URL。例:
https://github.com/<your-GitHub-Id>/acr-build-helloworld-node
サンプル コマンド:
az container app up \
--acr myregistry \
--repository https://github.com/myID/acr-build-helloworld-node
コマンドの進行状況
プロンプトが表示されたら、GitHub 資格情報を入力するか、repo および user スコープを持つ GitHub 個人用アクセス トークン (PAT) を入力して、GitHub アカウントで認証します。 GitHub 資格情報を入力した場合、コマンドによって PAT が作成されます。 追加のプロンプトに従って、ワークフローを構成します。
このコマンドは、ワークフローのリポジトリ シークレットを作成します。
- Azure CLI 用のサービス プリンシパル資格情報
- Azure コンテナー レジストリにアクセスするための資格情報
コマンドによってワークフロー ファイルがリポジトリにコミットされた後、ワークフローがトリガーされます。
出力は次のようになります。
[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at: http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/
ワークフローの状態と各手順の結果を GitHub UI で表示する方法については、「ワークフロー実行の履歴を表示する」を参照してください。
ワークフローを検証する
ワークフローは、GitHub リポジトリのベース名 (この場合は acr-build-helloworld-node) を使用して Azure コンテナー インスタンスをデプロイします。 ワークフローが正常に完了したら、az container show コマンドを実行して、acr-build-helloworld-node という名前のコンテナー インスタンスの情報を取得します。 リソース グループの名前は自分のものに置き換えてください。
az container show \
--resource-group <resource-group-name> \
--name acr-build-helloworld-node \
--query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
--output table
出力は次のようになります。
FQDN ProvisioningState
--------------------------------- -------------------
acr-build-helloworld-node.westus.azurecontainer.io Succeeded
インスタンスがプロビジョニングされたら、ブラウザーでコンテナーの FQDN にアクセスして、実行中の Web アプリを表示します。
リソースをクリーンアップする
az container delete コマンドを使用してコンテナー インスタンスを停止します。
az container delete \
--name <instance-name>
--resource-group <resource-group-name>
リソース グループとその中のすべてのリソースを削除するには、az group delete コマンドを実行します。
az group delete \
--name <resource-group-name>
次のステップ
開発ワークフローを自動化するためのその他のアクションについて GitHub マーケットプレースで確認します