演習 - テンプレート スペックを発行する

完了

あなたのチームは、会社の新しいガバナンス モデルに準拠したセキュリティ強化された Bicep ファイルをいくつか作成しました。 強化された Bicep ファイルの 1 つでは、Linux ベースの Azure App Service アプリがデプロイされます。 この演習では、デプロイ ワークフローを使用して、Bicep ファイルをテンプレート スペックとして発行します。

このプロセスでは、次のことを行います。

  • ワークフローに lint ジョブを追加します。
  • テンプレート スペックを発行するワークフロー ジョブを追加します。
  • ワークフローを手動で実行し、正常に完了することを確認します。
  • 発行されたテンプレート スペックを Azure で確認します。

ワークフローにリント ジョブを追加する

リポジトリには、出発点として使用できるワークフローのドラフトが含まれています。

  1. Visual Studio Code で、リポジトリのルートにある .github/workflows フォルダーを展開します。

  2. template-spec-linux-app-service.yml ファイルを開きます。

    Screenshot of Visual Studio Code that shows the location of the workflow definition file.

    ワークフロー定義には、2 つのトリガーが含まれています。 この演習では、テンプレート スペックの Bicep ファイルを変更しないため、push トリガーが起動することはありません。 ワークフローを試すには、workflow_dispatch トリガーを使用して手動で呼び出します。

  3. ファイルの下部の "To be added" というコメントが表示されている場所に、次の lint ジョブ定義を追加します。

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    

    リポジトリには、警告ではなくエラーを生成するようにリンターを構成する bicepconfig.json ファイルが含まれています。 lint ジョブ中にエラーが発生すると、ワークフローが失敗します。

    ヒント

    YAML ファイルは、インデントによって区別されます。 このコードを入力する場合でも貼り付ける場合でも、インデントが正しいことを確認してください。 この演習の後半では、ファイルが一致することを確認できるように、完全な YAML ワークフロー定義を示します。

ワークフローに発行ジョブを追加する

これで、テンプレート スペックを Azure に発行する 2 番目のジョブを追加できます。

  1. template-spec-linux-app-service.yml ファイルの末尾に次のコードを追加します。

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/cli@v1
        name: Publish template spec
        with:
          inlineScript: |
            az ts create \
              --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
              --name ${{ env.TEMPLATE_SPEC_NAME }} \
              --version ${{ github.run_number }} \
              --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
              --location ${{ env.AZURE_REGION }} \
              --yes
    

    このジョブでは、リポジトリからコードをチェックアウトし、作成した GitHub シークレット使って Azure にサインインします。 その後、az ts create コマンドを実行してテンプレート スペックを Azure に発行します。

    ヒント

    単純にするために、このワークフローでは、ワークフローの "実行番号" をテンプレート スペックのバージョン番号として使用しています。 次のユニットでは、より複雑なバージョン管理スキームについて学習します。

  2. ファイルに加えた変更を保存します。

ワークフロー定義を検証してコミットする

  1. template-spec-linux-app-service.yml ファイルが次の例のようになっていることを確認します。

    name: template-spec-linux-app-service
    concurrency: template-spec-linux-app-service
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'template-specs/linux-app-service/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyReusable
      AZURE_REGION: westus3
      TEMPLATE_SPEC_NAME: linux-app-service
      TEMPLATE_SPEC_FILE_PATH: template-specs/linux-app-service/main.bicep
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/cli@v1
          name: Publish template spec
          with:
            inlineScript: |
              az ts create \
                --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
                --name ${{ env.TEMPLATE_SPEC_NAME }} \
                --version ${{ github.run_number }} \
                --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
                --location ${{ env.AZURE_REGION }} \
                --yes
    

    そうでない場合は、この例に一致するように更新してから保存してください。

  2. Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。

    git add .
    git commit -m "Add lint and publish jobs to Linux App Service template spec workflow"
    git push
    
  3. このリポジトリにプッシュしたのは初めてなので、サインインを求めるメッセージが表示される場合があります。

    Windows の場合は、Web ブラウザーを使用して認証の「1」を入力し、Enter キーを押します。

    macOS の場合は、[承認] を選択します。

  4. ブラウザー ウィンドウが開きます。 場合によっては、再度 GitHub にサインインする必要があります。 [承認] を選択します。

ワークフローをトリガーする

  1. ブラウザーで、[アクション] タブを選択します。

    Screenshot of GitHub that shows the Actions tab.

    失敗したワークフロー実行が既に表示されていますが、心配する必要はありません。 失敗したのは、リポジトリの作成時にワークフロー定義がまだ完了していなかったためです。

  2. [template-spec-linux-app-service] ワークフローを選択して、[ワークフローの実行] ボタンを選択し、[ワークフローの実行] を選択します。

    Screenshot of GitHub that shows selections for running the template spec's workflow.

    GitHub で新しいワークフローの実行が開始されます。 実行が表示されるようにするには、ブラウザー ウィンドウを更新する必要がある場合があります。

  3. 一覧で最新の実行を選択します。

    Screenshot of GitHub that highlights the latest run of the template spec's workflow.

    ワークフロー実行が完了するまで待ちます。 実行が完了すると、テンプレート スペックが Azure に発行されます。

  4. ワークフローの実行番号 (おそらく 2) をメモします。

    Screenshot of GitHub that shows a successful workflow run and highlights the run number.

Azure でテンプレート スペックを確認する

発行されたテンプレート スペックは、Azure portal で表示することもできます。

  1. ブラウザーで、Azure portal に移動します。

  2. ToyReusable リソース グループに移動し、linux-app-service テンプレート スペックを選択します。

    Screenshot of the Azure portal that shows the resource group, with the template spec highlighted.

  3. テンプレート スペックの詳細を確認します。

    Screenshot of the Azure portal that shows the template spec details.

    [最新バージョン][バージョン] 番号がワークフローの実行番号と同じであることに注意してください。 このワークフローでは、テンプレート スペックのバージョン番号に実行番号が使用されます。