クイックスタート: GitHub Actions を使用した Bicep ファイルのデプロイ

GitHub Actions は、ソフトウェア開発ワークフローを自動化する一連の GitHub 機能です。 このクイックスタートでは、Azure Resource Manager のデプロイに GitHub Actions を使って、Bicep ファイルの Azure へのデプロイを自動化します。

GitHub Actions と Bicep ファイルの概要を簡単に示します。 GitHub Actions とプロジェクトの設定に関する詳細なステップが必要な場合は、「 Bicep と GitHub Actions を使用して Azure リソースをデプロイする」を参照してください。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます
  • GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。
  • Bicep ファイルとワークフロー ファイルを保存するための GitHub リポジトリ。 リポジトリを作成するには、新しいリポジトリの作成に関するページをご覧ください。

リソース グループの作成

リソース グループを作成する。 このクイックスタートの後半では、Bicep ファイルをこのリソース グループにデプロイします。

az group create -n exampleRG -l westus

デプロイ資格情報を生成する

GitHub Actions は ID の下で実行されます。 サービス プリンシパルを作成するには、az ad sp create-for-rbac コマンドを使用して、ID のサービス プリンシパルを作成します。 前のセッションで作成したリソース グループの共同作成者ロールをサービス プリンシパルに付与し、その ID を持つ GitHub アクションがこのリソース グループにリソースを作成できるようにします。 必要な最小限のアクセス権を付与することをお勧めします。

az ad sp create-for-rbac --name {app-name} --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/exampleRG --json-auth

{app-name} のプレースホルダーはアプリケーションの名前に置き換えます。 {subscription-id} は、サブスクリプション ID で置き換えてください。

出力は、次の出力のような、App Service アプリへのアクセスを提供するロールの割り当て資格情報を含む JSON オブジェクトとなります。

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
  }

この JSON オブジェクトを後のためにコピーします。 必要なのは、clientIdclientSecretsubscriptionIdtenantId の値を持つセクションだけです。 最後の行の末尾に余分なコンマがないことを確認します (たとえば、前の例の tenantId 行)。そうでない場合は、無効な JSON ファイルになります。 デプロイ中に、"ログインに失敗しました: コンテンツは有効な JSON オブジェクトではありません。 'auth-type' が正しいかどうかを再確認してください。"というエラーが発生します。

GitHub シークレットを構成する

Azure の資格情報、リソース グループ、およびサブスクリプションのシークレットを作成します。 これらのシークレットは、「ワークフローの作成」セクションで使用します。

  1. GitHub で、自分のリポジトリに移動します。

  2. [設定] > [シークレットと変数] > [アクション] > [新しいリポジトリ シークレット] の順に選択します。

  3. Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS という名前を付けます。

  4. AZURE_RG という名前の別のシークレットを作成します。 リソース グループの名前をシークレットの値フィールドに追加します (exampleRG)。

  5. AZURE_SUBSCRIPTION という名前の別のシークレットを作成します。 シークレットの値フィールドにサブスクリプション ID を追加します (例: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e)。

Bicep ファイルを追加する

GitHub リポジトリに Bicep ファイルを追加します。 次の Bicep ファイルでは、ストレージ アカウントが作成されます。

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Bicep ファイルでは storagePrefix と呼ばれる 1 つのパラメーターが 3 文字から 11 文字で必要です。

ファイルは、リポジトリ内のどこに置いてもかまいません。 次のセクションのワークフロー サンプルでは、Bicep ファイル名が main.bicep であり、リポジトリのルートに保存されていることを想定しています。

ワークフローを作成する

ワークフローでは、トリガーされた場合に実行するステップを定義します。 これは、お使いのリポジトリの /.github/workflows/ パスの YAML (.yml) ファイルです。 ワークフロー ファイルの拡張子には、 .yml または .yaml を指定できます。

ワークフローを作成するには、次の手順を実行します。

  1. GitHub リポジトリの上部のメニューで、 [Actions](アクション) を選択します。

  2. [New workflow](新しいワークフロー) を選択します。

  3. [Set up a workflow yourself](ワークフローを自分でセットアップする) を選択します。

  4. main.yml 以外の別の名前を使用する場合は、ワークフロー ファイルの名前を変更します。 例: deployBicepFile.yml

  5. .yml ファイルの内容を次のコードに置き換えます。

    name: Deploy Bicep file
    on: [push]
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
    
        - name: Checkout code
          uses: actions/checkout@main
    
        - name: Log into Azure
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
        - name: Deploy Bicep file
          uses: azure/arm-deploy@v1
          with:
            subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
            resourceGroupName: ${{ secrets.AZURE_RG }}
            template: ./main.bicep
            parameters: 'storagePrefix=mystore storageSKU=Standard_LRS'
            failOnStdErr: false
    

    mystore を独自のストレージ アカウント名プレフィックスに置き換えます。

    注意

    代わりに、ARM デプロイ アクション (例: .azuredeploy.parameters.json) に JSON 形式のパラメーター ファイルを指定できます。

    ワークフロー ファイルの最初のセクションには次のものが含まれます。

    • name:ワークフローの名前。
    • on: ワークフローをトリガーする GitHub イベントの名前。 ワークフローは、メイン ブランチにプッシュ イベントがある場合にトリガーされます。
  6. [変更点のコミット] を選択します。

  7. [Commit directly to the main branch](メイン ブランチに直接コミットする) を選択します。

  8. [Commit new file](新しいファイルをコミットする) (または [Commit changes](変更をコミットする) ) を選択します。

ワークフロー ファイルまたは Bicep ファイルのいずれかを更新すると、ワークフローがトリガーされます。 変更をコミットすると、ワークフローがすぐに開始されます。

ワークフローの状態を確認する

  1. [Actions]\(アクション\) タブを選択します。Create deployBicepFile.yml ワークフローが一覧表示されます。 ワークフローの実行には 1 から 2 分かかります。
  2. ワークフローを選択して開き、StatusSuccess であることを確認します。

リソースをクリーンアップする

リソース グループとリポジトリが不要になったら、リソース グループと GitHub リポジトリを削除して、デプロイしたリソースをクリーンアップします。

az group delete --name exampleRG

次のステップ