Konvertera och migrera dina resurser till en Bicep-fil

Slutförd

När du påbörjar migreringen till Bicep är det viktigt att följa en strukturerad process för att se till att Bicep-filen beskriver dina Azure-resurser korrekt. Du måste se till att din Bicep-kod följer bästa praxis och att den är fullständigt testad och säker att använda för efterföljande distributioner. I den här lektionen får du lära dig om de två första faserna för din Bicep-migrering: konverteringsfasen och migreringsfasen.

diagram som visar faserna för konvertering och migrering av det rekommenderade arbetsflödet för migrering av Azure-resurser till Bicep.

Huvudfokus för dessa två faser är att förbereda en ny Bicep-fil innan du senare omstrukturerar och testar den.

Omvandla fas

Målet med konvertera fas för att migrera dina resurser till Bicep är att samla in en första representation av dina Azure-resurser. Bicep-filen som du skapar i den här fasen är inte klar och den är inte redo att användas. Filen ger dig dock en startpunkt för migreringen.

Konverteringsfasen består av två möjliga steg som du slutför i följd:

  1. Samla in en representation av dina Azure-resurser.
  2. Om det behövs konverterar du JSON-representationen till Bicep med hjälp av kommandot decompile.

diagram som visar en JSON-mall som är dekompilerad till JSON och Azure-resurser som exporteras till en JSON-mall som sedan dekompileras.

Om du har en befintlig JSON-mall som du konverterar till Bicep är det första steget enkelt eftersom du redan har källmallen. Du får lära dig hur du dekompilerar den till Bicep i den här lektionen.

Om du konverterar Azure-resurser som har distribuerats med hjälp av Azure-portalen eller något annat verktyg måste du samla in resursdefinitionerna. Du kan exportera resursdefinitionerna och konvertera dem till Bicep, eller så kan du använda kommandot Insert Resource i Visual Studio Code för att infoga en Bicep-representation av din Azure-resurs.

Så här representerar Azure resurser

Azure Resource Manager är den tjänst som används för att distribuera och hantera resurser i Azure. Alla resurser som distribueras till Azure spåras av Resource Manager, oavsett vilken metod som användes för att distribuera resursen. Du kan använda Azure-portalen, Azure CLI, Azure PowerShell, Resource Manager REST API och Azure SDK:er för att interagera med Resource Manager.

diagram som visar Resource Manager som tar emot begäranden från alla Azure-klienter och -bibliotek.

Det finns två typer av åtgärder i Azure: kontrollplansåtgärder och dataplansåtgärder. Kontrollplan operationer används för att hantera resurserna i din prenumeration. Dataplan åtgärder används för att komma åt funktioner som exponeras av en resurs. Du kan till exempel använda en kontrollplansåtgärd för att skapa en virtuell dator, men du använder en dataplansåtgärd för att ansluta till den virtuella datorn med hjälp av RDP (Remote Desktop Protocol).

Exportera befintliga resurser till en JSON-mall

Oavsett hur dina Azure-resurser skapas gör Resource Manager information om varje resurs tillgänglig i JSON-format. När du ber om en kopia av JSON-representationen av en resurs du exportera resursen. JSON-filen som du exporterar kan delas upp i Bicep.

Resource Manager innehåller flera sätt att exportera Azure-resurser till en mall. Du kan använda Azure-portalen, Azure CLI och Azure PowerShell-cmdletar för att exportera enskilda resurser, flera resurser och hela resursgrupper.

Exportprocessen är en kontrollplansåtgärd, vilket innebär att den endast exporterar konfigurationen av Azure-resurserna. När du till exempel exporterar en virtuell dator exporteras inte data på den virtuella datorns hårddisk. Och när du exporterar ett lagringskonto inkluderas inte blobar och annat innehåll i lagringskontot i exportprocessen.

Du måste tänka på några saker när du exporterar befintliga resurser:

  • Den exporterade resursdefinitionen är en ögonblicksbild av resursens aktuella tillstånd. Den innehåller alla ändringar som gjorts i resursen sedan den första distributionen.
  • Den exporterade mallen kan innehålla vissa standardresursegenskaper som normalt utelämnas från en Bicep-definition. Exportprocessen kan till exempel lägga till skrivskyddade egenskaper som Azure ställer in automatiskt. Det är inte meningsfullt att inkludera dessa egenskaper eftersom de är skrivskyddade. Överväg att ta bort dessa egenskaper från resursdefinitionerna när du migrerar till Bicep för att hålla dina Bicep-filer fria från onödig kod som kan orsaka förvirring.
  • Den exporterade mallen innehåller förmodligen inte alla parametrar som du behöver för att göra mallen återanvändbar. När du exporterar en mall hårdkodas många av egenskaperna till mallen. Du ser hur du lägger till parametrar senare i den här modulen.
  • Vissa resurser kan inte exporteras med den här metoden och du måste definiera dem manuellt i Bicep-filen. Du får lära dig hur du återskapar dessa resurser senare i den här lektionen.

