Exercício – Testar e implantar o modelo convertido

Concluído

Você criou um arquivo Bicep para representar a máquina virtual que executa os serviços de caminhão de brinquedo. Antes de se comprometer com o uso do arquivo nos pipelines, você precisa verificar se o arquivo representa com precisão seu ambiente atual do Azure. Neste módulo, você testará e implantará o arquivo Bicep nos recursos do Azure existentes.

Durante o processo, você executará as seguintes tarefas:

  • Executar o comando do teste de hipóteses para determinar os efeitos da implantação.
  • Implantar o modelo e verificar o status da implantação.

Executar o teste de hipóteses

Antes de realmente implantar o novo arquivo Bicep, execute o comando do teste de hipóteses. Esse comando verifica se o arquivo Bicep é válido. O comando também fornece uma lista de alterações que ocorrerão no ambiente do Azure após a implantação do arquivo.

Observação

Em uma migração real, você deve executar o comando do teste de hipóteses nos ambientes de produção e que não são de produção, com o conjunto apropriado de parâmetros para cada ambiente. Isso ajuda a detectar diferenças na configuração que talvez você não tenha descoberto. Neste exemplo, você usará um só ambiente. Portanto, você só executará a operação de teste de hipóteses nesse ambiente.

Cuidado

O modo de implantação usado para o comando do teste de hipóteses e a próxima implantação de modelo podem apresentar riscos. O modo completo exclui todos os recursos definidos no grupo de recursos que não estão especificados no modelo. Geralmente essa é uma boa prática, pois ajuda você a garantir que o código Bicep esteja completo. No entanto, essa opção traz alguns riscos, pois você pode ter perdido algum recurso na migração.

Neste exercício, você executa o comando do teste de hipóteses usando o modo completo para que ele detecte os recursos que você possa ter perdido. Em seguida, você executará a implantação no modo incremental.

  1. No terminal do Visual Studio Code, execute o seguinte comando:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Quando solicitado, insira uma senha segura para o valor do parâmetro virtualMachineAdminPassword.

  1. No terminal do Visual Studio Code, execute o seguinte comando:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Quando solicitado, insira uma senha segura para o valor do parâmetro virtualMachineAdminPassword.

Examinar a saída do teste de hipóteses

Examine a saída do teste de hipóteses, que é semelhante ao seguinte exemplo:

Note: The result may contain false positive predictions (noise).
You can help us improve the accuracy of the result by opening an issue here: https://aka.ms/WhatIfIssues.

Resource and property changes are indicated with these symbols:
  - Delete
  ~ Modify
  x NoEffect
  = NoChange

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK

  - Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81

      id:        "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK/providers/Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
      location:  "westus3"
      managedBy: "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyTruck/providers/Microsoft.Compute/virtualMachines/ToyTruckServer"
      name:      "ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
      sku.name:  "Premium_LRS"
      sku.tier:  "Premium"
      type:      "Microsoft.Compute/disks"

  ~ Microsoft.Network/networkInterfaces/toytruckserver123 [2022-05-01]
    - kind:                                              "Regular"
    - properties.allowPort25Out:                         true
    ~ properties.ipConfigurations: [
      ~ 0:

        - properties.privateIPAddress:                        "10.0.0.4"
        - properties.publicIPAddress.properties.deleteOption: "Detach"
        - properties.publicIPAddress.sku:

            name: "Basic"
            tier: "Regional"


      ]
    x properties.ipConfigurations[0].properties.primary: true

  = Microsoft.Compute/virtualMachines/ToyTruckServer [2022-08-01]
    x properties.storageProfile.osDisk.managedDisk.storageAccountType: "Premium_LRS"

  = Microsoft.Network/networkSecurityGroups/ToyTruckServer-nsg [2022-05-01]
  = Microsoft.Network/publicIPAddresses/ToyTruckServer-ip [2022-05-01]
  = Microsoft.Network/virtualNetworks/ToyTruck-vnet [2022-05-01]

Resource changes: 1 to delete, 1 to modify, 4 no change.

