Exercício - Use parâmetros do bíceps com vários ambientes

Concluído

Agora que seu pipeline é implantado em ambos os ambientes, você está pronto para integrar com a API de terceiros para análises de produtos.

A equipe do seu site forneceu as chaves de API e URLs que seu site deve usar para acessar o serviço. Há valores diferentes para seus ambientes de teste e produção usarem. Nesta unidade, você atualizará seu pipeline para configurar cada um de seus ambientes com as configurações corretas para a API de revisão do produto.

Durante o processo, você:

  • Crie grupos de variáveis para cada um dos seus ambientes.
  • Atualize o pipeline para que ele escolha o grupo de variáveis correto para cada ambiente em vez de usar parâmetros de modelo.
  • Atualize seu arquivo Bicep para propagar as configurações necessárias para a API de revisão do produto.
  • Atualize o grupo de variáveis e o pipeline para definir os valores para as configurações da API de revisão do produto.
  • Analise os resultados do pipeline e as alterações no seu ambiente do Azure.

Adicionar grupos de variáveis

Como você está adicionando mais parâmetros que variam entre cada ambiente, você decide deixar de adicionar os parâmetros do pipeline diretamente aos arquivos YAML do pipeline. Em vez disso, você usará um grupo de variáveis para manter os valores de cada ambiente juntos.

  1. No navegador, vá para Biblioteca de Pipelines>.

    Captura de tela do Azure DevOps que mostra o item de menu Biblioteca na categoria Pipelines.

  2. Selecione o botão + Grupo de variáveis .

    Captura de ecrã da página da biblioteca do Azure DevOps e do botão para adicionar um grupo de variáveis.

  3. Insira ToyWebsiteTest como o nome do grupo de variáveis.

  4. Selecione o botão + Adicionar para adicionar variáveis ao grupo de variáveis. Crie duas variáveis com as seguintes configurações:

    Nome Valor
    Tipo de Ambiente Teste
    ResourceGroupName ToyWebsiteTest

    Observe que você não define o nome da conexão de serviço no grupo de variáveis. Os nomes de conexão de serviço têm regras especiais sobre como podem ser especificados. Neste módulo, você usa parâmetros de modelo de pipeline.

    Captura de tela do grupo de variáveis de teste e variáveis.

  5. Selecione Guardar.

  6. Selecione o botão Voltar no navegador para retornar à lista de grupos de variáveis.

  7. Adicione outro grupo de variáveis chamado ToyWebsiteProduction. Crie duas variáveis com as seguintes configurações:

    Nome Valor
    Tipo de Ambiente Produção
    ResourceGroupName ToyWebsiteProdução

    Captura de tela do grupo de variáveis de produção e variáveis.

    Observe que os nomes das variáveis são os mesmos para ambos os ambientes, mas os valores são diferentes.

  8. Salve o grupo de variáveis de produção.

