Gyakorlat – Erőforrások konvertálása és migrálása

Befejeződött

Fontos

Ennek a gyakorlatnak az elvégzéséhez saját Azure-előfizetés szükséges, amely költségekkel járhat. Ha még nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes fiókot.

A játékok vállalata felvásárolt egy versenytársat, aki egy népszerű toy truckot hozott létre. A játékok egy Azure-ban üzemeltetett virtuális géphez csatlakoznak a belső vezérlőprogram-frissítések fogadásához. A virtuális gép összes erőforrása manuálisan lett létrehozva az Azure Portal használatával. Ebben a leckében megkezdi az erőforrások Bicep-fájlba való migrálásának folyamatát.

A folyamat során a következő feladatokat fogja elvégezni:

  • Új virtuális gép üzembe helyezése az Azure Portal használatával.
  • Exportálja a virtuálisgép-erőforrásokat egy JSON-sablonba.
  • Bontsa le a JSON-sablont a Bicep-be.
  • Hozzon létre egy új Bicep-fájlt, és helyezze át az erőforrásokat a bontott sablonból.

Ez a gyakorlat a Visual Studio Code Bicep-bővítményét használja. Telepítse ezt a bővítményt a Visual Studio Code-ban.

Virtuális gép létrehozása az Azure Portal használatával

A példaforgatókönyvben szereplő helyzet szimulálásához először üzembe kell helyeznie egy virtuális gépet az Azure Portal használatával.

  1. Jelentkezzen be az Azure Portalra.

  2. Az Azure kezdőlapján, az Azure-szolgáltatások alatt válassza az Erőforrás létrehozása lehetőséget:

    Képernyőkép az Azure Portalról. Az Erőforrás létrehozása lehetőség ki van emelve.

    Az Azure Marketplace megjelenik az Erőforrás létrehozása panelen.

  3. Az Ubuntu Server 20.04 LTS alatt válassza a Létrehozás:

    Képernyőkép az Azure Marketplace-ről. Az Ubuntu Server 20.04 LTS alatt a Létrehozás hivatkozás ki van emelve.

    Fontos

    Ha nem látja az Ubuntu Server 20.04 LTS-t, lépjen közvetlenül az Ubuntu Server 20.04 LTS-hez az Azure Marketplace-en.

  4. Az Alapszintű beállítások lapon adja meg az alábbi értékeket minden beállításhoz. Használja az összes többi beállítás alapértelmezett beállításait.

    Beállítás Érték
    Projekt részletei
    Erőforráscsoport Válassza az Új létrehozása lehetőséget, és írja be a ToyTruckot
    Példány részletei
    Virtuális gép neve ToyTruckServer
    Régió (USA) USA 3. nyugati régiója
    Rendelkezésre állási beállítások Nem szükséges infrastruktúra-redundancia
    Kép Ubuntu Server 20.04 LTS – x64 Gen2
    Méret Standard_D2s_v3
    Rendszergazdai fiók
    Hitelesítés típusa Jelszó
    Felhasználónév toytruckadmin
    Jelszó Jelszó megadása
    Bejövő portszabályok
    Nyilvános bejövő portok Egyik sem
  5. A Felügyelet lapon győződjön meg arról, hogy az automatikus leállítás engedélyezése nincs kiválasztva.

  6. Válassza a Felülvizsgálat és létrehozás lehetőséget. Az Azure ellenőrzi a beállításokat. Előfordulhat, hogy a képkövetelményektől függően további információkat kell megadnia vagy kiválasztania.

  7. Válassza a Létrehozás lehetőséget a virtuális gép üzembe helyezéséhez és létrehozásához.

    Az Azure Portal megjeleníti az üzembe helyezést, amíg folyamatban van.

  8. Ha az üzembe helyezés befejeződött, válassza ki az erőforráscsoport nevét az erőforráscsoport megnyitásához:

    Az üzembe helyezést bemutató Azure Portal képernyőképe. Az erőforráscsoport neve ki van emelve.

    Az erőforráscsoport most már tartalmazza a virtuális gépet és annak függőségeit:

    Az erőforráscsoportot megjelenítő Azure Portal képernyőképe.

