演習 - Bicep パラメーターを複数の環境で使用する

完了

ワークフローが両方の環境にデプロイされるようになったので、製品レビューのためのサードパーティ API と統合することができます。

Web サイト チームから、サービスにアクセスするために Web サイトが使用する API キーと URL が渡されました。 テスト環境と運用環境で使用する値は異なります。 このユニットでは、ワークフローを更新して、製品レビュー API の正しい設定を使用して各環境を構成します。

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

  • 各環境のレビュー API キーのシークレットを作成します。
  • 各環境の正しい入力値とシークレット値でワークフローを更新します。
  • Bicep ファイルを更新して、製品レビュー API で必要な設定を反映します。
  • ワークフローの結果と、Azure 環境への変更をレビューします。

シークレットを追加する

API キーが適切に保護されるように、API キーを GitHub シークレットに格納します。

  1. ブラウザーで、[Settings] (設定)>[Secrets and variables] (シークレットと変数)>[Actions] (アクション) の順に移動します。

    [Settings]\(設定\) カテゴリの [Secrets]\(シークレット\) メニュー項目を示す GitHub のスクリーンショット。

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

  3. シークレット名として「REVIEW_API_KEY_TEST」と入力し、値として「sandboxsecretkey」と入力します。

    新しいシークレットを示す GitHub のスクリーンショット。

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

  5. プロセスを繰り返して、シークレット名として、REVIEW_API_KEY_PRODUCTION という名前の別のシークレットを追加し、値として productionsecretkey を追加します。 [Add secret](シークレットの追加) を選択します。

新しい設定を使用するために deploy.yml ファイルを更新する

  1. Visual Studio Code で、deploy.yml ファイルを開きます。

  2. inputssecrets の設定の新しい値を含めるように、ワークフロー トリガーを更新します。

    on:
      workflow_call:
        inputs:
          environmentType:
            required: true
            type: string
          resourceGroupName:
            required: true
            type: string
          reviewApiUrl:
            required: true
            type: string
        secrets:
          AZURE_CLIENT_ID:
            required: true
          AZURE_TENANT_ID:
            required: true
          AZURE_SUBSCRIPTION_ID:
            required: true
          reviewApiKey:
            required: true
    

    API URL はシークレット値ではないので、入力として含める点に注意してください。

  3. validate ジョブで、新しいデプロイ パラメーターを含めるようにステップを更新します。

    jobs:
      validate:
         runs-on: ubuntu-latest
         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 }}
         - if: inputs.environmentType != 'Production'
           uses: azure/arm-deploy@v1
           name: Run preflight validation
           with:
             deploymentName: ${{ github.run_number }}
             resourceGroupName: ${{ inputs.resourceGroupName }}
             template: ./deploy/main.bicep
             parameters: >
               environmentType=${{ inputs.environmentType }}
               reviewApiUrl=${{ inputs.reviewApiUrl }}
               reviewApiKey=${{ secrets.reviewApiKey }}
             deploymentMode: Validate
         - if: inputs.environmentType == 'Production'
           uses: azure/arm-deploy@v1
           name: Run what-if
           with:
             failOnStdErr: false
             resourceGroupName: ${{ inputs.resourceGroupName }}
             template: ./deploy/main.bicep
             parameters: >
               environmentType=${{ inputs.environmentType }}
               reviewApiUrl=${{ inputs.reviewApiUrl }}
               reviewApiKey=${{ secrets.reviewApiKey }}
             additionalArguments: --what-if
    
  4. 新しいデプロイ パラメーターを含めるように deploy ジョブを更新します。

    deploy:
      needs: validate
      environment: ${{ inputs.environmentType }}
      runs-on: ubuntu-latest
      outputs:
        appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }}
      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/arm-deploy@v1
        id: deploy
        name: Deploy Bicep file
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ inputs.resourceGroupName }}
          template: ./deploy/main.bicep
          parameters: >
            environmentType=${{ inputs.environmentType }}
            reviewApiUrl=${{ inputs.reviewApiUrl }}
            reviewApiKey=${{ secrets.reviewApiKey }}
    
  5. ファイルに加えた変更を保存します。

