Exercício - Teste e implante seu 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 a usar o arquivo em seus pipelines, você precisa verificar se o arquivo representa com precisão seu ambiente atual do Azure. Neste módulo, você testará e implantará seu arquivo Bicep sobre seus recursos existentes do Azure.

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

  • Execute o comando what-if para determinar os efeitos da sua implantação.
  • Implante o modelo e verifique o status da implantação.

Executar hipóteses

Execute o comando what-if antes de implantar seu novo arquivo Bicep. Este comando verifica se o arquivo Bicep é válido. O comando também fornece uma lista de alterações que ocorrerão em seu ambiente do Azure quando você implantar o arquivo.

Nota

Em uma migração real, você deve executar o comando what-if em seus ambientes de produção e não produção com o conjunto apropriado de parâmetros para cada ambiente. Isso ajuda a detetar quaisquer diferenças na configuração que você pode não ter descoberto. Neste exemplo, você usa um único ambiente, portanto, só executa a operação hipotética nesse ambiente.

Atenção

O modo de implantação usado para o comando what-if e a implantação de modelo subsequente podem apresentar riscos. O modo Concluído exclui todos os recursos definidos no grupo de recursos que não estão especificados no modelo. Muitas vezes, esta é uma boa prática porque ajuda a garantir que o seu código Bicep está completo. No entanto, essa opção vem com algum risco porque você pode ter perdido um recurso em sua migração.

Neste exercício, você executa o comando what-if usando o modo completo para que todos os recursos que você possa ter perdido sejam detetados. Em seguida, execute a implantação no modo incremental.

  1. No terminal de código do Visual Studio, 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 virtualMachineAdminPassword parâmetro.

  1. No terminal de código do Visual Studio, 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 virtualMachineAdminPassword parâmetro.

Revise a saída hipotética

Analise a saída hipotética, que se parece com o exemplo a seguir:

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 rever cada uma delas.

  • O comando what-if deteta que o disco gerenciado será excluído. Esta saída não é 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 sua exclusão. No entanto, adotar uma abordagem cautelosa é sempre aconselhável, portanto, nas próximas etapas, você executará a implantação real no modo incremental para mitigar o risco de algo dar errado.

  • O comando what-if deteta que a privateIPAddress propriedade do networkInterface recurso foi removida. Esse resultado é OK, porque você removeu essa propriedade intencionalmente. A privateIPAllocationMethod propriedade está definida como Dynamic, portanto, a remoção da privateIPAddress propriedade não terá qualquer efeito, mesmo que seja uma alteração.

  • O comando what-if deteta que duas propriedades para o publicIPAddress do networkInterface recurso serão excluídas. Você adicionará essas propriedades para corrigir o problema.

Atualizar o modelo

Em main.bicep, atualize o networkInterface recurso para incluir as publicIPAddress propriedades de 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 o comando what-if novamente

  1. No terminal de código do Visual Studio, 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 virtualMachineAdminPassword parâmetro.

  3. Depois que a operação for concluída, revise a saída. A saída será semelhante ao exemplo a seguir. As deleteOption propriedades 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 de código do Visual Studio, 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 virtualMachineAdminPassword parâmetro.

  3. Depois que a operação for concluída, revise a saída. A saída será semelhante ao exemplo a seguir. As deleteOption propriedades 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.
    

Implementar o seu modelo

Você sabe que seu arquivo Bicep é válido e a operação hipotética indica que seu modelo fornece os resultados esperados. Agora você está pronto para implantar seu modelo. Se esta etapa for bem-sucedida, você não verá nenhum efeito.

  1. No terminal de código do Visual Studio, 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 virtualMachineAdminPassword parâmetro.

    Dentro de alguns segundos, a implantação é concluída com êxito.

  3. No portal do Azure, abra o grupo de recursos. Selecione 2 Bem-sucedido para visualizar 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 de código do Visual Studio, 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 virtualMachineAdminPassword parâmetro.

    Dentro de alguns segundos, a implantação é concluída com êxito.

  3. No portal do Azure, abra o grupo de recursos. Selecione o link 2 Bem-sucedido 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.

Gorjeta

Em uma migração real, você também deve executar testes de fumaça para verificar se seus recursos ainda estão funcionando corretamente. Um teste de fumaça é uma verificação final para garantir que você não fez alterações não intencionais.

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 o seguinte comando:

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

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

Remove-AzResourceGroup -Name ToyTruck -Force