Az erőforráscsoport tartalmának exportálása JSON-sablonba

  1. A bal oldali menü Automation területén válassza az Exportálás sablont:

    Képernyőkép az Azure Portalról, amely az Erőforráscsoport panel Exportálás sablonmenüelemét jeleníti meg.

    JSON-sablon jön létre. A folyamat befejezése egy-két percet is igénybe vehet.

  2. Válassza a Letöltés gombot:

    Képernyőkép az Azure Portalról, amelyen az exportált erőforráscsoport JSON-sablonja látható, és a Letöltés gomb ki van emelve.

    A JSON-sablont és a paraméterfájlt a rendszer .zip fájlként tölti le a számítógépre.

  3. Bontsa ki a fájlt egy könnyen elérhető mappába, például az asztalra.

  4. Nyissa meg a Visual Studio Code-ot.

A helyi környezet előkészítése

  1. Válassza a Terminál menü Új terminál pontját. A terminálablak általában a képernyő alsó felében nyílik meg.

  2. Ha a terminálablak jobb oldalán látható rendszerhéj bash, a megfelelő rendszerhéj nyitva van, és a következő szakaszra ugorhat.

    Képernyőkép a Visual Studio Code terminálablakáról, amelyen a bash lehetőség látható.

  3. Ha nem bash rendszerhéj jelenik meg, válassza a rendszerhéj legördülő nyilat, majd válassza az Azure Cloud Shell (Bash) lehetőséget.

    Képernyőkép a Visual Studio Code terminálablakáról, amelyen megjelenik a terminálhéj legördülő listája, és a Git Bash Alapértelmezett elem van kiválasztva.

  4. A terminálhéjak listájában válassza a bash lehetőséget.

    Képernyőkép a Visual Studio Code terminálablakáról, amelyen a bash terminál van kiválasztva.

  5. A terminálban lépjen arra a könyvtárra, ahová a sablont mentette. Ha például a sablont a sablonok mappájába mentette, használhatja ezt a parancsot:

    cd templates
    

A Bicep telepítése

Futtassa a következő parancsot a Bicep legújabb verziójának biztosításához:

az bicep install && az bicep upgrade
  1. Válassza a Terminál menü Új terminál pontját. A terminálablak általában a képernyő alsó felében nyílik meg.

  2. Ha a terminálablak jobb oldalán látható rendszerhéj PowerShell vagy pwsh, a megfelelő rendszerhéj nyitva van, és a következő szakaszra ugorhat.

    Képernyőkép a Visual Studio Code terminálablakáról, amelyen megjelenik a pwsh lehetőség a rendszerhéj legördülő listájában.

  3. Ha nem PowerShell vagy pwsh rendszerhéj jelenik meg, válassza a rendszerhéj legördülő nyilat, majd válassza a PowerShellt.

    Képernyőkép a Visual Studio Code terminálablakáról, amelyen megjelenik a terminálhéj legördülő listája és a PowerShell.

  4. A terminálhéjak listájában válassza a PowerShellt vagy a pwsh-t.

    Képernyőkép a Visual Studio Code terminálablakáról, amelyen a PowerShell-terminál van kiválasztva.

  5. A terminálban lépjen arra a könyvtárra, ahová a sablont mentette. Ha például a sablont a sablonok mappájába mentette, használhatja ezt a parancsot:

    Set-Location -Path templates
    

A Bicep parancssori felület telepítése

A Bicep Azure PowerShellből való használatához telepítse a Bicep CLI-t.

A JSON-sablon felbontása a Bicep-hez

decompile A parancs használatával hozzon létre egy Bicep-fájlt a sablonból:

az bicep decompile --file template.json

A dekomplikálandó művelet az alábbihoz hasonló figyelmeztetést generál:

WARNING: Decompilation is a best-effort process, as there is no guaranteed mapping from ARM JSON
 to Bicep.

You might need to fix warnings and errors in the generated bicep file(s), or decompilation might fail
 entirely if an accurate conversion is not possible.

If you would like to report any issues or inaccurate conversions,
please see https://github.com/Azure/bicep/issues.

decompile A parancs használatával hozzon létre egy Bicep-fájlt a sablonból:

bicep decompile template.json

A dekomplikálandó művelet az alábbihoz hasonló figyelmeztetést generál:

