练习 - 在多个环境中使用 Bicep 参数

已完成

工作流部署到这两个环境后,即可与用于产品评论的第三方 API 集成。

网站团队已提供了网站应用于访问服务的 API 密钥和 URL。 测试和生产环境可以使用不同的值。 在本单元中,你将更新工作流,以使用产品评论 API 的正确设置配置每个环境。

在此过程中,你将:

  • 为每个环境的评审 API 密钥创建机密。
  • 使用每个环境的正确输入和机密值更新工作流。
  • 更新 Bicep 文件以传播产品评论 API 所需的设置。
  • 查看工作流结果和对 Azure 环境的更改。

添加机密

你决定将 API 密钥存储在 GitHub 机密中,以确保它们得到适当的保护。

  1. 在浏览器中,转到“设置”“机密和变量”>“操作”。

    GitHub 的屏幕截图,其中显示了“设置”类别下的“机密”菜单项。

  2. 选择“新建存储库机密”按钮。

  3. 输入 REVIEW_API_KEY_TEST 作为机密名称,输入 sandboxsecretkey 作为值。

    GitHub 的屏幕截图,其中显示了新机密。

  4. 选择“添加机密”。

  5. 重复此过程以添加另一个名为 REVIEW_API_KEY_PRODUCTION 作为机密名称,将 productionsecretkey 作为值。 选择“添加机密”。

更新 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 和密钥,以便网站代码可以使用它们:

    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. 依次选择“查看部署”、“生产”和“批准并部署”来批准到生产环境的部署。

    等待工作流完成运行。

  5. 选择“代码”,然后选择“生产”环境。

    请注意,现在可以在环境历史记录中看到多个部署。

  6. 在浏览器中,转到 Azure 门户

  7. 请转到 ToyWebsiteProduction 资源组。

  8. 在资源列表中,打开 Azure 应用服务应用。

    选择“配置”。

    Azure 门户的屏幕截图,其中显示了应用服务应用和配置菜单项。

  9. 选择“显示值”。

    Azure 门户的屏幕截图,其中显示了应用服务应用设置和用于显示值的按钮。

  10. 请注意,ReviewApiKey 和 ReviewApiUrl 设置值设置为你为生产环境配置的值。

    Azure 门户的屏幕截图,其中显示了应用服务应用设置和配置设置。

  11. 将当前值与 ToyWebsiteTest 资源组中应用服务应用的配置设置进行比较。 请注意,这些值是不同的。

清理资源

完成练习后,可以删除资源,以便不再为这些资源付费。

在 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