Gyakorlat – Erőforrások konvertálása és migrálása
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.
Jelentkezzen be az Azure Portalra.
Az Azure kezdőlapján, az Azure-szolgáltatások alatt válassza az Erőforrás létrehozása lehetőséget:
Az Azure Marketplace megjelenik az Erőforrás létrehozása panelen.
Az Ubuntu Server 20.04 LTS alatt válassza a Létrehozás:
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.
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 A Felügyelet lapon győződjön meg arról, hogy az automatikus leállítás engedélyezése nincs kiválasztva.
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.
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.
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 erőforráscsoport most már tartalmazza a virtuális gépet és annak függőségeit:
Az erőforráscsoport tartalmának exportálása JSON-sablonba
A bal oldali menü Automation területén válassza az Exportálás sablont:
JSON-sablon jön létre. A folyamat befejezése egy-két percet is igénybe vehet.
Válassza a Letöltés gombot:
A JSON-sablont és a paraméterfájlt a rendszer .zip fájlként tölti le a számítógépre.
Bontsa ki a fájlt egy könnyen elérhető mappába, például az asztalra.
Nyissa meg a Visual Studio Code-ot.
A helyi környezet előkészítése
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.
Ha a terminálablak jobb oldalán látható rendszerhéj bash, a megfelelő rendszerhéj nyitva van, és a következő szakaszra ugorhat.
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.
A terminálhéjak listájában válassza a bash lehetőséget.
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
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.
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.
Ha nem PowerShell vagy pwsh rendszerhéj jelenik meg, válassza a rendszerhéj legördülő nyilat, majd válassza a PowerShellt.
A terminálhéjak listájában válassza a PowerShellt vagy a pwsh-t.
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
A Visual Studio Code-ban hozzon létre egy main.bicep nevű új fájlt.
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).
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).
- Válassza a main.bicep lapot.
- 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.
- Zárja be a main.bicep lapot a bal oldali panelen.
Minden elem másolása az új Bicep-fájlba
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.A Visual Studio Code hibát jelez, mert a
networkSecurityGroups_ToyTruckServer_nsg_name
paraméter hiányzik:Másolja a paramétert a main.bicep fájlba.
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
Az Azure Portalon nyissa meg a ToyTruck erőforráscsoportot.
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: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.