Atualizar o modelo de pipeline de implantação para usar o grupo de variáveis

  1. No Visual Studio Code, abra o arquivo deploy.yml .

  2. Na parte superior do arquivo, remova os resourceGroupName parâmetros e serviceConnectionName . Não exclua os environmentType parâmetros ou deploymentDefaultLocation .

    parameters:
    - name: environmentType
      type: string
    - name: deploymentDefaultLocation
      type: string
      default: westus3
    
  3. Atualize o ValidateBicepCode trabalho para importar o grupo de variáveis:

    - ${{ if ne(parameters.environmentType, 'Production') }}:
      - stage: Validate_${{parameters.environmentType}}
        displayName: Validate (${{parameters.environmentType}} Environment)
        jobs:
        - job: ValidateBicepCode
          displayName: Validate Bicep code
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
    
  4. Atualize o ValidateBicepCode trabalho para inferir automaticamente o nome da conexão de serviço com base no valor do environmentType parâmetro:

    - ${{ if ne(parameters.environmentType, 'Production') }}:
      - stage: Validate_${{parameters.environmentType}}
        displayName: Validate (${{parameters.environmentType}} Environment)
        jobs:
        - job: ValidateBicepCode
          displayName: Validate Bicep code
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureResourceManagerTemplateDeployment@3
              name: RunPreflightValidation
              displayName: Run preflight validation
              inputs:
                connectedServiceName: ToyWebsite${{parameters.environmentType}}
                location: ${{parameters.deploymentDefaultLocation}}
                deploymentMode: Validation
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep
                overrideParameters: >
                  -environmentType $(EnvironmentType)
    
  5. Atualize o ValidateBicepCode trabalho para usar o grupo de variáveis importado para definir o nome do grupo de recursos e os argumentos de tipo de ambiente para a tarefa de implantação:

    - ${{ if ne(parameters.environmentType, 'Production') }}:
      - stage: Validate_${{parameters.environmentType}}
        displayName: Validate (${{parameters.environmentType}} Environment)
        jobs:
        - job: ValidateBicepCode
          displayName: Validate Bicep code
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureResourceManagerTemplateDeployment@3
              name: RunPreflightValidation
              displayName: Run preflight validation
              inputs:
                connectedServiceName: ToyWebsite${{parameters.environmentType}}
                location: ${{parameters.deploymentDefaultLocation}}
                deploymentMode: Validation
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep
                overrideParameters: >
                  -environmentType $(EnvironmentType)
    
  6. Faça as alterações no PreviewAzureChanges trabalho:

    - ${{ if eq(parameters.environmentType, 'Production') }}:
      - stage: Preview_${{parameters.environmentType}}
        displayName: Preview (${{parameters.environmentType}} Environment)
        jobs:
        - job: PreviewAzureChanges
          displayName: Preview Azure changes
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureCLI@2
              name: RunWhatIf
              displayName: Run what-if
              inputs:
                azureSubscription: ToyWebsite${{parameters.environmentType}}
                scriptType: 'bash'
                scriptLocation: 'inlineScript'
                inlineScript: |
                  az deployment group what-if \
                    --resource-group $(ResourceGroupName) \
                    --template-file deploy/main.bicep \
                    --parameters environmentType=$(EnvironmentType)
    
  7. Faça as mesmas alterações no trabalho de Deploy implantação:

    - stage: Deploy_${{parameters.environmentType}}
      displayName: Deploy (${{parameters.environmentType}} Environment)
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        variables:
        - group: ToyWebsite${{parameters.environmentType}}
        environment: ${{parameters.environmentType}}
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: ToyWebsite${{parameters.environmentType}}
                    deploymentName: $(Build.BuildNumber)
                    location: ${{parameters.deploymentDefaultLocation}}
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
                    deploymentOutputs: deploymentOutputs
    
  8. Verifique se o arquivo deploy.yml agora se parece com o seguinte código:

    parameters:
    - name: environmentType
      type: string
    - name: deploymentDefaultLocation
      type: string
      default: westus3
    
    stages:
    
    - ${{ if ne(parameters.environmentType, 'Production') }}:
      - stage: Validate_${{parameters.environmentType}}
        displayName: Validate (${{parameters.environmentType}} Environment)
        jobs:
        - job: ValidateBicepCode
          displayName: Validate Bicep code
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureResourceManagerTemplateDeployment@3
              name: RunPreflightValidation
              displayName: Run preflight validation
              inputs:
                connectedServiceName: ToyWebsite${{parameters.environmentType}}
                location: ${{parameters.deploymentDefaultLocation}}
                deploymentMode: Validation
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep
                overrideParameters: >
                  -environmentType $(EnvironmentType)
    
    - ${{ if eq(parameters.environmentType, 'Production') }}:
      - stage: Preview_${{parameters.environmentType}}
        displayName: Preview (${{parameters.environmentType}} Environment)
        jobs:
        - job: PreviewAzureChanges
          displayName: Preview Azure changes
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureCLI@2
              name: RunWhatIf
              displayName: Run what-if
              inputs:
                azureSubscription: ToyWebsite${{parameters.environmentType}}
                scriptType: 'bash'
                scriptLocation: 'inlineScript'
                inlineScript: |
                  az deployment group what-if \
                    --resource-group $(ResourceGroupName) \
                    --template-file deploy/main.bicep \
                    --parameters environmentType=$(EnvironmentType)
    
    - stage: Deploy_${{parameters.environmentType}}
      displayName: Deploy (${{parameters.environmentType}} Environment)
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        variables:
        - group: ToyWebsite${{parameters.environmentType}}
        environment: ${{parameters.environmentType}}
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: ToyWebsite${{parameters.environmentType}}
                    deploymentName: $(Build.BuildNumber)
                    location: ${{parameters.deploymentDefaultLocation}}
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
                    deploymentOutputs: deploymentOutputs
    
                - bash: |
                    echo "##vso[task.setvariable variable=appServiceAppHostName;isOutput=true]$(echo $DEPLOYMENT_OUTPUTS | jq -r '.appServiceAppHostName.value')"
                  name: SaveDeploymentOutputs
                  displayName: Save deployment outputs into variables
                  env:
                    DEPLOYMENT_OUTPUTS: $(deploymentOutputs)
    
    - stage: SmokeTest_${{parameters.environmentType}}
      displayName: Smoke Test (${{parameters.environmentType}} Environment)
      jobs:
      - job: SmokeTest
        displayName: Smoke test
        variables:
          appServiceAppHostName: $[ stageDependencies.Deploy_${{parameters.environmentType}}.DeployWebsite.outputs['DeployWebsite.SaveDeploymentOutputs.appServiceAppHostName'] ]
        steps:
          - task: PowerShell@2
            name: RunSmokeTests
            displayName: Run smoke tests
            inputs:
              targetType: inline
              script: |
                $container = New-PesterContainer `
                  -Path 'deploy/Website.Tests.ps1' `
                  -Data @{ HostName = '$(appServiceAppHostName)' }
                Invoke-Pester `
                  -Container $container `
                  -CI
    
          - task: PublishTestResults@2
            name: PublishTestResults
            displayName: Publish test results
            condition: always()
            inputs:
              testResultsFormat: NUnit
              testResultsFiles: 'testResults.xml'
    
  9. Guarde as alterações ao ficheiro.

