GitHub Actions からARM テンプレート、Bicep ファイルを実行してAzure リソースを作成する
今回はAzure リソースを作成するために使うARM テンプレート、Bicep をGitHub Actions から利用する方法について説明します。

実行環境
記事内のAzure CLI コマンド、GitHub Actions で利用するAzure CLI のバージョンは以下を利用します。また、記事内のAzure CLI はCloudShell を利用して実行するものとします。
| Azure CLl | 2.52.0 | 
|---|
前提条件
本記事では以下の前提条件を満たしている前提で進めます。
- GitHub アカウント、Azure アカウントを持っていること
- Azure でサービスプリンシパルとフェデレーション資格情報を作成済みでGitHub リポジトリに資格情報のシークレットが登録されていること
Azure のサービスプリンシパルとフェデレーション資格情報の作成、GitHub 上のシークレット登録がまだであれば、以下記事を参考に作成をお願いします。
OpenID Connect を使ってGitHub Actions からAzure にログインする
ARM テンプレート、Bicep とは
ARM テンプレートとは
ARM テンプレートはAzure Resource Manager 内の一つの機能であり、JSON 形式のテンプレートファイルを利用することで指定したパラメータのAzure リソースを反復的に作成できる機能です。また、ARM テンプレートはAzure Portal のリソース作成時やデプロイ後にJSON 形式のテンプレートを確認できるため、確認した内容を組み合わせることでファイルを簡単に作成することもできます。
ARM テンプレートでデプロイを行う時は、事前にリソースグループを指定する形でデプロイを行ったり、ARM テンプレート内でリソースグループを作成し、そのリソースグループ内にデプロイすることができます。
Bicep とは
Bicep はAzure リソースをデプロイするために開発されたドメイン固有言語 (DSL) です。ARM テンプレートのJSON ファイルより記述量が少なく、簡潔な記載でプログラミング言語に慣れていない方でも記述しやすくなっています。また、Bicep ファイルをモジュールごとに分割することで、関連するリソースをセットにしたり保守性も優れています。
Bicep のデプロイもARM テンプレートと同様にリソースグループを事前に指定する方法やBicep ファイル内でリソースグループを作成し、そのリソースグループを使用しデプロイする方法があります。
ARM、Bicep の料金について
ARM、Bicep の実行は無料となり、テンプレート (ファイル) から作成したAzure リソース分が課金されます。
GitHub Actions でARM テンプレート、Bicep ファイルを実行する方法
GitHub Actions のARM テンプレート、Bicep ファイル実行はGitHub Marketplace にてアクションがあるためこちらを利用します。GitHub Actions のメタデータファイルでは「azure/arm-deploy@v1」のような記述を行います。
jobs
 build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      # 省略
      - uses: azure/arm-deploy@v1
        with:
          resourceGroupName: <YourResourceGroup>
          template: <path/to/azuredeploy.json>
          parameters: <TemplateParameters>
          additionalArguments: <AdditionalArguments>
各種パラメータは以下の通りです。
| resourceGroupName | ARM テンプレートをデプロイするリソースグループを指定します。 | 
|---|---|
| template | デプロイするARM テンプレートのパスを指定します。 | 
| parameters | ARM テンプレートをデプロイする際のパラメータを指定します。パラメータ単体以外にパラメータファイルも指定できます。 | 
| additionalArguments | デプロイ時の追加の引数を指定します。 | 
今回利用するARM テンプレート、リポジトリ構成
今回利用するARM テンプレート、Bicep ファイルは以下のテンプレートを使用します。今回は動作確認を目的とするため、仮想ネットワークのみ作成するテンプレートとなっています。ARM テンプレートおよびパラメータファイルは以下URL 配下のファイルを使用します。
GitHub 上のリポジトリ構成は以下の構成とします。
/
├ .github
│ └ workflows
│    └ armdeploy.yml
├ armdeploy.json
├ armdeploy.parameter.json
├ bicepdeploy.bicep
└ bicepdeploy.bicepparamリソースグループの作成
初めに今回ARM テンプレートをデプロイするリソースグループを作成します。リソースグループのパラメーターは以下の通りとします。
| リソースグループ名 | armdeploy-rg | 
|---|---|
| リージョン | japaneast | 
# リソースグループを作成する
az group create -n armdeploy-rg -l japaneastARM デプロイアクションを利用しARM テンプレート、Bicep ファイルを実行する
リソースグループ作成後、以下GitHub Actions のメタデータファイルを作成します。デプロイ時に利用する各種パラメータは以下の通りです。
| フェデレーション資格の環境名 | development | 
|---|
name: Deploy ARM Template and Bicep file
on:
  push:
    branches:
      - main
permissions:
  id-token: write
  contents: read
jobs:
  build:
    runs-on: ubuntu-latest
    env:
      ResourceGroupName: "armdeploy-rg"
    environment:
      name: development
    steps:
      # GitHubのリポジトリをcloneする
      - name: Checkout
        uses: actions/checkout@v3
      - name: "Az CLI login"
        uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      # ARMテンプレートをデプロイする
      - name: "Deploy ARM Template"
        uses: azure/arm-deploy@v1
        with:
          resourceGroupName: ${{ env.ResourceGroupName }}
          template: ./armdeploy.json
          parameters: ./armdeploy.parameter.json
      # Bicepファイルをデプロイする
      - name: "Deploy Bicep File"
        uses: azure/arm-deploy@v1
        with:
          resourceGroupName: ${{ env.ResourceGroupName }}
          template: ./bicepdeploy.bicep
          parameters: ./bicepdeploy.bicepparamデプロイ完了後、Azure Portal 上のリソースグループからarmdeploy-vnet とbicepdeploy-vnet の2つの仮想ネットワークが作成されたことを確認します。

Bicep のデプロイ時に「Warning: WARNING: The configuration value of bicep.usebinaryfrompath has been set to 'false'.」と表示されますが、Azure CLI の「bicep.usebinaryfrompath」がデフォルトでfalse となっているためです。今回はBicep CLI でデプロイを行っていないため、上記警告については動作上問題ありません。
リソースのクリーンアップ
動作確認後、リソースグループを削除しリソースのクリーンアップをします。
# リソースグループを削除する
az group delete -n armdeploy-rgまとめ
- ARM テンプレート、Bicep ファイルからデプロイを行うことで同じAzure リソースを反復的に作成できる
- ARM またはBicep を実行する際、GitHub Actions の「azure/arm-deploy@1」を利用する
- GitHub 上のファイルを利用するには「actions@checkout@v3」を利用する
- parameters を利用することでデプロイ時にパラメータやパラメータファイルを利用できる
