Cvičení – testování a nasazení převedené šablony

Dokončeno

Vytvořili jste soubor Bicep, který představuje virtuální počítač, na kterém běží služby hračkového náklaďáku. Předtím, než se zavážete k použití souboru v datových potrubích, musíte ověřit, že soubor přesně představuje vaše aktuální prostředí Azure. V tomto modulu otestujete a pak nasadíte soubor Bicep přes existující prostředky Azure.

Během tohoto procesu provedete následující úlohy:

  • Spuštěním příkazu what-if určete účinky nasazení.
  • Nasaďte šablonu a ověřte stav nasazení.

Spustit hypotetickou simulaci

Před nasazením nového souboru Bicep spusťte příkaz what-if. Tento příkaz ověří platnost souboru Bicep. Příkaz také poskytuje seznam změn, které se projeví ve vašem prostředí Azure při nasazení souboru.

Poznámka

Při skutečné migraci byste měli spustit příkaz what-if pro produkční a neprodukční prostředí s odpovídající sadou parametrů pro každé prostředí. Tímto způsobem zjistíte případné rozdíly v konfiguraci, které jste nemuseli odhalit. V tomto příkladu použijete jedno prostředí, takže spustíte pouze operaci "co když" s tímto prostředím.

Opatrnost

Režim nasazení, který použijete pro příkaz what-if, a následné nasazení šablony může představovat riziko. Úplný režim odstraní všechny prostředky definované ve skupině prostředků, které nejsou zadané v šabloně. Často je to dobrý postup, protože vám pomůže zajistit, aby byl váš kód Bicep úplný. Tato možnost ale přináší určité riziko, protože jste při migraci mohli přehlédnout některý prostředek.

V tomto cvičení spustíte příkaz "co kdyby" v úplném režimu, abyste zjistili všechny prostředky, které jste mohli přehlédnout. Pak nasazení spustíte v přírůstkovém režimu.

  1. V terminálu editoru Visual Studio Code spusťte následující příkaz:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Po zobrazení výzvy zadejte bezpečné heslo pro hodnotu parametru virtualMachineAdminPassword.

  1. V terminálu editoru Visual Studio Code spusťte následující příkaz:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Po zobrazení výzvy zadejte bezpečné heslo pro hodnotu parametru virtualMachineAdminPassword.

Kontrola výstupu z analýzy "co kdyby"

Prohlédněte si výstup analýzy "co kdyby", který vypadá, jako v následujícím příkladu:

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.

Výstup obsahuje tři důležité informace. Pojďme se na každý z nich podívat.

  • Příkaz "co kdyby" zjistí, že se spravovaný disk odstraní. Tento výstup není přesný. Spravované disky se vytvoří automaticky při vytváření virtuálních počítačů. I když se spravované disky zobrazují v seznamu prostředků, které se mají odstranit, virtuální počítač brání jejich odstranění. Přijetí opatrného přístupu je však vždy vhodné, takže v dalších krocích spustíte skutečné nasazení v přírůstkovém režimu, abyste zmírnili riziko, že se něco pokazí.

  • Příkaz what-if zjistí, že je odebrána vlastnost privateIPAddress prostředku networkInterface. Tento výsledek je v pořádku, protože jste tuto vlastnost záměrně odebrali. Vlastnost privateIPAllocationMethod je nastavená na Dynamic, takže odebrání vlastnosti privateIPAddress nebude mít žádný vliv, i když se jedná o změnu.

  • Příkaz what-if zjistí, že se odstraní dvě vlastnosti publicIPAddress prostředku networkInterface. Tyto vlastnosti přidáte, abyste problém vyřešili.

Aktualizace šablony

V main.bicepaktualizujte prostředek networkInterface tak, aby zahrnoval vlastnosti publicIPAddress pro deleteOption a 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'
  }
}

Spusťte příkaz what-if znovu.

  1. V terminálu editoru Visual Studio Code spusťte následující příkaz:

    az deployment group what-if \
      --mode Complete \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Po zobrazení výzvy zadejte bezpečné heslo pro hodnotu parametru virtualMachineAdminPassword.

  3. Po dokončení operace zkontrolujte výstup. Výstup bude vypadat jako v následující ukázce. Ve výstupu se nezobrazují vlastnosti deleteOption a sku.

    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. V terminálu editoru Visual Studio Code spusťte následující příkaz:

    New-AzResourceGroupDeployment `
      -WhatIf `
      -Mode Complete `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Po zobrazení výzvy zadejte bezpečné heslo pro hodnotu parametru virtualMachineAdminPassword.

  3. Po dokončení operace zkontrolujte výstup. Výstup bude vypadat jako v následující ukázce. Ve výstupu se nezobrazují vlastnosti deleteOption a sku.

    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.
    

Nasazení šablony

Víte, že váš soubor Bicep je platný a operace "co kdyby" indikuje, že vaše šablona poskytuje očekávané výsledky. Teď jste připraveni k nasazení šablony. Pokud tento krok proběhne úspěšně, neměl by se zobrazit žádný efekt.

  1. V terminálu editoru Visual Studio Code spusťte následující příkaz:

    az deployment group create \
      --resource-group ToyTruck \
      --template-file main.bicep \
      --parameters main.parameters.production.json
    
  2. Po zobrazení výzvy zadejte bezpečné heslo pro hodnotu parametru virtualMachineAdminPassword.

    Během několika sekund se nasazení úspěšně dokončí.

  3. Na webu Azure Portal otevřete skupinu prostředků. Vyberte 2 Úspěšné a zobrazte seznam nasazení:

    Snímek obrazovky portálu Azure, který zobrazuje skupinu prostředků. Odkaz 2 Úspěšný je zvýrazněn.

    Nasazení proběhlo úspěšně:

    snímek obrazovky webu Azure Portal znázorňující nasazení skupiny prostředků Úspěšné nasazení je zvýrazněné.

  1. V terminálu editoru Visual Studio Code spusťte následující příkaz:

    New-AzResourceGroupDeployment `
      -ResourceGroupName ToyTruck `
      -TemplateFile main.bicep `
      -TemplateParameterFile main.parameters.production.json
    
  2. Po zobrazení výzvy zadejte bezpečné heslo pro hodnotu parametru virtualMachineAdminPassword.

    Během několika sekund se nasazení úspěšně dokončí.

  3. Na webu Azure Portal otevřete skupinu prostředků. Výběrem odkazu 2 Úspěch zobrazte seznam nasazení:

    Snímek obrazovky Azure Portal, který zobrazuje skupinu prostředků. Zvýrazněn je odkaz

    Nasazení proběhlo úspěšně:

    snímek obrazovky webu Azure Portal znázorňující nasazení skupiny prostředků Úspěšné nasazení je zvýrazněné.

Spropitné

V reálné migraci byste také měli spustit kouřové testy, abyste ověřili, že vaše prostředky stále fungují správně. Kouřový test je konečná kontrola, která zajišťuje, že jste neudělali neúmyslné změny.

Vyčistěte prostředky

Teď, když jste cvičení dokončili, můžete odebrat prostředky, abyste za ně nemuseli platit.

V terminálu editoru Visual Studio Code spusťte následující příkaz:

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

Skupina prostředků a všechny její zdroje se odstraní na pozadí.

Remove-AzResourceGroup -Name ToyTruck -Force