Oefening: uw geconverteerde sjabloon testen en implementeren

Voltooid

U hebt een Bicep-bestand gemaakt voor de virtuele machine waarop de speelgoedtruckdiensten worden uitgevoerd. Voordat u het bestand in uw pijplijnen gaat gebruiken, moet u controleren of het bestand de huidige Azure-omgeving nauwkeurig vertegenwoordigt. In deze module gaat u uw Bicep-bestand testen en implementeren via uw bestaande Azure-resources.

Tijdens het proces voert u de volgende taken uit:

  • Voer de what-if-opdracht uit om de effecten van uw deployment te bepalen.
  • Implementeer de sjabloon en verifieer de status van de implementatie.

"Wat-als-scenario uitvoeren"

Voer de what-if-opdracht uit voordat u het nieuwe Bicep-bestand implementeert. Met deze opdracht wordt gecontroleerd of uw Bicep-bestand geldig is. De opdracht bevat ook een lijst met wijzigingen die plaatsvinden in uw Azure-omgeving wanneer u het bestand implementeert.

Notitie

In een echte migratie moet u de what-if-opdracht uitvoeren voor uw productie- en niet-productieomgevingen met de juiste set parameters voor elke omgeving. Dit helpt u bij het detecteren van eventuele verschillen in configuratie die u mogelijk niet hebt ontdekt. In dit voorbeeld gebruikt u één omgeving, zodat u alleen de wat-als-bewerking uitvoert voor die omgeving.

Voorzichtigheid

De implementatiemodus die u gebruikt voor de wat-als-opdracht en de volgende sjabloonimplementatie kan risico's veroorzaken. In de volledige modus worden alle resources verwijderd die zijn gedefinieerd in de resourcegroep die niet zijn opgegeven in uw sjabloon. Vaak is dit een goede gewoonte omdat het u helpt te verzekeren dat uw Bicep-code volledig is. Deze optie heeft echter een risico omdat u mogelijk een resource in uw migratie hebt gemist.

In deze oefening voert u de wat-als ('what-if') opdracht uit in de volledige modus, zodat bronnen die u mogelijk hebt gemist, worden gedetecteerd. Vervolgens voert u de implementatie uit in de incrementele modus.

  1. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Wanneer u hierom wordt gevraagd, voert u een beveiligd wachtwoord in voor de parameterwaarde virtualMachineAdminPassword.

  1. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Wanneer u hierom wordt gevraagd, voert u een beveiligd wachtwoord in voor de parameterwaarde virtualMachineAdminPassword.

De wat-als-uitvoer bekijken

Bekijk de wat-als-uitvoer, die eruitziet als in het volgende voorbeeld:

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.

De uitvoer bevat drie belangrijke stukjes informatie. Laten we elk item eens bekijken.

  • Met de wat-als-opdracht wordt gedetecteerd dat de beheerde schijf zal worden verwijderd. Deze uitvoer is niet nauwkeurig. Beheerde schijven worden automatisch gemaakt wanneer u virtuele machines maakt. Hoewel beheerde schijven worden weergegeven in de lijst met resources die moeten worden verwijderd, voorkomt de virtuele machine dat ze worden verwijderd. Het is echter altijd raadzaam om voorzichtig te werken, dus in de volgende stappen voert u de daadwerkelijke implementatie uit in de incrementele modus om het risico te beperken dat er iets misgaat.

  • Met de wat-als-opdracht wordt gedetecteerd dat de eigenschap privateIPAddress van de networkInterface bron wordt verwijderd. Dit resultaat is OK, omdat u die eigenschap opzettelijk hebt verwijderd. De eigenschap privateIPAllocationMethod is ingesteld op Dynamic, dus het verwijderen van de eigenschap privateIPAddress heeft geen effect, ook al is dit een wijziging.

  • De wat-als-opdracht detecteert dat twee eigenschappen voor de publicIPAddress van de networkInterface-bron zullen worden verwijderd. U voegt deze eigenschappen toe om het probleem op te lossen.

De sjabloon bijwerken

Werk in main.bicep-de networkInterface-resource bij om de publicIPAddress eigenschappen voor deleteOption en skuop te nemen:

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'
  }
}

Voer de what-if-opdracht opnieuw uit

  1. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Wanneer u hierom wordt gevraagd, voert u een beveiligd wachtwoord in voor de parameterwaarde virtualMachineAdminPassword.

  3. Nadat de bewerking is voltooid, controleert u de uitvoer. De uitvoer ziet eruit als in het volgende voorbeeld. De eigenschappen deleteOption en sku worden niet weergegeven in de uitvoer.

    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. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Wanneer u hierom wordt gevraagd, voert u een beveiligd wachtwoord in voor de parameterwaarde virtualMachineAdminPassword.

  3. Nadat de bewerking is voltooid, controleert u de uitvoer. De uitvoer ziet eruit als in het volgende voorbeeld. De eigenschappen deleteOption en sku worden niet weergegeven in de uitvoer.

    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.
    

Uw sjabloon implementeren

U weet dat uw Bicep-bestand geldig is en de wat-als-bewerking geeft aan dat uw sjabloon de verwachte resultaten levert. U bent nu klaar om uw sjabloon te implementeren. Als deze stap slaagt, ziet u geen effect.

  1. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Wanneer u hierom wordt gevraagd, voert u een beveiligd wachtwoord in voor de parameterwaarde virtualMachineAdminPassword.

    Binnen een paar seconden is de implementatie voltooid.

  3. Open de resourcegroep in de Azure Portal. Selecteer 2 Geslaagd om de lijst met implementaties weer te geven:

    Schermopname van Azure Portal waarin de resourcegroep wordt weergegeven. De koppeling 2 Geslaagd is gemarkeerd.

    De implementatie is voltooid:

    schermopname van Azure Portal waarin de implementaties van de resourcegroep worden weergegeven. De geslaagde implementatie is gemarkeerd.

  1. Voer in de Visual Studio Code-terminal de volgende opdracht uit:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Wanneer u hierom wordt gevraagd, voert u een beveiligd wachtwoord in voor de parameterwaarde virtualMachineAdminPassword.

    Binnen een paar seconden is de implementatie voltooid.

  3. Open de resourcegroep in het Azure portal. Selecteer de link 2 Geslaagd om de lijst van implementaties te bekijken.

    Schermopname van Azure Portal waarin de resourcegroep wordt weergegeven. De koppeling 2 Geslaagd is gemarkeerd.

    De implementatie is voltooid:

    schermopname van Azure Portal waarin de implementaties van de resourcegroep worden weergegeven. De geslaagde implementatie is gemarkeerd.

Fooi

In een echte migratie moet u ook rooktests uitvoeren om te controleren of uw resources nog steeds correct werken. Een smoketest is een laatste controle om ervoor te zorgen dat u geen onbedoelde wijzigingen hebt aangebracht.

De middelen opschonen

Nu u de oefening hebt voltooid, kunt u de resources verwijderen zodat u er geen kosten voor in rekening worden gebracht.

Voer in de Visual Studio Code-terminal de volgende opdracht uit:

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

De resourcegroep en alle bijbehorende resources worden op de achtergrond verwijderd.

Remove-AzResourceGroup -Name ToyTruck -Force