Övning – Testa och distribuera den konverterade mallen

Slutförd

Du har skapat en Bicep-fil som representerar den virtuella dator som kör leksaksbilstjänsterna. Innan du åtar dig att använda filen i dina pipelines måste du kontrollera att filen representerar din aktuella Azure-miljö korrekt. I den här modulen ska du testa och sedan distribuera Bicep-filen över dina befintliga Azure-resurser.

Under processen utför du följande uppgifter:

  • Kör kommandot what-if för att fastställa effekterna av din distribution.
  • Distribuera mallen och verifiera distributionsstatusen.

Kör hypotetisk analys

Kör kommandot what-if innan du distribuerar din nya Bicep-fil. Det här kommandot verifierar att Bicep-filen är giltig. Kommandot innehåller också en lista över ändringar som kommer att ske i Din Azure-miljö när du distribuerar filen.

Anteckning

I en verklig migrering bör du köra kommandot what-if mot dina produktions- och icke-produktionsmiljöer med lämplig uppsättning parametrar för varje miljö. Om du gör det kan du identifiera eventuella skillnader i konfigurationen som du kanske inte har upptäckt. I det här exemplet använder du en enda miljö, så du kör bara konsekvensåtgärden mot den miljön.

Försiktighet

Distributionsläget som du använder för kommandot what-if och den efterföljande malldistributionen kan medföra risk. Fullständigt läge tar bort alla resurser som definierats i resursgruppen som inte anges i mallen. Detta är ofta en bra idé eftersom det hjälper dig att se till att din Bicep-kod är fullständig. Det här alternativet medför dock en viss risk eftersom du kanske har missat en resurs i migreringen.

I den här övningen kör du kommandot what-if med hjälp av fullständigt läge så att alla resurser som du har missat identifieras. Sedan kör du distributionen i inkrementellt läge.

  1. Kör följande kommando i Visual Studio Code-terminalen:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. När du uppmanas till det anger du ett säkert lösenord för parametervärdet virtualMachineAdminPassword.

  1. Kör följande kommando i Visual Studio Code-terminalen:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. När du uppmanas till det anger du ett säkert lösenord för parametervärdet virtualMachineAdminPassword.

Granska "vad händer om"-analysen

Granska vad händer om-resultaten, som ser ut som följande exempel:

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.

Utdata innehåller tre viktiga informationsdelar. Nu ska vi granska var och en.

  • Kommandot what-if identifierar att den hanterade disken kommer att tas bort. Utdata är inte korrekta. Hanterade diskar skapas automatiskt när du skapar virtuella datorer. Även om hanterade diskar visas i listan över resurser som ska tas bort, förhindrar den virtuella datorn att de tas bort. Det är dock alltid lämpligt att använda en försiktig metod, så i nästa steg kör du den faktiska distributionen i inkrementellt läge för att minska risken för att något går fel.

  • What-if-kommandot identifierar att egenskapen privateIPAddress för networkInterface-resursen tas bort. Det här resultatet är OK eftersom du har tagit bort den egenskapen avsiktligt. Egenskapen privateIPAllocationMethod är inställd på Dynamic, så att ta bort egenskapen privateIPAddress har ingen effekt, även om det är en ändring.

  • Kommandot what-if identifierar att två egenskaper för publicIPAddress för den networkInterface resursen tas bort. Du lägger till de här egenskaperna för att åtgärda problemet.

Uppdatera mallen

I main.bicepuppdaterar du den networkInterface resursen så att den innehåller egenskaperna publicIPAddress för deleteOption och sku:

resource networkInterface 'Microsoft.Network/networkInterfaces@2024-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'
  }
}

Kör what-if-kommandot igen

  1. Kör följande kommando i Visual Studio Code-terminalen:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. När du uppmanas till det anger du ett säkert lösenord för parametervärdet virtualMachineAdminPassword.

  3. När åtgärden är klar, granska resultatet. Utdata ser ut som i följande exempel. Egenskaperna deleteOption och sku visas inte i utdata.

    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. Kör följande kommando i Visual Studio Code-terminalen:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. När du uppmanas till det anger du ett säkert lösenord för parametervärdet virtualMachineAdminPassword.

  3. När operationen är klar, granskar du utdata. Utdata ser ut som i följande exempel. Egenskaperna deleteOption och sku visas inte i utdata.

    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.
    

Distribuera mallen

Du vet att din Bicep-fil är giltig och vad händer om-analysen visar att din mall ger de resultat du förväntar dig. Nu är du redo att distribuera mallen. Om det här steget lyckas bör du inte se någon effekt.

  1. Kör följande kommando i Visual Studio Code-terminalen:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. När du uppmanas till det anger du ett säkert lösenord för parametervärdet virtualMachineAdminPassword.

    Inom några sekunder slutförs distributionen.

  3. Öppna resursgruppen i Azure-portalen. Välj 2 Lyckad för att visa listan över utrullningar:

    Skärmbild av Azure-portalen som visar resursgruppen. Länken 2 Lyckades är markerad.

    Installationen lyckades.

    Skärmbild av Azure-portalen som visar resursgrupputplaceringarna. Den lyckade utplaceringen är markerad.

  1. Kör följande kommando i Visual Studio Code-terminalen:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. När du uppmanas till det anger du ett säkert lösenord för parametervärdet virtualMachineAdminPassword.

    Inom några sekunder slutförs distributionen.

  3. Öppna resursgruppen i Azure-portalen. Välj länken 2 Lyckades för att visa listan över distributioner:

    Skärmbild av Azure-portalen som visar resursgruppen. Länken 2 Lyckades är markerad.

    Distributionen lyckades:

    Skärmdump av Azure-portalen som visar distributioner för resursgrupp. Den framgångsrikt genomförda distributionen är markerad.

Tips

I en verklig migrering bör du också köra röktester för att kontrollera att dina resurser fortfarande fungerar korrekt. Ett röktest är en sista kontroll för att säkerställa att du inte gjorde oavsiktliga ändringar.

Rensa resurserna

Nu när du har slutfört övningen kan du ta bort resurserna så att du inte debiteras för dem.

Kör följande kommando i Visual Studio Code-terminalen:

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

Resursgruppen och alla dess resurser tas bort i bakgrunden.

Remove-AzResourceGroup -Name ToyTruck -Force