Ejercicio: Prueba e implementación de la plantilla convertida

Completado

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.

  1. 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
    
  2. Cuando se le solicite, escriba una contraseña segura para el valor del parámetro virtualMachineAdminPassword.

  1. 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
    
  2. 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 recurso networkInterface. Este resultado es correcto, ya que quitó esa propiedad intencionadamente. La propiedad privateIPAllocationMethod se establece en Dynamic, por lo que quitar la propiedad privateIPAddress 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 recurso networkInterface. 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

  1. 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
    
  2. Cuando se le solicite, escriba una contraseña segura para el valor del parámetro virtualMachineAdminPassword.

  3. Una vez finalizada la operación, revise la salida. La salida será similar al siguiente ejemplo. Las propiedades deleteOption y sku 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.
    
  1. 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
    
  2. Cuando se le solicite, escriba una contraseña segura para el valor del parámetro virtualMachineAdminPassword.

  3. Una vez finalizada la operación, revise la salida. La salida será similar al siguiente ejemplo. Las propiedades deleteOption y sku 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.

  1. 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
    
  2. 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.

  3. En Azure Portal, abra el grupo de recursos. Seleccione 2 correctas para ver la lista de implementaciones:

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

    La implementación se ha realizado correctamente:

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

  1. En el terminal de Visual Studio Code, ejecute el comando siguiente:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. 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.

  3. En Azure Portal, abra el grupo de recursos. Seleccione el vínculo 2 correctas para ver la lista de implementaciones:

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

    La implementación se ha realizado correctamente:

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

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