GitHub Actions を使用した ARM テンプレートのデプロイ
GitHub Actions は GitHub の一連の機能であり、コードを格納するのと同じ場所でソフトウェア開発ワークフローを自動化したり、プル要求や問題に対して共同作業を行ったりするために使用します。
Azure Resource Manager テンプレートのデプロイ アクションを使って、Azure Resource Manager テンプレート (ARM テンプレート) の Azure へのデプロイを自動化します。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
GitHub アカウント。 ない場合は、無料でサインアップしてください。
- Resource Manager テンプレートとワークフロー ファイルを保存するための GitHub リポジトリ。 リポジトリを作成するには、新しいリポジトリの作成に関するページをご覧ください。
ワークフロー ファイルの概要
ワークフローは、お使いのリポジトリの /.github/workflows/
パスの YAML (.yml) ファイルに定義されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。
このファイルには 2 つのセクションがあります。
Section | タスク |
---|---|
認証 | 1.デプロイ資格情報を生成します。 |
デプロイする | 1.Resource Manager テンプレートをデプロイします。 |
デプロイ資格情報を生成する
OIDC で Azure ログイン アクションを使用するには、Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID でフェデレーション ID 資格情報を構成する必要があります。
オプション 1: Microsoft Entra アプリケーション
- Azure portal、Azure CLI、または Azure PowerShell で、サービス プリンシパルを使って Microsoft Entra アプリケーションを作成します。
- 後で GitHub Actions ワークフローで使うため、クライアント ID、サブスクリプション ID、ディレクトリ (テナント) ID の値をコピーしておきます。
- Azure portal、Azure CLI、または Azure PowerShell を使用して、サービス プリンシパルに適切なロールを割り当てます。
- GitHub Actions により GitHub リポジトリに対して発行されたトークンを信頼するように、Microsoft Entra アプリケーションでフェデレーション ID 資格情報を構成します。
オプション 2: ユーザー割り当てマネージド ID
- 「ユーザー割り当てマネージド ID を作成する」の手順を使用して、ユーザー割り当てマネージド ID を作成します。
- 後で GitHub Actions ワークフローで使うため、クライアント ID、サブスクリプション ID、ディレクトリ (テナント) ID の値をコピーしておきます。
- ユーザー割り当てマネージド ID に適切なロールを割り当てます。
- GitHub Actions により GitHub リポジトリに対して発行されたトークンを信頼するように、ユーザー割り当てマネージド ID でフェデレーション ID 資格情報を構成します。
GitHub シークレットを構成する
ログイン アクションには、アプリケーションのクライアント ID、ディレクトリ (テナント) ID、サブスクリプション ID を指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、GitHub シークレットに格納してワークフローで参照できます。 GitHub シークレットとして値を保存する方がより安全なオプションです。
GitHub で、お使いのリポジトリに移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
Note
パブリック リポジトリのワークフロー セキュリティを強化するには、リポジトリ シークレットの代わりに環境シークレットを使用します。 環境が承認を必要とするなら、ジョブは必須のレビュー担当者の一人が承認するまで環境のシークレットにアクセスできません。
AZURE_CLIENT_ID
、AZURE_TENANT_ID
、AZURE_SUBSCRIPTION_ID
のシークレットを作成します。 Microsoft Entra アプリケーションまたは GitHub シークレットのユーザー割り当てマネージド ID から次の値をコピーします。GitHub シークレット Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID AZURE_CLIENT_ID クライアント ID AZURE_SUBSCRIPTION_ID サブスクリプション ID AZURE_TENANT_ID ディレクトリ (テナント) ID Note
セキュリティ上の理由から、値をワークフローに直接渡すのではなく、GitHub シークレットを使用することをお勧めします。
Resource Manager テンプレートを追加する
Resource Manager テンプレートを GitHub リポジトリに追加します。 このテンプレートでは、ストレージ アカウントが作成されます。
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
ファイルは、リポジトリ内のどこに置いてもかまいません。 次のセクションのワークフロー サンプルでは、テンプレート ファイル名が azuredeploy.json であり、リポジトリのルートに保存されていることを想定しています。
ワークフローを作成する
ワークフロー ファイルは、リポジトリのルートにある .github/workflows フォルダーに保存する必要があります。 ワークフロー ファイルの拡張子には、 .yml または .yaml を指定できます。
- GitHub リポジトリの上部のメニューで、 [Actions](アクション) を選択します。
- [New workflow](新しいワークフロー) を選択します。
- [Set up a workflow yourself](ワークフローを自分でセットアップする) を選択します。
- main.yml 以外の別の名前を使用する場合は、ワークフロー ファイルの名前を変更します。 (例: deployStorageAccount.yml)。
- yml ファイルの内容を以下に置き換えます。
on: [push]
name: Azure ARM
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Checkout code
- uses: actions/checkout@main
# Log into Azure
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Deploy ARM template
- name: Run ARM deploy
uses: azure/arm-deploy@v1
with:
subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
resourceGroupName: ${{ secrets.AZURE_RG }}
template: ./azuredeploy.json
parameters: storageAccountType=Standard_LRS
# output containerName variable from template
- run: echo ${{ steps.deploy.outputs.containerName }}
注意
代わりに、ARM デプロイ アクション (例: .azuredeploy.parameters.json
) に JSON 形式のパラメーター ファイルを指定できます。
ワークフロー ファイルの最初のセクションには次のものが含まれます。
- name:ワークフローの名前。
- on: ワークフローをトリガーする GitHub イベントの名前。 メイン ブランチでプッシュ イベントが発生し、指定された 2 つのファイルの少なくとも 1 つが変更されると、ワークフローがトリガーされます。 この 2 つのファイルは、ワークフロー ファイルとテンプレート ファイルです。
- [Start commit](コミットの開始) を選択します。
- [Commit directly to the main branch](メイン ブランチに直接コミットする) を選択します。
- [Commit new file](新しいファイルをコミットする) (または [Commit changes](変更をコミットする) ) を選択します。
ワークフローは、ワークフロー ファイルまたはテンプレート ファイルの更新によってトリガーされるように構成されているため、変更をコミットするとすぐにワークフローが開始されます。
ワークフローの状態を確認する
- [Actions]\(アクション\) タブを選択します。Create deployStorageAccount.yml ワークフローが表示されます。 ワークフローの実行には 1 から 2 分かかります。
- ワークフローを選択して開きます。
- メニューから [Run ARM deploy](ARM デプロイを実行) を選択して、デプロイを確認します。
リソースをクリーンアップする
リソース グループとリポジトリが不要になったら、リソース グループと GitHub リポジトリを削除して、デプロイしたリソースをクリーンアップします。