Exercício - Teste e implante seu 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 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.
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
Quando solicitado, insira uma senha segura para o valor do
virtualMachineAdminPassword
parâmetro.
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
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 donetworkInterface
recurso foi removida. Esse resultado é OK, porque você removeu essa propriedade intencionalmente. AprivateIPAllocationMethod
propriedade está definida comoDynamic
, portanto, a remoção daprivateIPAddress
propriedade não terá qualquer efeito, mesmo que seja uma alteração.O comando what-if deteta que duas propriedades para o
publicIPAddress
donetworkInterface
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
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
Quando solicitado, insira uma senha segura para o valor do
virtualMachineAdminPassword
parâmetro.Depois que a operação for concluída, revise a saída. A saída será semelhante ao exemplo a seguir. As
deleteOption
propriedades 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 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
Quando solicitado, insira uma senha segura para o valor do
virtualMachineAdminPassword
parâmetro.Depois que a operação for concluída, revise a saída. A saída será semelhante ao exemplo a seguir. As
deleteOption
propriedades 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.
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.
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
Quando solicitado, insira uma senha segura para o valor do
virtualMachineAdminPassword
parâmetro.Dentro de alguns segundos, a implantação é concluída com êxito.
No portal do Azure, abra o grupo de recursos. Selecione 2 Bem-sucedido para visualizar a lista de implantações:
A implantação foi bem-sucedida:
No terminal de código do Visual Studio, 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
virtualMachineAdminPassword
parâmetro.Dentro de alguns segundos, a implantação é concluída com êxito.
No portal do Azure, abra o grupo de recursos. Selecione o link 2 Bem-sucedido para exibir a lista de implantações:
A implantação foi bem-sucedida:
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