Übung: Testen und Bereitstellen der konvertierten Vorlage

Abgeschlossen

Sie haben eine Bicep-Datei erstellt, die die VM darstellt, auf der die Spielzeug-Lkw-Dienste ausgeführt werden. Bevor Sie sich zur Verwendung der Datei in Ihren Pipelines entscheiden, müssen Sie überprüfen, ob die Datei Ihre aktuelle Azure-Umgebung richtig darstellt. In diesem Modul testen Sie Ihre Bicep-Datei und stellen sie dann für Ihre vorhandenen Azure-Ressourcen bereit.

Während des Prozesses führen Sie die folgenden Aufgaben aus:

  • Führen Sie den Was-wäre-wenn-Befehl aus, um die Auswirkungen Ihrer Bereitstellung zu ermitteln.
  • Stellen Sie die Vorlage bereit, und überprüfen Sie den Bereitstellungsstatus.

Ausführen von Was-wäre-wenn

Bevor Sie Ihre neue Bicep-Datei bereitstellen, führen Sie zuerst den Was-wäre-wenn-Befehl aus. Mit diesem Befehl wird überprüft, ob Ihre Bicep-Datei gültig ist. Außerdem liefert der Befehl eine Liste der Änderungen, die in Ihrer Azure-Umgebung auftreten, wenn Sie die Datei bereitstellen.

Hinweis

Bei einer echten Migration sollten Sie den Was-wäre-wenn-Befehl für Ihre Produktions- und Nicht-Produktionsumgebungen mit den entsprechenden Parametern für jede Umgebung ausführen. Dies hilft Ihnen, alle Unterschiede in der Konfiguration zu erkennen, die Sie möglicherweise nicht entdeckt haben. In diesem Beispiel verwenden Sie eine einzelne Umgebung, sodass Sie den Was-wäre-wenn-Vorgang nur für diese Umgebung ausführen.

Achtung

Der Bereitstellungsmodus, den Sie für den Was-wäre-wenn-Befehl und die nachfolgende Vorlagenbereitstellung verwenden, kann ein Risiko darstellen. Im Modus „Vollständig“ werden alle in der Ressourcengruppe definierten Ressourcen gelöscht, die nicht in Ihrer Vorlage angegeben sind. Dies ist häufig eine bewährte Methode, da Sie so sicherstellen können, dass Ihr Bicep-Code vollständig ist. Diese Option birgt jedoch ein gewisses Risiko, da Sie bei der Migration möglicherweise eine Ressource vergessen haben.

In dieser Übung führen Sie den Was-wäre-wenn-Befehl im vollständigen Modus aus, damit alle Ressourcen erkannt werden, die Sie möglicherweise übersehen haben. Anschließend führen Sie die Bereitstellung im inkrementellen Modus aus.

  1. Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Geben Sie bei entsprechender Aufforderung ein sicheres Kennwort für den virtualMachineAdminPassword-Parameterwert ein.

  1. Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Geben Sie bei entsprechender Aufforderung ein sicheres Kennwort für den virtualMachineAdminPassword-Parameterwert ein.

Überprüfen der Was-wäre-wenn-Ausgabe

Überprüfen Sie die Was-wäre-wenn-Ausgabe, die wie das folgende Beispiel aussieht:

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.