WARNING: Decompilation is a best-effort process, as there is no guaranteed mapping from ARM JSON
 to Bicep.

You might need to fix warnings and errors in the generated bicep file(s), or decompilation might fail
 entirely if an accurate conversion is not possible.

If you would like to report any issues or inaccurate conversions,
please see https://github.com/Azure/bicep/issues.

A kibontott Bicep-fájl vizsgálata

Nyissa meg a template.bicep fájlt a Visual Studio Code-ban, és olvassa át. Figyelje meg, hogy ez egy érvényes Bicep-fájl, de van néhány problémája, például:

  • A paramétereknek és erőforrásoknak adott szimbolikus nevek aláhúzásjeleket tartalmaznak, és nem könnyű megérteni őket.
  • A location tulajdonság az összes erőforrás-definícióban szigorúan kódolt.
  • A sablon olyan rögzített értékeket tartalmaz, amelyeknek paramétereknek kell lenniük, vagy az Azure-nak automatikusan be kell állítania.

Ezeket a problémákat a modul többi részében kijavíthatja.

Új Bicep-fájl létrehozása

  1. A Visual Studio Code-ban hozzon létre egy main.bicep nevű új fájlt.

  2. Mentse az üres fájlt, hogy a Visual Studio Code betöltse a Bicep-eszközt.

    Választhatja a Fájlmentés>másként lehetőséget, vagy a Ctrl+S billentyűkombinációt a Windowsban (⌘+S macOS rendszeren).

  3. Ossza fel a szerkesztőt, hogy mindkét fájlt egyszerre láthassa (a bal oldali panelen a template.bicep fájlt, a jobb oldali panelen pedig a main.bicep fájlt).

    1. Válassza a main.bicep lapot.
    2. Válassza a Szerkesztő>elrendezésének>jobb oldali felosztása lehetőséget a main.bicep lap jobb oldali panelen való megnyitásához.
    3. Zárja be a main.bicep lapot a bal oldali panelen.

    Képernyőkép az osztott Visual Studio Code-szerkesztőről, amely a bal oldali panelen a sablon pont bicep-fájlját és a jobb oldali panel fő pont bicep-fájlját jeleníti meg.

Minden elem másolása az új Bicep-fájlba

  1. Másolja a template.bicep fájlból elnevezett networkSecurityGroups_ToyTruckServer_nsg_name_resource erőforrást a main.bicep fájlba.

    A másolás során vegye figyelembe, hogy a securityRules tulajdonság üres. A modul későbbi részében újra kell dolgoznia a fájlt a redundáns tulajdonságok eltávolításához.

  2. A Visual Studio Code hibát jelez, mert a networkSecurityGroups_ToyTruckServer_nsg_name paraméter hiányzik:

    Képernyőkép a Visual Studio Code-szerkesztőről, amely az áttelepített erőforrást mutatja, és egy elemleírás a hiányzó paraméter miatt hibaüzenetet jelenít meg.

    Másolja a paramétert a main.bicep fájlba.

  3. Ismételje meg a folyamatot a következő erőforrásokkal és a hozzájuk tartozó paraméterekkel:

    • publicIPAddresses_ToyTruckServer_ip_name_resource
    • virtualMachines_ToyTruckServer_name_resource
    • virtualNetworks_ToyTruck_vnet_name_resource
    • virtualNetworks_ToyTruck_vnet_name_default
    • networkInterfaces_toytruckserver890_name_resource

    Feljegyzés

    Az üzemelő példány erőforrásainak neve eltérhet az itt felsorolt erőforrásoktól. Keresse meg azokat az erőforrásokat, amelyek nevei közel állnak ezekhez a nevekhez.

    Az egyes erőforrások másolása során vizsgálja meg annak tulajdonságait. A modul későbbi részében frissíteni fogja az egyes erőforrások tulajdonságait és konfigurációját, hogy megfeleljenek a Bicep ajánlott eljárásainak.

    Tipp.

    Saját sablonok konvertálása vagy exportálása során frissítheti az erőforrásokat, hogy azok másolása során kövesse az ajánlott eljárásokat. Ebben a modulban külön frissítjük az erőforrásokat, hogy könnyebben megérthesse a migrálási folyamat egyes fázisait.

