Exercício – Testar e implantar o modelo convertido
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.
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
Quando solicitado, insira uma senha segura para o valor do parâmetro
virtualMachineAdminPassword
.
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
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 recursonetworkInterface
foi removida. Esse resultado está certo, pois você removeu essa propriedade intencionalmente. A propriedadeprivateIPAllocationMethod
é definida comoDynamic
. Portanto, a remoção da propriedadeprivateIPAddress
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 recursonetworkInterface
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
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
Quando solicitado, insira uma senha segura para o valor do parâmetro
virtualMachineAdminPassword
.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
esku
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.
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
Quando solicitado, insira uma senha segura para o valor do parâmetro
virtualMachineAdminPassword
.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
esku
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.
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
Quando solicitado, insira uma senha segura para o valor do parâmetro
virtualMachineAdminPassword
.Em alguns segundos, a implantação é finalizada com êxito.
No portal do Azure, abra o grupo de recursos. Selecione 2 Bem-sucedidas para exibir a lista de implantações:
A implantação foi bem-sucedida:
No terminal do Visual Studio Code, execute o seguinte comando:
New-AzResourceGroupDeployment ` -ResourceGroupName ToyTruck ` -TemplateFile main.bicep ` -TemplateParameterFile main.parameters.production.json
Quando solicitado, insira uma senha segura para o valor do parâmetro
virtualMachineAdminPassword
.Em alguns segundos, a implantação é finalizada com êxito.
No portal do Azure, abra o grupo de recursos. Selecione o link 2 Bem-sucedidas para exibir a lista de implantações:
A implantação foi bem-sucedida:
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