Ćwiczenie — używanie parametrów Bicep z wieloma środowiskami

Ukończone

Teraz, gdy przepływ pracy jest wdrażany w obu środowiskach, możesz przystąpić do integracji z interfejsem API innej firmy na potrzeby przeglądów produktów.

Twój zespół witryny internetowej udostępnił Ci klucze interfejsu API i adresy URL, których witryna internetowa powinna używać do uzyskiwania dostępu do usługi. Istnieją różne wartości używane w środowiskach testowych i produkcyjnych. W tej lekcji zaktualizujesz przepływ pracy, aby skonfigurować poszczególne środowiska przy użyciu poprawnych ustawień interfejsu API przeglądu produktu.

Podczas tego procesu wykonasz następujące czynności:

  • Utwórz wpisy tajne dla kluczy interfejsu API przeglądu dla każdego środowiska.
  • Zaktualizuj przepływ pracy przy użyciu prawidłowych wartości wejściowych i tajnych dla każdego środowiska.
  • Zaktualizuj plik Bicep, aby propagować ustawienia potrzebne dla interfejsu API przeglądu produktu.
  • Przejrzyj wyniki przepływu pracy i zmiany w środowisku platformy Azure.

Dodawanie wpisów tajnych

Decydujesz się na przechowywanie kluczy interfejsu API w wpisach tajnych usługi GitHub, aby upewnić się, że są one odpowiednio chronione.

  1. W przeglądarce przejdź do pozycji Ustawienia>Wpisy tajne i zmienne>Akcje.

    Zrzut ekranu usługi GitHub przedstawiający element menu Wpisy tajne w kategorii Ustawienia.

  2. Wybierz przycisk Nowy wpis tajny repozytorium.

  3. Wprowadź REVIEW_API_KEY_TEST jako nazwę wpisu tajnego i wartość sandboxsecretkey .

    Zrzut ekranu witryny GitHub przedstawiający nowy wpis tajny.

  4. Wybierz przycisk Add secret (Dodaj wpis tajny).

  5. Powtórz proces, aby dodać inny wpis tajny o nazwie REVIEW_API_KEY_PRODUCTION jako nazwę wpisu tajnego, a wartość productionsecretkey . Wybierz przycisk Add secret (Dodaj wpis tajny).

Zaktualizuj plik deploy.yml, aby używać nowych ustawień

  1. W programie Visual Studio Code otwórz plik deploy.yml .

  2. Zaktualizuj wyzwalacz przepływu pracy, aby uwzględnić nowe wartości dla inputs ustawień i :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
    

    Zwróć uwagę, że adresy URL interfejsu API są uwzględniane jako dane wejściowe, ponieważ nie są to wartości wpisów tajnych.

  3. W zadaniu validate zaktualizuj kroki, aby uwzględnić nowe parametry wdrożenia:

    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. Zaktualizuj zadanie w deploy celu uwzględnienia nowych parametrów wdrożenia:

    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. Zapisz zmiany w pliku.

Zaktualizuj plik workflow.yml, aby udostępnić nowe ustawienia

  1. W programie Visual Studio Code otwórz plik workflow.yml .

  2. reviewApiUrl Dodaj dane wejściowe i reviewApiKey wpisy tajne dla każdego środowiska:

    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. Zapisz zmiany w pliku.

Aktualizowanie pliku Bicep

  1. Otwórz plik main.bicep.

  2. Poniżej parametrów, które znajdują się już w pliku, dodaj następujące parametry dla nowego interfejsu API przeglądu:

    @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. Zaktualizuj definicję appServiceApp zasobu, aby podać adres URL i klucz interfejsu API przeglądu aplikacji, aby kod witryny internetowej mógł ich używać:

    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. Zapisz zmiany w pliku.

  5. Zatwierdź i wypchnij zmiany do repozytorium Git przy użyciu następujących poleceń:

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

Przeglądanie wyników wdrożenia

  1. W przeglądarce przejdź do przebiegów przepływu pracy.

  2. Wybierz najnowszy przebieg.

  3. Wybierz najnowszy przebieg przepływu pracy.

    Poczekaj na wstrzymanie przepływu pracy przed wdrożeniem /wdrożeniem zadania. Osiągnięcie tego punktu przez przepływ pracy może potrwać kilka minut.

  4. Zatwierdź wdrożenie w środowisku produkcyjnym, wybierając pozycję Przejrzyj wdrożenia, a następnie wybierając pozycję Produkcja , a następnie pozycję Zatwierdź i wdróż.

    Poczekaj na zakończenie działania przepływu pracy.

  5. Wybierz pozycję Kod , a następnie wybierz środowisko produkcyjne .

    Zauważ, że w historii środowiska jest teraz widocznych wiele wdrożeń.

  6. W przeglądarce przejdź do witryny Azure Portal.

  7. Przejdź do grupy zasobów ToyWebsiteProduction .

  8. Na liście zasobów otwórz aplikację usługi aplikacja systemu Azure Service.

    Wybierz pozycję Konfiguracja.

    Zrzut ekranu witryny Azure Portal przedstawiający aplikację usługi App Service i element menu Konfiguracja.

  9. Wybierz pozycję Pokaż wartości.

    Zrzut ekranu witryny Azure Portal przedstawiający ustawienia aplikacji usługi App Service i przycisk przedstawiający wartości.

  10. Zwróć uwagę, że wartości ustawień ReviewApiKey i ReviewApiUrl są ustawione na wartości skonfigurowane dla środowiska produkcyjnego.

    Zrzut ekranu witryny Azure Portal przedstawiający ustawienia aplikacji usługi App Service i ustawienia konfiguracji.

  11. Porównaj bieżące wartości z ustawieniami konfiguracji aplikacji usługi App Service w grupie zasobów ToyWebsiteTest . Zwróć uwagę, że wartości są różne.

Oczyszczanie zasobów

Po ukończeniu ćwiczenia możesz usunąć zasoby, aby nie były naliczane opłaty.

W terminalu programu Visual Studio Code uruchom następujące polecenia:

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

Grupa zasobów jest usuwana w tle.

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