Hiányzó erőforrások keresése

  1. Az Azure Portalon nyissa meg a ToyTruck erőforráscsoportot.

  2. Tekintse át az erőforrások listáját, és hasonlítsa össze a Bicep-fájlban lévő erőforrások listájával. Figyelje meg, hogy az erőforráscsoport olyan lemezerőforrást resource tartalmaz, amely nincs definiálva a Bicep-fájlban:

    Képernyőkép az Azure Portalról, amely az erőforráscsoportot jeleníti meg, kiemelve a lemezerőforrást.

    Ha a Bicepben virtuális gépekkel dolgozik, nem kell explicit módon meghatároznia a felügyelt lemezerőforrást. Ehelyett definiálja a virtuális gép tulajdonságait, és az Azure automatikusan létrehozza a felügyelt lemezt. Ebben a példában nem kell aggódnia amiatt, hogy a lemezerőforrás nincs definiálva a Bicep-fájlban.

A sablon ellenőrzése

A migrálási fázis végén a main.bicep fájlnak az alábbi példához hasonlóan kell kinéznie:

param virtualNetworks_ToyTruck_vnet_name string = 'ToyTruck-vnet'
param virtualMachines_ToyTruckServer_name string = 'ToyTruckServer'
param networkInterfaces_toytruckserver154_name string = 'toytruckserver154'
param publicIPAddresses_ToyTruckServer_ip_name string = 'ToyTruckServer-ip'
param networkSecurityGroups_ToyTruckServer_nsg_name string = 'ToyTruckServer-nsg'

resource networkSecurityGroups_ToyTruckServer_nsg_name_resource 'Microsoft.Network/networkSecurityGroups@2022-05-01' = {
  name: networkSecurityGroups_ToyTruckServer_nsg_name
  location: 'westus3'
  properties: {
    securityRules: []
  }
}

resource publicIPAddresses_ToyTruckServer_ip_name_resource 'Microsoft.Network/publicIPAddresses@2022-05-01' = {
  name: publicIPAddresses_ToyTruckServer_ip_name
  location: 'westus3'
  sku: {
    name: 'Standard'
    tier: 'Regional'
  }
  properties: {
    ipAddress: '1.2.3.4'
    publicIPAddressVersion: 'IPv4'
    publicIPAllocationMethod: 'Static'
    idleTimeoutInMinutes: 4
    ipTags: []
  }
}

resource virtualMachines_ToyTruckServer_name_resource 'Microsoft.Compute/virtualMachines@2022-08-01' = {
  name: virtualMachines_ToyTruckServer_name
  location: 'westus3'
  properties: {
    hardwareProfile: {
      vmSize: 'Standard_D2s_v3'
    }
    storageProfile: {
      imageReference: {
        publisher: 'canonical'
        offer: '0001-com-ubuntu-server-focal'
        sku: '20_04-lts-gen2'
        version: 'latest'
      }
      osDisk: {
        osType: 'Linux'
        name: '${virtualMachines_ToyTruckServer_name}_disk1_23e6a144c4ea4049b3e2be24b78a9e81'
        createOption: 'FromImage'
        caching: 'ReadWrite'
        managedDisk: {
          storageAccountType: 'Premium_LRS'
          id: resourceId('Microsoft.Compute/disks', '${virtualMachines_ToyTruckServer_name}_disk1_23e6a144c4ea4049b3e2be24b78a9e81')
        }
        deleteOption: 'Delete'
        diskSizeGB: 30
      }
      dataDisks: []
    }
    osProfile: {
      computerName: virtualMachines_ToyTruckServer_name
      adminUsername: 'toytruckadmin'
      linuxConfiguration: {
        disablePasswordAuthentication: false
        provisionVMAgent: true
        patchSettings: {
          patchMode: 'ImageDefault'
          assessmentMode: 'ImageDefault'
        }
        enableVMAgentPlatformUpdates: false
      }
      secrets: []
      allowExtensionOperations: true
      requireGuestProvisionSignal: true
    }
    networkProfile: {
      networkInterfaces: [
        {
          id: networkInterfaces_toytruckserver154_name_resource.id
          properties: {
            deleteOption: 'Detach'
          }
        }
      ]
    }
    diagnosticsProfile: {
      bootDiagnostics: {
        enabled: true
      }
    }
  }
}