Spara utplaceringar till en JSON-mall

Om du någonsin har distribuerat en resurs manuellt från Azure-portalen kanske du har lagt märke till alternativet att Ladda ned en mall för automatisering på fliken Granska + skapa. Det här alternativet sparar en JSON ARM-mall som baseras på de namn och egenskaper som du anger när du skapar resursen i portalen.

Resource Manager spårar även resursdistributioner. Distributionsåtgärder omfattar ändringar som skickas av Azure-portalens resursskapandeupplevelse och eventuella ARM-malldistributioner. Ändringar av befintliga resurser som görs med hjälp av Azure-portalen, Azure PowerShell-cmdletar, Azure CLI eller andra verktyg skapar vanligtvis inte distributioner.

Om distributionerna har skapats med ett kompatibelt verktyg kan du komma åt distributionsmallen från resursgruppens distributionshistorik. Du kan använda Azure-portalen, Azure CLI eller Azure PowerShell för att spara distributioner.

Du måste tänka på några saker när du sparar mallarna med hjälp av den här metoden:

  • Den sparade mallen visar tillståndet för resurserna vid tidpunkten för distributionen. Den innehåller inga ändringar som har gjorts efter distributionen.
  • Om distributionen innehöll flera resurser kan du inte välja specifika resurser som ska inkluderas och exkluderas. Den här åtgärden laddar ned definitionen av alla resurser som ingick i den första distributionen. Men när du flyttar till migreringsfasen i processen kan du manuellt ignorera resurser som du inte behöver.
  • Mallen innehåller endast resursegenskaper som behövs för distributionen.
  • Mallen kan innehålla parametrar som du kan använda för att distribuera om mallen i flera miljöer. Du måste dock bekräfta att dessa parametrar passar dina behov.
  • Mallen innehåller förmodligen inte onödiga egenskaper, men du bör fortfarande kontrollera att mallen innehåller allt du förväntar dig och tar bort eventuella onödiga egenskaper.

Obs

Men du exporterar resurser, antingen genom att exportera befintliga resurser eller genom att spara distributioner, behandlar den exporterade filen som en startpunkt och använder den inte direkt. Använd den i stället som utgångspunkt för den slutliga mallen.

Infoga befintliga resurser i Bicep

Bicep-tillägget för Visual Studio Code innehåller kommandot Insert Resource, som samlar in en Bicep-representation av en Azure-resurs. Det här kommandot läser JSON-definitionen för resursen från Azure, tar bort egenskaper som identifieras som skrivskyddade och dekompileras JSON till Bicep. Precis som med exportfunktionen kan den resulterande Bicep-koden användas som utgångspunkt för den slutliga Bicep-filen.

Du kan infoga en resurs genom att öppna Visual Studio Code-kommandopaletten. Använd Ctrl+Skift+P- i Windows och Linux och ⌘+Skift+P- på macOS.

Dela upp JSON ARM-källmallen

Det andra steget när du migrerar dina Azure-resurser till Bicep är att konvertera dina JSON ARM-mallar och Azure-resurser till Bicep-mallar. Bicep-verktyget innehåller kommandot decompile för att konvertera mallar. Du kan anropa kommandot decompile från antingen Azure CLI eller Bicep CLI.

Dekompileringsprocessen garanterar inte en fullständig mappning från JSON till Bicep. Du kan behöva ändra den genererade Bicep-filen för att uppfylla dina metodtips för mallen innan du använder filen för att distribuera resurser. Se det som startpunkten för migreringen. Senare i den här modulen får du lära dig hur du åtgärdar eventuella problem som uppstår under dekompileringsprocessen.

När du har dekompilerat mallen har du slutfört konverteringsfasen. Nu har du en giltig Bicep-fil att starta från.

Migreringsfas

Målet med migrera fasen av att migrera dina resurser till Bicep är att skapa det första utkastet till din distribuerbara Bicep-fil och se till att den definierar alla Azure-resurser som ingår i omfattningen för migreringen.

Migreringsfasen består av tre steg som du slutför i följd:

  1. Skapa en ny tom Bicep-fil.
  2. Kopiera varje resurs från din dekompilerade mall.
  3. Identifiera och återskapa resurser som saknas.

diagram som visar stegen för att migrera en mall till Bicep.

Skapa en ny Bicep-fil

Det är en bra praxis att skapa en ny Bicep-fil. Filen som du skapade i konverteringsfasen är en referenspunkt som du kan titta på, men du bör inte behandla den som slutgiltig eller distribuera den as-is.

Kopiera resurser till den nya Bicep-filen

Kopiera varje resurs individuellt från den konverterade Bicep-filen till den nya Bicep-filen. Den här processen hjälper dig att lösa eventuella problem per resurs och undvika förvirring när mallen blir större.

