Ejercicio: Uso de parámetros de Bicep con varios entornos

Completado

Ahora que el flujo de trabajo se implementa en ambos entornos, está listo para realizar la integración con la API de terceros para las revisiones de productos.

El equipo del sitio web le ha proporcionado las claves de API y las direcciones URL que el sitio web debe usar para acceder al servicio. Hay distintos valores para los entornos de prueba y producción que se van a usar. En esta unidad, actualizará el flujo de trabajo a fin de configurar cada uno de los entornos con la configuración correcta de la API de revisión de productos.

Durante el proceso, hará lo siguiente:

  • Crear secretos para las claves de API de revisión para cada uno de los entornos.
  • Actualizar el flujo de trabajo con los valores de entrada y secreto correctos para cada entorno.
  • Actualizar el archivo de Bicep para propagar la configuración que necesita de la API de revisión de productos.
  • Revisar los resultados del flujo de trabajo y los cambios en el entorno de Azure.

Adición de secretos

Decide almacenar las claves de API en secretos de GitHub para asegurarse de que se protegen correctamente.

  1. En el explorador, vaya a Configuración>Secrets and variables (Secretos y variables)>Acciones.

    Captura de pantalla de GitHub en la que se muestra el elemento de menú Secretos en la categoría Configuración.

  2. Seleccione el botón New repository secret (Nuevo secreto del repositorio).

  3. Escriba REVIEW_API_KEY_TEST como nombre del secreto y sandboxsecretkey como valor.

    Captura de pantalla de GitHub en la que se muestra un nuevo secreto.

  4. Seleccione Add secret (Agregar secreto).

  5. Repita el proceso para agregar otro secreto denominado REVIEW_API_KEY_PRODUCTION como nombre del secreto y productionsecretkey como valor. Seleccione Add secret (Agregar secreto).

Actualización del archivo deploy.yml para usar la nueva configuración

  1. En Visual Studio Code, abra el archivo deploy.yml.

  2. Actualice el desencadenador de flujo de trabajo para incluir nuevos valores para las configuraciones de inputs y secrets:

    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
    

    Tenga en cuenta que incluye las direcciones URL de API como entradas porque no son valores secretos.

  3. En el trabajo validate, actualice los pasos para incluir los nuevos parámetros de implementación:

    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. Actualice el trabajo deploy para incluir los nuevos parámetros de implementación:

    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. Guarde los cambios en el archivo.

Actualización del archivo workflow.yml para proporcionar la nueva configuración

  1. En Visual Studio Code, abra el archivo workflow.yml.

  2. Agregue las entradas reviewApiUrl y los secretos reviewApiKey para cada entorno:

    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. Guarde los cambios en el archivo.

Actualización del archivo de Bicep

  1. Abra el archivo main.bicep.

  2. Debajo de los parámetros que ya están en el archivo, agregue los parámetros siguientes para la nueva API de revisión:

    @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. Actualice la definición de recurso appServiceApp para proporcionar la dirección URL y la clave de la API de revisión a la aplicación, de modo que el código del sitio web pueda usarlos:

    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. Guarde los cambios en el archivo.

  5. Confirme e inserte los cambios en el repositorio de Git mediante los siguientes comandos:

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

Revisión de los resultados de la implementación

  1. En el explorador, vaya a las ejecuciones del flujo de trabajo.

  2. Seleccione la ejecución más reciente.

  3. Seleccione la ejecución más reciente del flujo de trabajo.

    Espere a que el flujo de trabajo se ponga en pausar antes del trabajo deploy-production / deploy. El flujo de trabajo podría tardar unos minutos en llegar a este punto.

  4. Apruebe la implementación en el entorno de producción. Para ello, seleccione Review deployments (Revisar implementaciones), Producción y Approve and deploy (Aprobar e implementar).

    Espere a que el flujo de trabajo acabe de ejecutarse.

  5. Seleccione Código y, luego, el entorno Producción.

    Observe que ahora se ven varias implementaciones en el historial del entorno.

  6. En el explorador, vaya a Azure Portal.

  7. Vaya al grupo de recursos ToyWebsiteProduction.

  8. En la lista de recursos, abra la aplicación Azure App Service.

    Seleccione Configuración.

    Captura de pantalla de Azure Portal en la que se muestra la aplicación App Service y el elemento de menú Configuración.

  9. Seleccione Mostrar valores.

    Captura de pantalla de Azure Portal en la que se muestra la configuración de la aplicación App Service y el botón para mostrar valores.

  10. Observe que los valores para las opciones ReviewApiKey y ReviewApiUrl están establecidos en los valores que configuró para el entorno de producción.

    Captura de pantalla de Azure Portal en la que se muestra la configuración de la aplicación App Service y las opciones de configuración.

  11. Compare los valores actuales con las opciones de configuración de la aplicación App Service en el grupo de recursos ToyWebsiteTest. Observe que los valores son diferentes.

Limpiar los recursos

Ahora que ha completado el ejercicio, puede quitar los recursos para que no se le facturen.

En el terminal de Visual Studio Code, ejecute los comandos siguientes:

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

El grupo de recursos se elimina en segundo plano.

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