Ćwiczenie — testowanie i wdrażanie przekonwertowanego szablonu

Ukończone

Utworzono plik Bicep reprezentujący maszynę wirtualną, na której są uruchamiane usługi ciężarówki. Przed zatwierdzeniem korzystania z pliku w potokach należy sprawdzić, czy plik dokładnie reprezentuje bieżące środowisko platformy Azure. W tym module przetestujesz, a następnie wdrożysz plik Bicep na istniejących zasobach platformy Azure.

Podczas tego procesu wykonasz następujące zadania:

  • Uruchom polecenie analizy co-jeżeli, aby określić skutki wdrożenia.
  • Wdróż szablon i sprawdź stan wdrożenia.

Uruchamianie analizy warunkowej

Uruchom polecenie analizy co-jeżeli przed wdrożeniem nowego pliku Bicep. To polecenie sprawdza, czy plik Bicep jest prawidłowy. Polecenie udostępnia również listę zmian, które wystąpią w środowisku platformy Azure podczas wdrażania pliku.

Uwaga

W rzeczywistej migracji należy uruchomić polecenie analizy warunkowej względem środowisk produkcyjnych i nieprodukcyjnych z odpowiednim zestawem parametrów dla każdego środowiska. Dzięki temu można wykryć wszelkie różnice w konfiguracji, które mogły nie zostać odkryte. W tym przykładzie używasz pojedynczego środowiska, więc uruchamiasz tylko operację analizy warunkowej względem tego środowiska.

Uwaga

Tryb wdrażania używany dla polecenia analizy co-jeżeli i kolejne wdrożenie szablonu może powodować ryzyko. Tryb ukończenia usuwa wszystkie zasoby zdefiniowane w grupie zasobów, które nie są określone w szablonie. Często jest to dobra praktyka, ponieważ pomaga upewnić się, że kod Bicep został ukończony. Jednak ta opcja wiąże się z pewnym ryzykiem, ponieważ w migracji mógł zostać pominięty zasób.

W tym ćwiczeniu uruchomisz polecenie analizy co-jeżeli przy użyciu trybu pełnego, aby wykryto wszystkie pominięte zasoby. Następnie uruchom wdrożenie w trybie przyrostowym.

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Po wyświetleniu monitu wprowadź bezpieczne hasło dla wartości parametru virtualMachineAdminPassword .

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Po wyświetleniu monitu wprowadź bezpieczne hasło dla wartości parametru virtualMachineAdminPassword .

Przeglądanie danych wyjściowych analizy co-jeżeli

Przejrzyj dane wyjściowe analizy co-jeżeli, które wyglądają jak w poniższym przykładzie:

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.

Dane wyjściowe zawierają trzy ważne informacje. Przyjrzyjmy się każdemu z nich.

  • Polecenie analizy co-jeżeli wykrywa, że dysk zarządzany zostanie usunięty. Te dane wyjściowe nie są dokładne. Dyski zarządzane są tworzone automatycznie podczas tworzenia maszyn wirtualnych. Mimo że dyski zarządzane są wyświetlane na liście zasobów do usunięcia, maszyna wirtualna uniemożliwia ich usunięcie. Jednak przyjęcie ostrożnego podejścia jest zawsze zalecane, więc w następnych krokach uruchomisz rzeczywiste wdrożenie w trybie przyrostowym, aby ograniczyć ryzyko wystąpienia błędu.

  • Polecenie analizy co-jeżeli wykrywa, że privateIPAddress właściwość networkInterface zasobu została usunięta. Ten wynik jest ok, ponieważ usunięto tę właściwość celowo. Właściwość jest ustawiona privateIPAllocationMethod na Dynamicwartość , więc usunięcie privateIPAddress właściwości nie będzie miało żadnego wpływu, mimo że jest to zmiana.

  • Polecenie analizy co-jeżeli wykrywa, że zostaną usunięte dwie właściwości publicIPAddress networkInterface zasobu. Dodasz te właściwości, aby rozwiązać ten problem.

Aktualizowanie szablonu

W pliku main.bicep zaktualizuj networkInterface zasób, aby uwzględnić właściwości parametrów publicIPAddress deleteOption i 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'
  }
}

Uruchom ponownie polecenie analizy co-jeżeli

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Po wyświetleniu monitu wprowadź bezpieczne hasło dla wartości parametru virtualMachineAdminPassword .

  3. Po zakończeniu operacji przejrzyj dane wyjściowe. Dane wyjściowe będą wyglądać podobnie do poniższego przykładu. Właściwości deleteOption i sku nie są wyświetlane w danych wyjściowych.

    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. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Po wyświetleniu monitu wprowadź bezpieczne hasło dla wartości parametru virtualMachineAdminPassword .

  3. Po zakończeniu operacji przejrzyj dane wyjściowe. Dane wyjściowe będą wyglądać podobnie do poniższego przykładu. Właściwości deleteOption i sku nie są wyświetlane w danych wyjściowych.

    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.
    

Wdrażanie szablonu

Wiesz, że plik Bicep jest prawidłowy, a operacja analizy co-jeżeli wskazuje, że szablon udostępnia oczekiwane wyniki. Teraz możesz przystąpić do wdrażania szablonu. Jeśli ten krok zakończy się pomyślnie, nie powinien być widoczny żaden efekt.

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Po wyświetleniu monitu wprowadź bezpieczne hasło dla wartości parametru virtualMachineAdminPassword .

    Wdrożenie zakończy się pomyślnie w ciągu kilku sekund.

  3. W witrynie Azure Portal otwórz grupę zasobów. Wybierz pozycję 2 Powodzenie , aby wyświetlić listę wdrożeń:

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

    Wdrożenie zakończyło się pomyślnie:

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

  1. W terminalu programu Visual Studio Code uruchom następujące polecenie:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Po wyświetleniu monitu wprowadź bezpieczne hasło dla wartości parametru virtualMachineAdminPassword .

    Wdrożenie zakończy się pomyślnie w ciągu kilku sekund.

  3. W witrynie Azure Portal otwórz grupę zasobów. Wybierz link 2 Powodzenie, aby wyświetlić listę wdrożeń:

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

    Wdrożenie zakończyło się pomyślnie:

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

Napiwek

W rzeczywistej migracji należy również uruchomić testy weryfikacyjne kompilacji, aby sprawdzić, czy zasoby nadal działają prawidłowo. Test weryfikacyjny kompilacji to ostateczna kontrola, aby upewnić się, że nie wprowadzono niezamierzonych zmian.

Oczyszczanie zasobów

Po ukończeniu ćwiczenia możesz usunąć zasoby, aby nie były naliczane opłaty.

W terminalu programu Visual Studio Code uruchom następujące polecenie:

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

Grupa zasobów i wszystkie jej zasoby są usuwane w tle.

Remove-AzResourceGroup -Name ToyTruck -Force