Atualizar a definição de pipeline para simplificar a lista de parâmetros

  1. Abra o ficheiro azure-pipelines.yml.

  2. Atualize os estágios que usam modelos para remover os resourceGroupName parâmetros e serviceConnectionName . Deixe apenas o environmentType parâmetro.

    trigger:
      batch: true
      branches:
        include:
        - main
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    
    # Lint the Bicep file.
    - stage: Lint
      jobs: 
      - template: pipeline-templates/lint.yml
    
    # Deploy to the test environment.
    - template: pipeline-templates/deploy.yml
      parameters:
        environmentType: Test
    
    # Deploy to the production environment.
    - template: pipeline-templates/deploy.yml
      parameters:
        environmentType: Production
    
  3. Guarde as alterações ao ficheiro.

  4. Confirme suas alterações no repositório Git sem enviá-las usando os seguintes comandos:

    git add .
    git commit -m "Use variable groups"
    

Atualizar o arquivo Bicep

  1. Abra o arquivo main.bicep .

  2. Abaixo dos parâmetros que já estão no arquivo, adicione os seguintes parâmetros para a nova API de revisão:

    @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. Atualize a definição de appServiceApp recurso para fornecer a URL da API de revisão e a chave para o aplicativo, para que o código do seu site possa usá-los:

    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 as alterações ao ficheiro.

Atualizar os grupos de variáveis

  1. No navegador, vá para Biblioteca de Pipelines e abra os grupos de> variáveis ToyWebsiteTest.

  2. Adicione as seguintes variáveis:

    Nome Valor
    RevisãoApiKey sandboxsecretkey
    RevisãoApiUrl https://sandbox.contoso.com/reviews
  3. Selecione o ícone de cadeado ao lado da variável ReviewApiKey . Esta etapa informa ao Azure Pipelines para tratar o valor da variável com segurança.

    Captura de tela do grupo de variáveis de teste e do botão da variável secreta.

  4. Salve o grupo de variáveis.

    Captura de tela do grupo de variáveis de teste com variáveis atualizadas.

  5. Atualize o grupo de variáveis ToyWebsiteProduction para adicionar um conjunto semelhante de variáveis:

    Nome Valor
    RevisãoApiKey produçãosecretkey
    RevisãoApiUrl https://api.contoso.com/reviews

    Lembre-se de selecionar o ícone de cadeado ao lado da variável ReviewApiKey .

    Captura de tela do grupo de variáveis de produção com variáveis atualizadas.

  6. Salve o grupo de variáveis.

