Übung: Verwenden von Bicep-Parametern mit mehreren Umgebungen

Abgeschlossen

Nachdem Ihr Workflow nun in beiden Umgebungen bereitgestellt wird, können Sie die Drittanbieter-API für Produktüberprüfungen integrieren.

Ihr Websiteteam hat Ihnen die API-Schlüssel und URLs bereitgestellt, die Ihre Website für den Zugriff auf den Dienst verwenden sollte. Es gibt unterschiedliche Werte für Ihre Test- und Produktionsumgebung. In dieser Lerneinheit aktualisieren Sie Ihren Workflow, um die einzelnen Umgebungen mit den richtigen Einstellungen für die Produktüberprüfungs-API zu konfigurieren.

In dem Prozess gehen Sie wie folgt vor:

  • Erstellen von Geheimnissen für die Überprüfungs-API-Schlüssel für die einzelnen Umgebungen.
  • Aktualisieren des Workflows mit den richtigen Eingabe- und Geheimniswerten für die jeweilige Umgebung.
  • Aktualisieren Sie Ihre Bicep-Datei, um die Einstellungen zu übergeben, die Sie für die Produktüberprüfungs-API benötigen.
  • Überprüfen der Pipelineergebnisse und Änderungen an Ihrer Azure-Umgebung.

Hinzufügen von Geheimnissen

Sie entscheiden sich dafür, die API-Schlüssel in GitHub-Geheimnissen zu speichern, um sicherzustellen, dass sie angemessen geschützt sind.

  1. Wechseln Sie in Ihrem Browser zu Einstellungen>Geheimnisse und Variablen>Aktionen.

    Screenshot: GitHub-Benutzeroberfläche mit Anzeige des Menüelements für Geheimnisse in der Kategorie für Einstellungen

  2. Wählen Sie die Schaltfläche New repository secret (Neues Repositorygeheimnis) aus.

  3. Geben REVIEW_API_KEY_TEST als Geheimnisnamen und sandboxsecretkey als Wert ein.

    Screenshot: GitHub mit Anzeige eines neuen Geheimnisses.

  4. Klicken Sie auf Add secret (Geheimnis hinzufügen).

  5. Wiederholen Sie den Vorgang, um ein weiteres Geheimnis namens REVIEW_API_KEY_PRODUCTION und productionsecretkey als Wert hinzuzufügen. Klicken Sie auf Add secret (Geheimnis hinzufügen).

Aktualisieren der Datei „deploy.yml“, sodass die neuen Einstellungen verwendet werden

  1. Öffnen Sie in Visual Studio Code die Datei deploy.yml.

  2. Aktualisieren Sie den Workflowtrigger so, dass er neue Werte für die Einstellungen inputs und secrets enthält:

    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
    

    Beachten Sie, dass Sie die API-URLs als Eingaben einschließen, da sie keine geheimen Werte sind.

  3. Aktualisieren Sie im validate-Auftrag die Schritte so, dass die neuen Bereitstellungsparameter enthalten sind:

    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. Aktualisieren Sie den deploy-Auftrag so, dass er die neuen Bereitstellungsparameter enthält:

    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. Speichern Sie die geänderte Datei.

Aktualisieren der Datei „workflow.yml“, um die neuen Einstellungen zur Verfügung zu stellen.

  1. Öffnen Sie in Visual Studio Code die Datei workflow.yml.

  2. Fügen Sie die reviewApiUrl-Eingaben und reviewApiKey-Geheimnisse für jede Umgebung hinzu:

    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. Speichern Sie die geänderte Datei.

Update der Bicep-Datei

  1. Öffnen Sie die Datei main.bicep.

  2. Fügen Sie unter den Parametern, die sich bereits in der Datei befinden, die folgenden Parameter für die neue Überprüfungs-API hinzu:

    @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. Aktualisieren Sie die Ressourcendefinition appServiceApp, um die URL und den Schlüssel der Überprüfungs-API für die Anwendung zur Verfügung zu stellen, damit sie vom Code Ihrer Website verwendet werden können:

    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. Speichern Sie die geänderte Datei.

  5. Committen und pushen Sie die Änderungen mithilfe der folgenden Befehle in Ihr Git-Repository:

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

Überprüfen der Bereitstellungsergebnisse

  1. Navigieren Sie in Ihrem Browser zu Ihren Workflowausführungen.

  2. Wählen Sie die letzte Ausführung aus.

  3. Wählen Sie die letzte Ausführung Ihres Workflows aus.

    Warten Sie, bis der Workflow vor dem Auftrag deploy-production / deploy angehalten wurde. Es kann einige Minuten dauern, bis der Workflow diesen Punkt erreicht hat.

  4. Genehmigen Sie die Bereitstellung in der Produktionsumgebung, indem Sie Review deployments, dann Production sowie Approve and deploy auswählen.

    Warten Sie, bis die Ausführung des Workflows beendet wurde.

  5. Wählen Sie Code und dann die Production-Umgebung aus.

    Beachten Sie, dass nun mehrere Bereitstellungen im Verlauf der Umgebung zu sehen sind.

  6. Navigieren Sie in Ihrem Browser zum Azure-Portal.

  7. Wechseln Sie zur Ressourcengruppe ToyWebsiteProduction.

  8. Öffnen Sie in der Liste der Ressourcen die Azure App Service-App.

    Wählen Sie Konfiguration aus.

    Screenshot: Azure-Portal mit der App Service-App und dem Menüelement „Konfiguration“

  9. Wählen Sie Werte anzeigen aus.

    Screenshot: Azure-Portal mit den App Service-App-Einstellungen und der Schaltfläche für die Anzeige von Werten

  10. Beachten Sie, dass die Werte für die Einstellungen ReviewApiKey und ReviewApiUrl auf die Werte festgelegt sind, die Sie für die Produktionsumgebung konfiguriert haben.

    Screenshot: Azure-Portal mit den App Service-App-Einstellungen und den Konfigurationseinstellungen

  11. Vergleichen Sie die aktuellen Werte mit den Konfigurationseinstellungen für die App Service-App in der Ressourcengruppe ToyWebsiteTest. Beachten Sie, dass die Werte sich unterscheiden.

Bereinigen der Ressourcen

Nachdem Sie die Übung abgeschlossen haben, können Sie die Ressourcen entfernen, damit Ihnen dafür keine Gebühren berechnet werden.

Führen Sie im Visual Studio Code-Terminal die folgenden Befehle aus:

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

Die Ressourcengruppe wird im Hintergrund gelöscht.

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