Die Ausgabe enthält drei wichtige Informationen. Sehen wir uns die einzelnen Informationen an.

  • Der Was-wäre-wenn-Befehl erkennt, dass der verwaltete Datenträger gelöscht wird. Diese Ausgabe ist nicht richtig. Verwaltete Datenträger werden automatisch erstellt, wenn Sie VMs erstellen. Obwohl verwaltete Datenträger in der Liste der zu löschenden Ressourcen angezeigt werden, verhindert die VM deren Löschung. Es ist jedoch immer ratsam, vorsichtig vorzugehen. In den nächsten Schritten führen Sie die eigentliche Bereitstellung im inkrementellen Modus durch, um das Risiko zu verringern, dass etwas schief geht.

  • Der Was-wäre-wenn-Befehl erkennt, dass die privateIPAddress-Eigenschaft der Ressource networkInterface entfernt wird. Dieses Ergebnis ist in Ordnung, da Sie diese Eigenschaft absichtlich entfernt haben. Die privateIPAllocationMethod-Eigenschaft ist als Dynamic festgelegt, sodass das Entfernen der privateIPAddress-Eigenschaft keine Auswirkungen hat, obwohl es sich um eine Änderung handelt.

  • Der Was-wäre-wenn-Befehl erkennt, dass zwei Eigenschaften für die publicIPAddress der Ressource networkInterface gelöscht werden. Sie fügen diese Eigenschaften hinzu, um das Problem zu beheben.

Aktualisieren der Vorlage

Aktualisieren Sie in der Datei main.bicep die Ressource networkInterface, um die publicIPAddress-Eigenschaften für deleteOption und sku einzuschließen:

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

Erneutes Ausführen des Was-wäre-wenn-Befehls

  1. Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Geben Sie bei entsprechender Aufforderung ein sicheres Kennwort für den virtualMachineAdminPassword-Parameterwert ein.

  3. Überprüfen Sie nach Abschluss des Vorgangs die Ausgabe. Die Ausgabe sieht in etwa wie das folgende Beispiel aus. Die Eigenschaften deleteOption und sku werden in der Ausgabe nicht angezeigt.

    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. Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Geben Sie bei entsprechender Aufforderung ein sicheres Kennwort für den virtualMachineAdminPassword-Parameterwert ein.

  3. Überprüfen Sie nach Abschluss des Vorgangs die Ausgabe. Die Ausgabe sieht in etwa wie das folgende Beispiel aus. Die Eigenschaften deleteOption und sku werden in der Ausgabe nicht angezeigt.

    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.
    

Bereitstellen der Vorlage

Sie wissen, dass Ihre Bicep-Datei gültig ist, und der Was-wäre-wenn-Vorgang hat ergeben, dass Ihre Vorlage die erwarteten Ergebnisse liefert. Sie können Ihre Vorlage jetzt bereitstellen. Wenn dieser Schritt erfolgreich ist, sollten Sie keine Auswirkungen feststellen.

  1. Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Geben Sie bei entsprechender Aufforderung ein sicheres Kennwort für den virtualMachineAdminPassword-Parameterwert ein.

    Innerhalb weniger Sekunden wird die Bereitstellung erfolgreich abgeschlossen.

  3. Öffnen Sie die Ressourcengruppe im Azure-Portal. Wählen Sie 2 erfolgreich aus, um die Liste der Bereitstellungen anzuzeigen:

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

    Die Bereitstellung war erfolgreich:

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

  1. Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Geben Sie bei entsprechender Aufforderung ein sicheres Kennwort für den virtualMachineAdminPassword-Parameterwert ein.

    Innerhalb weniger Sekunden wird die Bereitstellung erfolgreich abgeschlossen.

  3. Öffnen Sie die Ressourcengruppe im Azure-Portal. Wählen Sie den Link 2 erfolgreich aus, um die Liste der Bereitstellungen anzuzeigen:

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

    Die Bereitstellung war erfolgreich:

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

Tipp

Bei einer echten Migration sollten Sie ebenfalls Feuerproben durchführen, um sicherzustellen, dass Ihre Ressourcen weiterhin ordnungsgemäß funktionieren. Eine Feuerprobe ist eine abschließende Überprüfung, um sicherzustellen, dass Sie keine unbeabsichtigten Änderungen vorgenommen haben.

Bereinigen der Ressourcen

Nachdem Sie die Übung abgeschlossen haben, können Sie die Ressourcen entfernen, damit Ihnen dafür keine Gebühren berechnet werden.

Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

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

Die Ressourcengruppe und alle zugehörigen Ressourcen werden im Hintergrund gelöscht.

Remove-AzResourceGroup -Name ToyTruck -Force