演習 - ワークフローのトリガーを更新する

完了

あなたは、会社の Web サイトの App Service Always On 機能を有効にして、Web サイト アプリが常に実行されるようにすることを同僚に求められています。

この演習では、 メイン ブランチでファイルが変更されるたびに自動的に実行されるように、作成したワークフローを更新します。 更新されたワークフローを使用して、要求された構成変更を Web サイトにデプロイします。

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

  • ワークフローを更新して、メイン ブランチの配置フォルダーでファイルが変更されるたびに自動的にトリガーされるようにします。
  • Bicep ファイルに変更を加えます。
  • ワークフローが自動的に実行されることを確認します。

ブランチベースになるようにトリガーを更新する

  1. Visual Studio Code で 、.github/workflows/workflow.yml ファイルを開きます。

  2. ファイルの先頭で、行の後に次のコード name: deploy-toy-website 追加して、複数の同時ワークフローが実行されないようにします。

    name: deploy-toy-website
    concurrency: toy-company
    
  3. 手動トリガー (現在 on: [workflow_dispatch]を読み取る行) を削除します。

  4. concurrency:permissions:の間に、次のトリガー定義を追加します。

    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
        paths:
          - 'deploy/**'
    
    permissions:
    
  5. ファイルに加えた変更を保存します。

  6. 変更をコミットしますが、まだプッシュしないでください。 変更はもう少し後でプッシュします。

    git add .
    git commit -m 'Add branch trigger'
    

Bicep ファイルを更新する

  1. Visual Studio Code で main.bicep ファイルを開きます。

  2. appServiceApp リソース定義の siteConfig プロパティに、alwaysOn という値で true プロパティを追加します。

    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      ___location: ___location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    
  3. ファイルに加えた変更を保存します。

  4. Visual Studio Code ターミナルで、次のコードを実行して変更をコミットし、両方のコミットをプッシュします。

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

ワークフローが失敗したかどうかを確認する

  1. ブラウザーで、GitHub の [アクション] メニューを選択し、ワークフローを選択します。

  2. 最新のワークフロー実行を選択して、ワークフローが自動的に実行されたことを確認します。 プッシュ トリガーによって監視されているブランチに変更をプッシュしたため、ワークフローが実行されました。 ワークフローがまだ実行されている場合は、少し待ってからページを更新します。

    失敗したワークフローの実行を示す GitHub インターフェイスのスクリーンショット。

    ワークフローには、失敗したデプロイが表示されます。

  3. 失敗を診断するには、 デプロイ ジョブを選択し、失敗した arm-deploy タスクを選択します。

    次のテキストが含まれていることに注意してください。

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it.
    For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails
    

    このエラー メッセージは、App Service アプリが、Always On 機能がサポートされていない F1 Free レベルを使用してデプロイされたため、デプロイが失敗したことを示しています。

    重要

    この例では、使用するすべてのパラメーター値を含めて、Bicep ファイルをテストすることの重要性が示されています。 微妙なエラーは、リソース構成やその他のコードに追加されやすいものです。 ワークフローがコードをデプロイして失敗するまで、問題を検出できない場合があります。 今後のモジュールでは、Bicep コードの検証とテストに使用できるいくつかの戦略について学習します。

Bicep ファイルを修正し、ワークフローが再度トリガーされたことを確認する

あなたは、失敗したデプロイについて同僚に話します。 Always On 設定は運用環境にのみ適用する必要があるという判断で一致しました。 そこで、使用する新しい規則を適用して、デプロイの失敗の原因となった問題を修正することにしました。

  1. Visual Studio Code で、環境の種類ごとに新しいプロパティを environmentConfigurationMap 変数に追加します。

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. アプリケーションの alwaysOn 設定を変更して、環境の種類に適した構成マップ値を使用するようにします。

    resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
      name: appServiceAppName
      ___location: ___location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. ファイルに加えた変更を保存します。

  4. Visual Studio Code ターミナルで、変更をコミットし、プッシュします。

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

ワークフローが成功したことを確認する

  1. GitHub で、 ワークフロー の一覧に戻ります。 ワークフローを選択します。

  2. 最新の実行を選択します。 ワークフローがまだ実行されている場合は、少し待ってからページを更新します。

    ワークフロー実行が表示されます。

    ワークフローの実行が成功したことを示す GitHub インターフェイスのスクリーンショット。

    ワークフローには、デプロイが成功したことが表示されます。 有効な Bicep ファイルを使用したため、今回は成功しました。

リソースのクリーンアップ

これで演習が完了したので、課金されないようにリソースを削除しましょう。

Visual Studio Code ターミナルで、次のコマンドを実行します。

az group delete --resource-group ToyWebsite --yes --no-wait

バックグラウンドでリソース グループが削除されます。

Remove-AzResourceGroup -Name ToyWebsite -Force