Återskapa resurser som inte stöds

Alla Azure-resurstyper kan inte exporteras via Azure-portalen, Azure CLI eller Azure PowerShell. Till exempel är tillägg för virtuella datorer som DependencyAgentWindows och MMAExtension (Microsoft Monitoring Agent) resurstyper som du inte kan exportera.

När du försöker exportera en resurs med hjälp av Azure-portalen, Azure CLI eller Azure PowerShell och en resurstyp som inte stöds ingår genereras ett detaljerat felmeddelande. Du måste återskapa alla resurser som inte har exporterats, till exempel tillägg för virtuella datorer, i din nya Bicep-fil. Du kan välja mellan flera verktyg och metoder för att återskapa resurser, till exempel Azure Resource Explorer, ARM-mallreferensen och Azure-snabbstartsmallar.

Azure Resource Explorer

Azure Resource Explorer är ett verktyg som är inbäddat i Azure-portalen. Portalen visar inte vissa resurstyper, men Resursutforskaren ger dig en JSON-representation av dina resurser. Om du vill komma åt Resource Explorer söker du efter den i sökrutan:

Skärmbild av Azure-portalen som visar sökrutan med resursutforskaren angiven.

Resultatfönstret visar en lista över registrerade resursprovidrar för din prenumeration och information om alla resurser, resursgrupper och prenumerationer som du har behörighet att visa. Om du vill visa en JSON-representation av en resurs väljer du hierarkin till vänster i fönstret:

Skärmbild av Azure-portalen som visar Azure Resource Explorer.

Genom att välja en resurs kan du visa JSON-representationen, som i det här exemplet:

{
    "name": "DependencyAgentWindows",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-app-prod-truckline/providers/Microsoft.Compute/virtualMachines/vm-prod-001/extensions/DependencyAgentWindows",
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "eastus",
    "properties": {
        "autoUpgradeMinorVersion": true,
        "provisioningState": "Succeeded",
        "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
        "type": "DependencyAgentWindows",
        "typeHandlerVersion": "9.10"
    }
}

Du kan använda JSON-representationen för att definiera en Bicep-resurs:

resource dependencyAgentWindows 'Microsoft.Compute/virtualMachines/extensions@2022-08-01' = {
  parent: virtualMachine
  name: 'DependencyAgentWindows'
  location: 'eastus'
  properties: {
    autoUpgradeMinorVersion: true
    publisher: 'Microsoft.Azure.Monitoring.DependencyAgent'
    type: 'DependencyAgentWindows'
    typeHandlerVersion: '9.10'
  }
}

Not

JSON-representationen innehåller en egenskap med namnet provisioningState. Egenskapen provisioningState är skrivskyddad och anges automatiskt av Azure, så den ingår inte i Bicep-resursdefinitionen.

Tips

Bicep-tillägget för Visual Studio Code hjälper dig att definiera dina Azure-resurser i Bicep. Till exempel innehåller Bicep-representationen av resursen en API-version, men den exporterade JSON-versionen gör det inte. När du börjar ange resurstypen i Visual Studio Code föreslås automatiskt en API-version.

REFERENS FÖR ARM-mall

Referensen ARM-mallen är en källa till information om ARM-mallstruktur, resurstyper, API-versioner och egenskapsdefinitioner för Azure-resurser. Dokumentationen innehåller exempel i både Bicep- och JSON-format.

Du kan välja specifika resursprovidrar och resurstyper, till exempel Microsoft.Web/serverfarmsoch deras API-versioner. Du kan granska vilka resursegenskaper som krävs och vilka som är valfria. Du kan också visa egenskapsbeskrivningar som hjälper dig att förstå vad egenskaperna gör.

Azure-snabbstartsmallar

Azure Quickstart-mallarnas arkiv är en samling av mallar som har bidragits av communityn. Den här lagringsplatsen med sökbara mallar innehåller exempel på många Azure-resurser och -lösningar. I vissa snabbstarter finns både en JSON ARM-mall och en Bicep ARM-mall att visa. Du kan använda dessa mallar som referenspunkt för att skapa och verifiera dina mallar för distribution.

Anta att du vill hitta en mall som skapar en Azure App Service-plan och en app. Varje snabbstartsmall ger dig möjlighet att distribuera mallen direkt till Azure eller visa mallen på GitHub.

Skärmbild som visar en Azure-snabbstartsmall som distribuerar en grundläggande Linux-webbapp.

Tänk på att Azure-snabbstartsmallar är community-bidrag. Några av exemplen kan vara inaktuella eftersom funktioner regelbundet läggs till i Azure-tjänster. Exemplen kan också innehålla resurser och egenskaper som du inte behöver för din användning av mallen. Lagringsplatsen för snabbstartsmallar är dock en användbar resurs som hjälper dig att förstå hur du kan distribuera dina resurser med hjälp av ARM-mallar.