A saída inclui três informações importantes. Vamos examinar cada uma delas.

  • O comando do teste de hipóteses detecta que o disco gerenciado será excluído. A saída não está precisa. Os discos gerenciados são criados automaticamente quando você cria máquinas virtuais. Embora os discos gerenciados apareçam na lista de recursos a serem excluídos, a máquina virtual impede a exclusão deles. No entanto, a adoção de uma abordagem cuidadosa é sempre aconselhável. Portanto, nas próximas etapas, você executará a implantação real no modo incremental para reduzir o risco de algo dar errado.

  • O comando de teste de hipóteses detecta que a propriedade privateIPAddress do recurso networkInterface foi removida. Esse resultado está certo, pois você removeu essa propriedade intencionalmente. A propriedade privateIPAllocationMethod é definida como Dynamic. Portanto, a remoção da propriedade privateIPAddress não terá nenhum efeito, mesmo que seja uma alteração.

  • O comando de teste de hipóteses detecta que duas propriedades para o publicIPAddress do recurso networkInterface serão excluídas. Você adicionará essas propriedades para corrigir o problema.

Atualizar o modelo

No main.bicep, atualize o recurso networkInterface para incluir as propriedades publicIPAddress para deleteOption e sku:

resource networkInterface 'Microsoft.Network/networkInterfaces@2022-05-01' = {
  name: networkInterfaceName
  location: location
  properties: {
    ipConfigurations: [
      {
        name: 'ipconfig1'
        properties: {
          privateIPAllocationMethod: 'Dynamic'
          publicIPAddress: {
            id: publicIPAddress.id
            properties: {
              deleteOption: 'Detach'
            }
            sku: {
              name: 'Basic'
              tier: 'Regional'
            }
          }
          subnet: {
            id: virtualNetwork::defaultSubnet.id
          }
          primary: true
          privateIPAddressVersion: 'IPv4'
        }
      }
    ]
    enableAcceleratedNetworking: true
    enableIPForwarding: false
    disableTcpStateTracking: false
    networkSecurityGroup: {
      id: networkSecurityGroup.id
    }
    nicType: 'Standard'
  }
}

