Övning – Konvertera och migrera resurser
Viktigt!
Du behöver en egen Azure-prenumeration för att utföra den här övningen, och avgifter kan tillkomma. Om du inte redan har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Ditt leksaksföretag har förvärvat en konkurrent som skapat en populär leksaksbil. Leksakerna ansluter till en virtuell dator som finns i Azure för att ta emot uppdateringar av inbyggd programvara. Alla resurser för den virtuella datorn skapades manuellt med hjälp av Azure Portal. I den här lektionen börjar du migrera resurserna till en Bicep-fil.
Under processen utför du följande uppgifter:
- Distribuera en ny virtuell dator med hjälp av Azure Portal.
- Exportera de virtuella datorresurserna till en JSON-mall.
- Dela upp JSON-mallen till Bicep.
- Skapa en ny Bicep-fil och flytta resurserna från den dekompilerade mallen.
Den här övningen använder Bicep-tillägget för Visual Studio Code. Installera tillägget i Visual Studio Code.
Skapa en virtuell dator med hjälp av Azure Portal
Om du vill simulera situationen i exempelscenariot distribuerar du först en virtuell dator med hjälp av Azure Portal.
Logga in på Azure-portalen.
På Azures startsida går du till Azure-tjänster och väljer Skapa en resurs:
Azure Marketplace visas i fönstret Skapa en resurs .
Under Ubuntu Server 20.04 LTS väljer du Skapa:
Viktigt!
Om du inte ser Ubuntu Server 20.04 LTS går du direkt till Ubuntu Server 20.04 LTS på Azure Marketplace.
På fliken Grundläggande anger du följande värden för varje inställning. Använd standardinställningarna för alla andra inställningar.
Inställning Värde Projektinformation Resursgrupp Välj Skapa ny och ange ToyTruck Instansinformation Virtual machine name ToyTruckServer Region (USA) USA, västra 3 Tillgängliga alternativ Ingen infrastrukturredundans krävs Bild Ubuntu Server 20.04 LTS – x64 Gen2 Storlek Standard_D2s_v3 Administratörskonto Authentication type Lösenord Username toytruckadmin Lösenord Ange ett lösenord Regler för inkommande portar Offentliga inkommande portar Ingen På fliken Hantering kontrollerar du att Aktivera automatisk avstängning inte är markerat.
Välj Granska + skapa. Azure validerar dina inställningar. Du kan behöva ange eller välja mer information beroende på bildkraven.
Välj Skapa för att distribuera och skapa den virtuella datorn.
Azure Portal visar distributionen medan den pågår.
När distributionen är klar väljer du resursgruppens namn för att öppna resursgruppen:
Resursgruppen innehåller nu den virtuella datorn och dess beroenden:
Exportera resursgruppens innehåll till en JSON-mall
I den vänstra menyn, under Automation, väljer du Exportera mall:
En JSON-mall genereras. Det kan ta en minut eller två för processen att slutföras.
Välj knappen Ladda ned:
JSON-mallen och parameterfilen laddas ned till datorn som en .zip fil.
Packa upp filen till en mapp som du enkelt kan komma åt, till exempel skrivbordet.
Öppna Visual Studio Code.
Förbereda din lokala miljö
I menyn Terminal väljer du Ny terminal. Terminalfönstret öppnas vanligtvis på den nedre halvan av skärmen.
Om terminalfönstret visar bash på höger sida innebär det att rätt gränssnitt redan är öppet. Om du ser en bash shell-ikon till höger kan du välja den för att starta gränssnittet.
Om ett annat gränssnitt än bash visas väljer du listrutepilen för gränssnittet och väljer sedan Git Bash.
I terminalen går du till katalogen där du sparade mallen. Om du till exempel har sparat mallen i mallmappen kan du använda det här kommandot:
cd templates
Installera Bicep
Kör följande kommando för att se till att du har den senaste versionen av Bicep:
az bicep install && az bicep upgrade
I menyn Terminal väljer du Ny terminal. Terminalfönstret öppnas vanligtvis på den nedre halvan av skärmen.
Om terminalfönstret visar pwsh eller powershell till höger betyder det att rätt gränssnitt redan är öppet. Om du ser en PowerShell-gränssnittsikon till höger kan du också välja den för att starta gränssnittet.
Om ett annat gränssnitt än pwsh eller powershell visas väljer du listrutepilen shell och väljer sedan PowerShell.
I terminalen går du till katalogen där du sparade mallen. Om du till exempel har sparat mallen i mallmappen kan du använda det här kommandot:
Set-Location -Path templates
Installera Bicep CLI
Om du vill använda Bicep från Azure PowerShell installerar du Bicep CLI.
Dela upp JSON-mallen till Bicep
decompile
Använd kommandot för att skapa en Bicep-fil från mallen:
az bicep decompile --file template.json
Dekompileringsåtgärden genererar en varning som liknar den här:
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
Använd kommandot för att skapa en Bicep-fil från mallen:
bicep decompile template.json
Dekompileringsåtgärden genererar en varning som liknar den här:
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.
Granska den dekompilerade Bicep-filen
Öppna filen template.bicep i Visual Studio Code och läs igenom den. Observera att det är en giltig Bicep-fil, men den har några problem, bland annat:
- De symboliska namn som ges till parametrar och resurser innehåller understreck och är inte lätta att förstå.
- Egenskapen
location
är hårdkodad i alla resursdefinitioner. - Mallen innehåller hårdkodade värden som antingen ska vara parametrar eller ställas in automatiskt av Azure.
Du löser de här problemen under resten av den här modulen.
Skapa en ny Bicep-fil
I Visual Studio Code skapar du en ny fil med namnet main.bicep.
Spara den tomma filen så att Visual Studio Code läser in Bicep-verktyget.
Du kan antingen välja Spara som-fil> eller välja Ctrl+S i Windows (⌘+S i macOS).
Dela upp redigeraren så att du kan se båda filerna samtidigt ( filen template.bicep i det vänstra fönstret och filen main.bicep i den högra rutan).
- Välj fliken main.bicep .
- Välj Visa>redigerarens layout>dela höger för att öppna fliken main.bicep i det högra fönstret.
- Stäng fliken main.bicep i den vänstra rutan.
Kopiera varje element till din nya Bicep-fil
Kopiera resursen med namnet
networkSecurityGroups_ToyTruckServer_nsg_name_resource
från filen template.bicep till filen main.bicep .Observera att egenskapen är tom när du kopierar den
securityRules
. Senare i den här modulen omstrukturerar du filen för att ta bort redundanta egenskaper.Visual Studio Code anger ett fel eftersom parametern
networkSecurityGroups_ToyTruckServer_nsg_name
saknas:Kopiera parametern till filen main.bicep .
Upprepa processen med följande resurser och deras associerade parametrar:
publicIPAddresses_ToyTruckServer_ip_name_resource
virtualMachines_ToyTruckServer_name_resource
virtualNetworks_ToyTruck_vnet_name_resource
virtualNetworks_ToyTruck_vnet_name_default
networkInterfaces_toytruckserver890_name_resource
Kommentar
Namnen på resurserna i distributionen kan skilja sig från de resurser som anges här. Leta reda på de resurser som har namn som ligger nära dessa namn.
När du kopierar varje resurs kontrollerar du dess egenskaper. Senare i den här modulen uppdaterar du varje resurss egenskaper och konfiguration så att de överensstämmer med Biceps metodtips.
Dricks
När du konverterar eller exporterar dina egna mallar kan du uppdatera resurserna så att de följer metodtipsen när du kopierar dem. I den här modulen uppdaterar vi resurserna separat för att göra det enklare att förstå varje fas i migreringsprocessen.
Sök efter resurser som saknas
Öppna resursgruppen ToyTruck i Azure Portal.
Granska listan över resurser och jämför den med listan över resurser i Bicep-filen. Observera att resursgruppen innehåller en diskresurs som inte har definierats som en
resource
i Bicep-filen:När du arbetar med virtuella datorer i Bicep behöver du inte uttryckligen definiera den hanterade diskresursen. I stället definierar du egenskaperna för den virtuella datorn och Azure skapar den hanterade disken automatiskt. I det här exemplet behöver du inte oroa dig för att diskresursen inte har definierats i Bicep-filen.
Verifiera mallen
I slutet av migreringsfasen bör filen main.bicep se ut ungefär som i det här exemplet:
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@2024-05-01' = {
name: networkSecurityGroups_ToyTruckServer_nsg_name
location: 'westus3'
properties: {
securityRules: []
}
}
resource publicIPAddresses_ToyTruckServer_ip_name_resource 'Microsoft.Network/publicIPAddresses@2024-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@2024-07-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@2024-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@2024-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@2024-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'
}
}
Kommentar
Några saker kan skilja sig åt i mallen, inklusive några av de symboliska namnen, API-versionerna och IP-adresserna. Det gör ingenting. Du löser några av dessa avvikelser senare i modulen.
Du har skapat en första Bicep-fil som representerar dina resurser. Bicep-filen är inte väl strukturerad och följer inte metodtipsen. I nästa lektion får du lära dig hur du förbättrar kvaliteten på den migrerade mallen.
Dricks
Om du använder ett versionskontrollsystem som Git är det här ett bra tillfälle att genomföra ditt arbete.
När du har verifierat filen main.bicep stänger du filen template.bicep .