Ejercicio: Prueba e implementación de la plantilla convertida
Ha creado un archivo de Bicep para representar la máquina virtual que ejecuta los servicios del camión de juguete. Antes de comprometerse a usar el archivo en sus canalizaciones, debe comprobar que representa con precisión su entorno actual de Azure. En este módulo, probará e implementará el archivo de Bicep por encima de los recursos de Azure existentes.
Durante el proceso, hará estas tareas:
- Ejecución del comando what-if para determinar los efectos de la implementación.
- Implementación de la plantilla y comprobación del estado de la implementación.
Ejecución de what-if
Antes de implementar el archivo de Bicep nuevo, ejecute el comando what-if. Este comando comprueba que el archivo de Bicep es válido. El comando también proporciona una lista de los cambios que se producirán en su entorno de Azure una vez que implemente el archivo.
Nota:
En una migración real, debería ejecutar el comando what-if en los entornos de producción y no producción, con el conjunto adecuado de parámetros para cada entorno. Si lo hace, le ayuda a detectar las diferencias en la configuración que es posible que no haya descubierto. En este ejemplo se usa un entorno único, por lo que solo se ejecuta la operación what-if en dicho entorno.
Precaución
El modo de implementación usado para el comando what-if y la implementación de plantilla posterior puede presentar riesgos. El modo completo elimina los recursos definidos en el grupo de recursos que no se especifican en la plantilla. A menudo, esto es un procedimiento recomendado, ya que le ayuda a garantizar que el código de Bicep está completo, pero esta opción presenta ciertos riesgos, ya que es posible que se haya pasado por alto algún recurso en la migración.
En este ejercicio, ejecutará el comando what-if con el modo completo para detectar los recursos que podría haber pasado por alto. Después, ejecutará la implementación en modo incremental.
En el terminal de Visual Studio Code, ejecute el comando siguiente:
az deployment group what-if \ --mode Complete \ --resource-group ToyTruck \ --template-file main.bicep \ --parameters main.parameters.production.json
Cuando se le solicite, escriba una contraseña segura para el valor del parámetro
virtualMachineAdminPassword
.
En el terminal de Visual Studio Code, ejecute el comando siguiente:
New-AzResourceGroupDeployment ` -WhatIf ` -Mode Complete ` -ResourceGroupName ToyTruck ` -TemplateFile main.bicep ` -TemplateParameterFile main.parameters.production.json
Cuando se le solicite, escriba una contraseña segura para el valor del parámetro
virtualMachineAdminPassword
.
Revisión de la salida de what-if
Revise la salida de what-if, que tiene un aspecto similar al del ejemplo siguiente:
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.
La salida incluye tres elementos importantes de información. Se revisarán a continuación.
El comando what-if ha detectado que se eliminará el disco administrado. Esta salida no es precisa. Los discos administrados se crean automáticamente al crear máquinas virtuales. Si bien aparecen discos administrados en la lista de los recursos que se van a eliminar, la máquina virtual impide su eliminación. Pero siempre es aconsejable adoptar un enfoque prudente, por lo que en los pasos siguientes ejecutará la implementación real en modo incremental para mitigar el riesgo de que algo salga mal.
El comando what-if detecta que se quita la propiedad
privateIPAddress
del recursonetworkInterface
. Este resultado es correcto, ya que quitó esa propiedad intencionadamente. La propiedadprivateIPAllocationMethod
se establece enDynamic
, por lo que quitar la propiedadprivateIPAddress
no tendrá ningún afecto, aunque sí se trata de un cambio.El comando what-if detecta que se eliminarán dos propiedades para el
publicIPAddress
del recursonetworkInterface
. Agregará estas propiedades para corregir el problema.
Actualización de la plantilla
En main.bicep, actualice el recurso networkInterface
para incluir las propiedades publicIPAddress
para deleteOption
y 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'
}
}
Vuelva a ejecutar el comando what-if
En el terminal de Visual Studio Code, ejecute el comando siguiente:
az deployment group what-if \ --mode Complete \ --resource-group ToyTruck \ --template-file main.bicep \ --parameters main.parameters.production.json
Cuando se le solicite, escriba una contraseña segura para el valor del parámetro
virtualMachineAdminPassword
.Una vez finalizada la operación, revise la salida. La salida será similar al siguiente ejemplo. Las propiedades
deleteOption
ysku
no se muestran en la salida.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.
En el terminal de Visual Studio Code, ejecute el comando siguiente:
New-AzResourceGroupDeployment ` -WhatIf ` -Mode Complete ` -ResourceGroupName ToyTruck ` -TemplateFile main.bicep ` -TemplateParameterFile main.parameters.production.json
Cuando se le solicite, escriba una contraseña segura para el valor del parámetro
virtualMachineAdminPassword
.Una vez finalizada la operación, revise la salida. La salida será similar al siguiente ejemplo. Las propiedades
deleteOption
ysku
no se muestran en la salida.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.
Implementación de la plantilla
Sabe que el archivo de Bicep es válido y la operación what-if indica que la plantilla proporciona los resultados esperados. Ya está a punto para implementar la plantilla. Si este paso se realiza correctamente, no debería ver efectos.
En el terminal de Visual Studio Code, ejecute el comando siguiente:
az deployment group create \ --resource-group ToyTruck \ --template-file main.bicep \ --parameters main.parameters.production.json
Cuando se le solicite, escriba una contraseña segura para el valor del parámetro
virtualMachineAdminPassword
.Al cabo de unos segundos, la implementación finaliza correctamente.
En Azure Portal, abra el grupo de recursos. Seleccione 2 correctas para ver la lista de implementaciones:
La implementación se ha realizado correctamente:
En el terminal de Visual Studio Code, ejecute el comando siguiente:
New-AzResourceGroupDeployment ` -ResourceGroupName ToyTruck ` -TemplateFile main.bicep ` -TemplateParameterFile main.parameters.production.json
Cuando se le solicite, escriba una contraseña segura para el valor del parámetro
virtualMachineAdminPassword
.Al cabo de unos segundos, la implementación finaliza correctamente.
En Azure Portal, abra el grupo de recursos. Seleccione el vínculo 2 correctas para ver la lista de implementaciones:
La implementación se ha realizado correctamente:
Sugerencia
En una migración real, también debería ejecutar pruebas de humo para comprobar que los recursos siguen funcionando correctamente. Una prueba de humo es una comprobación final para asegurarse de que no ha cambiado nada de manera involuntaria.
Limpiar los recursos
Ahora que ha completado el ejercicio, puede quitar los recursos para que no se le facturen.
En el terminal de Visual Studio Code, ejecute el comando siguiente:
az group delete --resource-group ToyTruck --yes --no-wait
El grupo de recursos y todos sus recursos se eliminan en segundo plano.
Remove-AzResourceGroup -Name ToyTruck -Force