Execute novamente o comando do teste de hipóteses

  1. No terminal do Visual Studio Code, execute o seguinte comando:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Quando solicitado, insira uma senha segura para o valor do parâmetro virtualMachineAdminPassword.

  3. Depois que a operação for concluída, examine a saída. A saída se parecerá com o exemplo a seguir. As propriedades deleteOption e sku não são mostradas na saída.

    Note: The result may contain false positive predictions (noise).
    You can help us improve the accuracy of the result by opening an issue here: https://aka.ms/WhatIfIssues.
    
    Resource and property changes are indicated with these symbols:
      - Delete
      ~ Modify
      x NoEffect
      = NoChange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK
    
      - Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81
    
          id:        "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK/providers/Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          location:  "westus3"
          managedBy: "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyTruck/providers/Microsoft.Compute/virtualMachines/ToyTruckServer"
          name:      "ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          sku.name:  "Premium_LRS"
          sku.tier:  "Premium"
          type:      "Microsoft.Compute/disks"
    
      ~ Microsoft.Network/networkInterfaces/toytruckserver123 [2022-05-01]
        - kind:                                              "Regular"
        - properties.allowPort25Out:                         true
        ~ properties.ipConfigurations: [
          ~ 0:
    
            - properties.privateIPAddress: "10.0.0.4"
    
          ]
        x properties.ipConfigurations[0].properties.primary: true
    
      = Microsoft.Compute/virtualMachines/ToyTruckServer [2022-08-01]
        x properties.storageProfile.osDisk.managedDisk.storageAccountType: "Premium_LRS"
    
      = Microsoft.Network/networkSecurityGroups/ToyTruckServer-nsg [2022-05-01]
      = Microsoft.Network/publicIPAddresses/ToyTruckServer-ip [2022-05-01]
      = Microsoft.Network/virtualNetworks/ToyTruck-vnet [2022-05-01]
    
    Resource changes: 1 to delete, 1 to modify, 4 no change.
    
  1. No terminal do Visual Studio Code, execute o seguinte comando:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Quando solicitado, insira uma senha segura para o valor do parâmetro virtualMachineAdminPassword.

  3. Depois que a operação for concluída, examine a saída. A saída se parecerá com o exemplo a seguir. As propriedades deleteOption e sku não são mostradas na saída.

    Note: The result may contain false positive predictions (noise).
    You can help us improve the accuracy of the result by opening an issue here: https://aka.ms/WhatIfIssues.
    
    Resource and property changes are indicated with these symbols:
      - Delete
      ~ Modify
      x NoEffect
      = NoChange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK
    
      - Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81
    
          id:        "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/TOYTRUCK/providers/Microsoft.Compute/disks/ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          location:  "westus3"
          managedBy: "/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyTruck/providers/Microsoft.Compute/virtualMachines/ToyTruckServer"
          name:      "ToyTruckServer_disk1_23e6a144c4ea4049b3e2be24b78a9e81"
          sku.name:  "Premium_LRS"
          sku.tier:  "Premium"
          type:      "Microsoft.Compute/disks"
    
      ~ Microsoft.Network/networkInterfaces/toytruckserver123 [2022-05-01]
        - kind:                                              "Regular"
        - properties.allowPort25Out:                         true
        ~ properties.ipConfigurations: [
          ~ 0:
    
            - properties.privateIPAddress: "10.0.0.4"
    
          ]
        x properties.ipConfigurations[0].properties.primary: true
    
      = Microsoft.Compute/virtualMachines/ToyTruckServer [2022-08-01]
        x properties.storageProfile.osDisk.managedDisk.storageAccountType: "Premium_LRS"
    
      = Microsoft.Network/networkSecurityGroups/ToyTruckServer-nsg [2022-05-01]
      = Microsoft.Network/publicIPAddresses/ToyTruckServer-ip [2022-05-01]
      = Microsoft.Network/virtualNetworks/ToyTruck-vnet [2022-05-01]
    
    Resource changes: 1 to delete, 1 to modify, 4 no change.
    

Implantar o modelo

Você sabe que o arquivo Bicep é válido, e a operação de teste de hipóteses indica que o modelo fornece os resultados esperados. Você já está pronto para implantar o modelo. Se essa etapa for bem-sucedida, você não verá nenhum efeito.

  1. No terminal do Visual Studio Code, execute o seguinte comando:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Quando solicitado, insira uma senha segura para o valor do parâmetro virtualMachineAdminPassword.

    Em alguns segundos, a implantação é finalizada com êxito.

  3. No portal do Azure, abra o grupo de recursos. Selecione 2 Bem-sucedidas para exibir a lista de implantações:

    Screenshot of the Azure portal that shows the resource group. The 2 Succeeded link is highlighted.

    A implantação foi bem-sucedida:

    Screenshot of the Azure portal that shows the resource group deployments. The successful deployment is highlighted.

  1. No terminal do Visual Studio Code, execute o seguinte comando:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Quando solicitado, insira uma senha segura para o valor do parâmetro virtualMachineAdminPassword.

    Em alguns segundos, a implantação é finalizada com êxito.

  3. No portal do Azure, abra o grupo de recursos. Selecione o link 2 Bem-sucedidas para exibir a lista de implantações:

    Screenshot of the Azure portal that shows the resource group. The 2 Succeeded link is highlighted.

    A implantação foi bem-sucedida:

    Screenshot of the Azure portal that shows the resource group deployments. The successful deployment is highlighted.

Dica

Em uma migração real, você também deve executar smoke tests para verificar se os recursos ainda estão funcionando corretamente. Um smoke test é uma verificação final para garantir que você não fez alterações não intencionais.

Limpar os recursos

Agora que você concluiu o exercício, remova os recursos para não ser cobrado por eles.

No terminal do Visual Studio Code, execute o seguinte comando:

az group delete --resource-group ToyTruck --yes --no-wait

O grupo de recursos e todos os recursos dele são excluídos em segundo plano.

Remove-AzResourceGroup -Name ToyTruck -Force