Adicionar as variáveis da API de revisão aos grupos de variáveis

  1. No Visual Studio Code, abra o arquivo deploy.yml .

  2. ValidateBicepCode No trabalho, adicione os valores dos parâmetros de revisão da API à tarefa de implantação:

    - ${{ if ne(parameters.environmentType, 'Production') }}:
      - stage: Validate_${{parameters.environmentType}}
        displayName: Validate (${{parameters.environmentType}} Environment)
        jobs:
        - job: ValidateBicepCode
          displayName: Validate Bicep code
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureResourceManagerTemplateDeployment@3
              name: RunPreflightValidation
              displayName: Run preflight validation
              inputs:
                connectedServiceName: ToyWebsite${{parameters.environmentType}}
                location: ${{parameters.deploymentDefaultLocation}}
                deploymentMode: Validation
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep
                overrideParameters: >
                  -environmentType $(EnvironmentType)
                  -reviewApiUrl $(ReviewApiUrl)
                  -reviewApiKey $(ReviewApiKey)
    
  3. Faça a mesma alteração no PreviewAzureChanges trabalho:

    - ${{ if eq(parameters.environmentType, 'Production') }}:
      - stage: Preview_${{parameters.environmentType}}
        displayName: Preview (${{parameters.environmentType}} Environment)
        jobs:
        - job: PreviewAzureChanges
          displayName: Preview Azure changes
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureCLI@2
              name: RunWhatIf
              displayName: Run what-if
              inputs:
                azureSubscription: ToyWebsite${{parameters.environmentType}}
                scriptType: 'bash'
                scriptLocation: 'inlineScript'
                inlineScript: |
                  az deployment group what-if \
                    --resource-group $(ResourceGroupName) \
                    --template-file deploy/main.bicep \
                    --parameters environmentType=$(EnvironmentType) \
                                 reviewApiUrl=$(ReviewApiUrl) \
                                 reviewApiKey=$(ReviewApiKey)
    

    Importante

    Certifique-se de adicionar a barra invertida (\) no final da linha que define o valor do environmentType parâmetro e na linha subsequente. O \ caractere indica que outras linhas fazem parte do mesmo comando da CLI do Azure.

  4. Faça a mesma alteração no Deploy trabalho:

    - stage: Deploy_${{parameters.environmentType}}
      displayName: Deploy (${{parameters.environmentType}} Environment)
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        variables:
        - group: ToyWebsite${{parameters.environmentType}}
        environment: ${{parameters.environmentType}}
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: ToyWebsite${{parameters.environmentType}}
                    deploymentName: $(Build.BuildNumber)
                    location: ${{parameters.deploymentDefaultLocation}}
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
                      -reviewApiUrl $(ReviewApiUrl)
                      -reviewApiKey $(ReviewApiKey)
                    deploymentOutputs: deploymentOutputs
    
  5. Verifique se o arquivo deploy.yml agora se parece com o seguinte código:

    parameters:
    - name: environmentType
      type: string
    - name: deploymentDefaultLocation
      type: string
      default: westus3
    
    stages:
    
    - ${{ if ne(parameters.environmentType, 'Production') }}:
      - stage: Validate_${{parameters.environmentType}}
        displayName: Validate (${{parameters.environmentType}} Environment)
        jobs:
        - job: ValidateBicepCode
          displayName: Validate Bicep code
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureResourceManagerTemplateDeployment@3
              name: RunPreflightValidation
              displayName: Run preflight validation
              inputs:
                connectedServiceName: ToyWebsite${{parameters.environmentType}}
                location: ${{parameters.deploymentDefaultLocation}}
                deploymentMode: Validation
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep
                overrideParameters: >
                  -environmentType $(EnvironmentType)
                  -reviewApiUrl $(ReviewApiUrl)
                  -reviewApiKey $(ReviewApiKey)
    
    - ${{ if eq(parameters.environmentType, 'Production') }}:
      - stage: Preview_${{parameters.environmentType}}
        displayName: Preview (${{parameters.environmentType}} Environment)
        jobs:
        - job: PreviewAzureChanges
          displayName: Preview Azure changes
          variables:
          - group: ToyWebsite${{parameters.environmentType}}
          steps:
            - task: AzureCLI@2
              name: RunWhatIf
              displayName: Run what-if
              inputs:
                azureSubscription: ToyWebsite${{parameters.environmentType}}
                scriptType: 'bash'
                scriptLocation: 'inlineScript'
                inlineScript: |
                  az deployment group what-if \
                    --resource-group $(ResourceGroupName) \
                    --template-file deploy/main.bicep \
                    --parameters environmentType=$(EnvironmentType) \
                                 reviewApiUrl=$(ReviewApiUrl) \
                                 reviewApiKey=$(ReviewApiKey)
    
    - stage: Deploy_${{parameters.environmentType}}
      displayName: Deploy (${{parameters.environmentType}} Environment)
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        variables:
        - group: ToyWebsite${{parameters.environmentType}}
        environment: ${{parameters.environmentType}}
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: ToyWebsite${{parameters.environmentType}}
                    deploymentName: $(Build.BuildNumber)
                    location: ${{parameters.deploymentDefaultLocation}}
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
                      -reviewApiUrl $(ReviewApiUrl)
                      -reviewApiKey $(ReviewApiKey)
                    deploymentOutputs: deploymentOutputs
    
                - bash: |
                    echo "##vso[task.setvariable variable=appServiceAppHostName;isOutput=true]$(echo $DEPLOYMENT_OUTPUTS | jq -r '.appServiceAppHostName.value')"
                  name: SaveDeploymentOutputs
                  displayName: Save deployment outputs into variables
                  env:
                    DEPLOYMENT_OUTPUTS: $(deploymentOutputs)
    
    - stage: SmokeTest_${{parameters.environmentType}}
      displayName: Smoke Test (${{parameters.environmentType}} Environment)
      jobs:
      - job: SmokeTest
        displayName: Smoke test
        variables:
          appServiceAppHostName: $[ stageDependencies.Deploy_${{parameters.environmentType}}.DeployWebsite.outputs['DeployWebsite.SaveDeploymentOutputs.appServiceAppHostName'] ]
        steps:
          - task: PowerShell@2
            name: RunSmokeTests
            displayName: Run smoke tests
            inputs:
              targetType: inline
              script: |
                $container = New-PesterContainer `
                  -Path 'deploy/Website.Tests.ps1' `
                  -Data @{ HostName = '$(appServiceAppHostName)' }
                Invoke-Pester `
                  -Container $container `
                  -CI
    
          - task: PublishTestResults@2
            name: PublishTestResults
            displayName: Publish test results
            condition: always()
            inputs:
              testResultsFormat: NUnit
              testResultsFiles: 'testResults.xml'
    
  6. Confirme e envie suas alterações para o repositório Git usando os seguintes comandos:

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