新しい設定を提供するために workflow.yml ファイルを更新する

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

  2. 環境ごとに、reviewApiUrl 入力と reviewApiKey シークレットを追加します。

    name: deploy-toy-website-environments
    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
      workflow_dispatch:
    
    permissions:
      id-token: write
      contents: read
    
    jobs:
    
      # Lint the Bicep file.
      lint:
        uses: ./.github/workflows/lint.yml
    
      # Deploy to the test environment.
      deploy-test:
        uses: ./.github/workflows/deploy.yml
        needs: lint
        with:
          environmentType: Test
          resourceGroupName: ToyWebsiteTest
          reviewApiUrl: https://sandbox.contoso.com/reviews
        secrets:
          AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_TEST }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          reviewApiKey: ${{ secrets.REVIEW_API_KEY_TEST }}
    
      # Deploy to the production environment.
      deploy-production:
        uses: ./.github/workflows/deploy.yml
        needs: deploy-test
        with:
          environmentType: Production
          resourceGroupName: ToyWebsiteProduction
          reviewApiUrl: https://api.contoso.com/reviews
        secrets:
          AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_PRODUCTION }}
          AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
          AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          reviewApiKey: ${{ secrets.REVIEW_API_KEY_PRODUCTION }}
    
  3. ファイルに加えた変更を保存します。

Bicep ファイルを更新する

  1. main.bicep ファイルを開きます。

  2. ファイル内のすでにあるパラメーターの下に、次の新しいレビュー API のパラメーターを追加します。

    @description('The URL to the product review API.')
    param reviewApiUrl string
    
    @secure()
    @description('The API key to use when accessing the product review API.')
    param reviewApiKey string
    
  3. appServiceApp リソース定義を更新してレビュー API URL とキーをアプリケーションに対して指定し、Web サイトのコードで使用できるようします。

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsights.properties.InstrumentationKey
            }
            {
              name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
              value: applicationInsights.properties.ConnectionString
            }
            {
              name: 'ReviewApiUrl'
              value: reviewApiUrl
            }
            {
              name: 'ReviewApiKey'
              value: reviewApiKey
            }
          ]
        }
      }
    }
    
  4. ファイルに加えた変更を保存します。

  5. 次のコマンドを使用して、Git リポジトリに対して変更をコミットおよびプッシュします。

    git add .
    git commit -m "Add new review API settings to Bicep file and workflow"
    git push
    

デプロイ結果をレビューする

  1. ブラウザーでワークフロー実行に移動します。

  2. 最新の実行を選択します。

  3. ワークフローの最新の実行を選択します。

    deploy-production / deploy ジョブの前にワークフローが一時停止する間待ちます。 ワークフローがここに達するまでに数分かかることがあります。

  4. [Review deployments](デプロイのレビュー)[Production][Approve and deploy](承認してデプロイ) の順に選択して、運用環境へのデプロイを承認します。

    ワークフローの実行が完了するまで待ちます。

  5. [コード] を選択し、[Production] 環境を選択します。

    環境の履歴に、複数のデプロイが表示されるようになりました。

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

  7. ToyWebsiteProduction リソース グループに移動します。

  8. リソースの一覧で、Azure App Service アプリを開きます。

    [構成] を選択します。

    App Service アプリと [構成] メニュー項目を示す Azure portal のスクリーンショット。

  9. [Show values](値の表示) を選択します。

    App Service アプリの設定と値を表示するためのボタンを示す Azure portal のスクリーンショット。

  10. ReviewApiKeyReviewApiUrl の設定の値が、運用環境で構成した値に設定されています。

    App Service アプリの設定と構成設定を示す Azure portal のスクリーンショット。

  11. 現在の値を、ToyWebsiteTest リソース グループの App Service アプリの構成設定と比較します。 値が異なっていることに注目してください。

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

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

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

az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait

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

Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force