Share via


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 テンプレートをデプロイします。

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

Azure CLIaz ad sp create-for-rbac コマンドを使用して、サービス プリンシパルを作成します。 このコマンドは、Azure portal で Azure Cloud Shell を使用するか、[試してみる] ボタンを選択して実行します。

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

--json-auth パラメーターは、Azure CLI バージョン 2.51.0 以降で使用できます。 これ以前のバージョンでは --sdk-auth を使用し、非推奨の警告が表示されます。

上記の例で、プレースホルダーをご利用のサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。 これにより、以下のようなご自分の App Service アプリにアクセスするためのロールの割り当て資格情報を含む JSON オブジェクトが出力されます。 この JSON オブジェクトを後のためにコピーします。

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

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

  1. GitHub で、お使いのリポジトリに移動します。

  2. ナビゲーション メニューで [設定] に移動します。

  3. [Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。

    Screenshot of adding a secret

  4. [New repository secret](新しいリポジトリ シークレット) を選択します。

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

  6. [Add secret](シークレットの追加) を選択します。

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 を指定できます。

  1. GitHub リポジトリの上部のメニューで、 [Actions](アクション) を選択します。
  2. [New workflow](新しいワークフロー) を選択します。
  3. [Set up a workflow yourself](ワークフローを自分でセットアップする) を選択します。
  4. main.yml 以外の別の名前を使用する場合は、ワークフロー ファイルの名前を変更します。 (例: deployStorageAccount.yml)。
  5. 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 つのファイルは、ワークフロー ファイルとテンプレート ファイルです。
  1. [Start commit](コミットの開始) を選択します。
  2. [Commit directly to the main branch](メイン ブランチに直接コミットする) を選択します。
  3. [Commit new file](新しいファイルをコミットする) (または [Commit changes](変更をコミットする) ) を選択します。

ワークフローは、ワークフロー ファイルまたはテンプレート ファイルの更新によってトリガーされるように構成されているため、変更をコミットするとすぐにワークフローが開始されます。

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

  1. [Actions](アクション) タブを選択します。Create deployStorageAccount.yml ワークフローが表示されます。 ワークフローの実行には 1 から 2 分かかります。
  2. ワークフローを選択して開きます。
  3. メニューから [Run ARM deploy](ARM デプロイを実行) を選択して、デプロイを確認します。

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

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

次の手順