Esercizio - Testare e distribuire il modello convertito

Completato

È stato creato un file Bicep per rappresentare la macchina virtuale che esegue i servizi del camion giocattolo. Prima di eseguire il commit e iniziare a usare il file nelle pipeline, è necessario verificare che il file rappresenti in modo accurato l'ambiente di Azure corrente. In questa unità si testerà e quindi si distribuirà il file Bicep sulle risorse di Azure esistenti.

Durante il processo, si eseguiranno le attività seguenti:

  • Eseguire il comando di simulazione per determinare gli effetti della distribuzione.
  • Distribuire il modello e verificare lo stato della distribuzione.

Eseguire il comando di simulazione

Eseguire il comando what-if prima di distribuire il nuovo file Bicep. Questo comando verifica che il file Bicep sia valido. Il comando fornisce anche un elenco di modifiche che si verificheranno nell'ambiente Azure quando si distribuisce il file.

Nota

In una migrazione reale, è consigliabile eseguire il comando di simulazione negli ambienti di produzione e non di produzione con il set appropriato di parametri per ogni ambiente. In questo modo è possibile rilevare eventuali differenze di configurazione che potrebbero non essere state rilevate. In questo esempio si usa un singolo ambiente, quindi si esegue l'operazione di simulazione in tale ambiente.

Attenzione

La modalità di distribuzione usata per il comando di simulazione e la successiva distribuzione del modello potrebbero comportare rischi. La modalità completa elimina tutte le risorse definite nel gruppo di risorse che non sono specificate nel modello. Spesso si tratta di una procedura consigliata perché consente di assicurarsi che il codice Bicep sia completo. Tuttavia, questa opzione comporta anche dei rischi perché ci si potrebbe essere dimenticati di una risorsa nella migrazione.

In questo esercizio il comando di simulazione viene eseguito usando la modalità completa in modo che tutte le risorse che potrebbero essere state perse vengano rilevate. La distribuzione viene quindi eseguita in modalità incrementale.

  1. Nel terminale di Visual Studio Code eseguire il comando seguente:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Quando richiesto, immettere una password sicura per il valore del parametro virtualMachineAdminPassword.

  1. Nel terminale di Visual Studio Code eseguire il comando seguente:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Quando richiesto, immettere una password sicura per il valore del parametro virtualMachineAdminPassword.

Verificare l'output della simulazione

Esaminare l'output della simulazione, simile all'esempio seguente:

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.

L'output include tre importanti informazioni, che verranno ora esaminate singolarmente.

  • Il comando di simulazione rileva che il disco gestito verrà eliminato. Questo output non è accurato. I dischi gestiti vengono creati automaticamente quando si creano macchine virtuali. Anche se i dischi gestiti vengono visualizzati nell'elenco delle risorse da eliminare, la macchina virtuale ne impedisce l'eliminazione. Tuttavia, è sempre consigliabile adottare un approccio cauto, quindi nei passaggi successivi si eseguirà la distribuzione effettiva in modalità incrementale per attenuare il rischio di problemi.

  • Il comando di simulazione rileva che la proprietà privateIPAddress della risorsa networkInterface viene rimossa. Non si tratta di un problema, perché la proprietà è stata rimossa intenzionalmente. La proprietà privateIPAllocationMethod è impostata su Dynamic, quindi la rimozione della proprietà privateIPAddress non avrà alcun effetto, anche se si tratta di una modifica.

  • Il comando di simulazione rileva che verranno eliminate due proprietà per publicIPAddress della risorsa networkInterface. Queste proprietà verranno aggiunte per risolvere il problema.

Aggiornare il modello

In main.bicepaggiornare la risorsa networkInterface in modo da includere le proprietà di publicIPAddress per 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'
  }
}

Eseguire di nuovo il comando di simulazione

  1. Nel terminale di Visual Studio Code eseguire il comando seguente:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Quando richiesto, immettere una password sicura per il valore del parametro virtualMachineAdminPassword.

  3. Al termine dell'operazione, esaminare l'output. L'output avrà un aspetto simile all'esempio seguente. Le proprietà deleteOption e sku non vengono visualizzate nell'output.

    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. Nel terminale di Visual Studio Code eseguire il comando seguente:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Quando richiesto, immettere una password sicura per il valore del parametro virtualMachineAdminPassword.

  3. Al termine dell'operazione, esaminare l'output. L'output avrà un aspetto simile all'esempio seguente. Le proprietà deleteOption e sku non vengono visualizzate nell'output.

    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.
    

Distribuire il modello

Si sa che il file Bicep è valido e l'operazione di simulazione indica che il modello fornisce i risultati previsti. È ora possibile distribuire il modello. Se questo passaggio ha esito positivo, non verrà visualizzato alcun effetto.

  1. Nel terminale di Visual Studio Code eseguire il comando seguente:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Quando richiesto, immettere una password sicura per il valore del parametro virtualMachineAdminPassword.

    Entro pochi secondi, la distribuzione termina correttamente.

  3. Nel portale di Azure aprire il gruppo di risorse. Selezionare 2 riuscite per visualizzare l'elenco delle distribuzioni:

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

    La distribuzione è riuscita:

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

  1. Nel terminale di Visual Studio Code eseguire il comando seguente:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Quando richiesto, immettere una password sicura per il valore del parametro virtualMachineAdminPassword.

    Entro pochi secondi, la distribuzione termina correttamente.

  3. Nel portale di Azure aprire il gruppo di risorse. Selezionare il collegamento 2 riuscite per visualizzare l'elenco delle distribuzioni:

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

    La distribuzione è riuscita:

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

Suggerimento

In una migrazione reale è consigliabile eseguire anche test di verifica della compilazione per verificare che le risorse funzionino ancora correttamente. Un test di verifica della compilazione è un controllo finale per assicurarsi che non siano state apportate modifiche non intenzionali.

Pulire le risorse

Ora che l'esercizio è stato completato, è possibile rimuovere le risorse in modo da evitare che vengano fatturate.

Nel terminale di Visual Studio Code eseguire il comando seguente:

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

Il gruppo di risorse e tutte le sue risorse vengono eliminate in background.

Remove-AzResourceGroup -Name ToyTruck -Force