Revise os resultados da implantação

  1. No seu navegador, vá para Pipelines.

  2. Selecione a execução mais recente do seu pipeline.

    Aguarde a pausa do pipeline antes do estágio Implantar (Ambiente de Produção ). Pode levar alguns minutos para que o gasoduto chegue a este ponto.

  3. Se lhe for pedido para conceder permissão para aceder a um recurso, selecione Ver e, em seguida, selecione Permitir.

  4. Aprove a implantação no ambiente de produção selecionando Revisar>Aprovar.

    Aguarde até que o pipeline termine a execução.

  5. Selecione Ambientes de pipelines>.

  6. Selecione o Ambiente de produção .

    Observe que agora você vê várias implantações no histórico do ambiente.

  7. No browser, aceda ao Portal do Azure.

  8. Vá para o grupo de recursos ToyWebsiteProduction .

  9. Na lista de recursos, abra o aplicativo Serviço de Aplicativo do Azure.

    Selecione Configuração.

    Captura de tela do portal do Azure que mostra o aplicativo Serviço de Aplicativo e o item de menu Configuração.

  10. Selecione Mostrar valores.

    Captura de ecrã do portal do Azure que mostra as definições da aplicação Serviço de Aplicação e o botão para mostrar valores.

  11. Observe que os valores do site de produção para as configurações ReviewApiKey e ReviewApiUrl são definidos para os valores que você configurou no grupo de variáveis de produção.

    Captura de ecrã do portal do Azure que mostra as definições da aplicação Serviço de Aplicação e as definições de configuração.

  12. Compare os valores atuais com as definições de configuração do aplicativo Serviço de Aplicativo no grupo de recursos ToyWebsiteTest . Observe que os valores são diferentes.

Limpar os recursos

Agora que concluiu o exercício, pode remover os recursos para não ser cobrado por eles.

No terminal de código do Visual Studio, execute os seguintes comandos:

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

O grupo de recursos é excluído em segundo plano.

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