resource virtualNetworks_ToyTruck_vnet_name_resource 'Microsoft.Network/virtualNetworks@2022-05-01' = {
  name: virtualNetworks_ToyTruck_vnet_name
  location: 'westus3'
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'default'
        id: virtualNetworks_ToyTruck_vnet_name_default.id
        properties: {
          addressPrefix: '10.0.0.0/24'
          delegations: []
          privateEndpointNetworkPolicies: 'Disabled'
          privateLinkServiceNetworkPolicies: 'Enabled'
        }
        type: 'Microsoft.Network/virtualNetworks/subnets'
      }
    ]
    virtualNetworkPeerings: []
    enableDdosProtection: false
  }
}

resource virtualNetworks_ToyTruck_vnet_name_default 'Microsoft.Network/virtualNetworks/subnets@2022-05-01' = {
  name: '${virtualNetworks_ToyTruck_vnet_name}/default'
  properties: {
    addressPrefix: '10.0.0.0/24'
    delegations: []
    privateEndpointNetworkPolicies: 'Disabled'
    privateLinkServiceNetworkPolicies: 'Enabled'
  }
  dependsOn: [
    virtualNetworks_ToyTruck_vnet_name_resource
  ]
}

resource networkInterfaces_toytruckserver154_name_resource 'Microsoft.Network/networkInterfaces@2022-05-01' = {
  name: networkInterfaces_toytruckserver154_name
  location: 'westus3'
  kind: 'Regular'
  properties: {
    ipConfigurations: [
      {
        name: 'ipconfig1'
        id: '${networkInterfaces_toytruckserver154_name_resource.id}/ipConfigurations/ipconfig1'
        etag: 'W/"6a38849d-bd59-4eae-856e-4909f7ac1fac"'
        type: 'Microsoft.Network/networkInterfaces/ipConfigurations'
        properties: {
          provisioningState: 'Succeeded'
          privateIPAddress: '10.0.0.4'
          privateIPAllocationMethod: 'Dynamic'
          publicIPAddress: {
            name: 'ToyTruckServer-ip'
            id: publicIPAddresses_ToyTruckServer_ip_name_resource.id
            properties: {
              provisioningState: 'Succeeded'
              resourceGuid: '07079685-0980-4ddf-acc3-3c8797c94b9a'
              publicIPAddressVersion: 'IPv4'
              publicIPAllocationMethod: 'Dynamic'
              idleTimeoutInMinutes: 4
              ipTags: []
              ipConfiguration: {
                id: '${networkInterfaces_toytruckserver154_name_resource.id}/ipConfigurations/ipconfig1'
              }
              deleteOption: 'Detach'
            }
            type: 'Microsoft.Network/publicIPAddresses'
            sku: {
              name: 'Basic'
              tier: 'Regional'
            }
          }
          subnet: {
            id: virtualNetworks_ToyTruck_vnet_name_default.id
          }
          primary: true
          privateIPAddressVersion: 'IPv4'
        }
      }
    ]
    dnsSettings: {
      dnsServers: []
    }
    enableAcceleratedNetworking: true
    enableIPForwarding: false
    disableTcpStateTracking: false
    networkSecurityGroup: {
      id: networkSecurityGroups_ToyTruckServer_nsg_name_resource.id
    }
    nicType: 'Standard'
  }
}

Feljegyzés

A sablonban néhány dolog eltérhet, beleértve a szimbolikus neveket, az API-verziókat és az IP-címeket. Nem gond. Ezeket az eltéréseket a modul későbbi részében fogja megoldani.

Létrehozott egy kezdeti Bicep-fájlt, amely az erőforrásokat jelöli. A Bicep-fájl nem jól strukturált, és nem követi az ajánlott eljárásokat. A következő leckében megtanulhatja, hogyan javíthatja a migrált sablon minőségét.

Tipp.

Ha a Githez hasonló verziókövetési rendszert használ, akkor ez jó alkalom a munka véglegesítésére.

Miután ellenőrizte a main.bicep fájlt, zárja be a template.bicep fájlt.