Vad är ARM-mallar?

I och med flytten till molnet har många team implementerat flexibla utvecklingsmetoder. Dessa team itererar snabbt. De behöver distribuera sina lösningar till molnet upprepade gånger och veta att deras infrastruktur är stabil. I takt med att infrastrukturen har blivit en del av den iterativa processen har uppdelningen mellan drift och utveckling försvunnit. Teamen behöver hantera infrastruktur- och programkod genom en enhetlig process.

För att klara de här utmaningarna kan du automatisera distributioner och använda infrastruktur som kod. I kod definierar du den infrastruktur som ska distribueras. Infrastrukturkoden blir en del av projektet. Precis som programkod lagrar du infrastrukturkoden på en källlagringsplats och versionshanteras. Vem som helst i ditt team kan köra koden och distribuera liknande miljöer.

Om du vill implementera infrastruktur som kod för dina Azure-lösningar använder du Azure Resource Manager-mallar (ARM-mallar). Mallen är en JSON-fil (JavaScript Object Notation) som definierar infrastrukturen och konfigurationen för ditt projekt. Mallen använder deklarativ syntax, som låter dig ange vad du vill distribuera utan att du behöver skriva sekvensen med programmeringskommandon för att skapa det. I mallen anger du de resurser som ska distribueras och egenskaperna för dessa resurser.

Tips

Vi har introducerat ett nytt språk med namnet Bicep som erbjuder samma funktioner som ARM-mallar, men med en syntax som är enklare att använda. Varje Bicep-fil konverteras automatiskt till en ARM-mall under distributionen. Om du överväger infrastruktur som kodalternativ rekommenderar vi att du tittar på Bicep. Mer information finns i Vad är Bicep?.

Mer information om hur du kommer igång med ARM-mallar finns i följande video.

Varför ska jag välja ARM-mallar?

Om du försöker välja mellan att använda ARM-mallar och en av de andra infrastrukturerna som kodtjänster bör du överväga följande fördelar med att använda mallar:

  • Deklarativ syntax: Med ARM-mallar kan du skapa och distribuera en hel Azure-infrastruktur deklarativt. Du kan till exempel distribuera inte bara virtuella datorer, utan även nätverksinfrastruktur, lagringssystem och andra resurser som du kan behöva.

  • Upprepningsbara resultat: Distribuera infrastrukturen upprepade gånger under utvecklingslivscykeln och se till att dina resurser distribueras på ett konsekvent sätt. Mallar är idempotenter, vilket innebär att du kan distribuera samma mall många gånger och få samma resurstyper i samma tillstånd. Du kan utveckla en mall som representerar det önskade tillståndet i stället för att utveckla många separata mallar som representerar uppdateringar.

  • Orkestrering: Du behöver inte bekymra dig om komplexiteten i beställningsåtgärder. Resource Manager samordnar distributionen av resurser som är beroende av varandra så att de skapas i rätt ordning. När det är möjligt distribuerar Resource Manager resurser parallellt så att dina distributioner slutförs snabbare än seriell distribution. Du distribuerar mallen med ett kommando i stället för flera imperativa kommandon.

    Diagram som visar skillnaden mellan imperativ och deklarativ distribution.

  • Modulära filer: Du kan dela upp dina mallar i mindre, återanvändbara komponenter och länka ihop dem vid distributionen. Du kan också kapsla en mall i en annan mall.

  • Skapa valfri Azure-resurs: Du kan omedelbart använda nya Azure-tjänster och funktioner i mallar. Så snart en resursprovider introducerar nya resurser kan du distribuera dessa resurser via mallar. Du behöver inte vänta på att verktyg eller moduler ska uppdateras innan du använder de nya tjänsterna.

  • Utökningsbarhet: Med distributionsskript kan du lägga till PowerShell- eller Bash-skript i dina mallar. Distributionsskripten utökar din möjlighet att konfigurera resurser under distributionen. Ett skript kan inkluderas i mallen eller lagras i en extern källa och refereras till i mallen. Distributionsskript ger dig möjlighet att slutföra din miljökonfiguration från slutpunkt till slutpunkt i en enda ARM-mall.

  • Testning: Du kan se till att mallen följer rekommenderade riktlinjer genom att testa den med ARM-mallverktygssatsen (arm-ttk). Det här testpaketet är ett PowerShell-skript som du kan ladda ned från GitHub. Verktygssatsen gör det enklare för dig att utveckla expertis med hjälp av mallspråket.

  • Förhandsgranska ändringar: Du kan använda konsekvensgranskningsåtgärden för att få en förhandsgranskning av ändringarna innan du distribuerar mallen. Med what-if ser du vilka resurser som ska skapas, uppdateras eller tas bort samt eventuella resursegenskaper som kommer att ändras. Konsekvensåtgärden kontrollerar det aktuella tillståndet för din miljö och eliminerar behovet av att hantera tillstånd.

  • Inbyggd validering: Mallen distribueras först när verifieringen har slutförts. Resource Manager kontrollerar mallen innan du startar distributionen för att se till att distributionen lyckas. Det är mindre troligt att distributionen stoppas i ett halvfärdigt tillstånd.

  • Spårade distributioner: I Azure Portal kan du granska distributionshistoriken och få information om malldistributionen. Du kan se mallen som distribuerades, parametervärdena som skickades och eventuella utdatavärden. Annan infrastruktur som kodtjänster spåras inte via portalen.

    Skärmbild av Azure Portal som visar distributionshistorik.

  • Princip som kod: Azure Policy är en princip som kodramverk för att automatisera styrningen. Om du använder Azure-principer utförs principreparation på icke-kompatibla resurser när de distribueras via mallar.

  • Distributionsskisser: Du kan dra nytta av skisser som tillhandahålls av Microsoft för att uppfylla regel- och efterlevnadsstandarder. Dessa skisser innehåller färdiga mallar för olika arkitekturer.

  • CI/CD-integrering: Du kan integrera mallar i dina CI/CD-verktyg (continuous integration and continuous deployment), som kan automatisera dina versionspipelines för snabba och tillförlitliga program- och infrastrukturuppdateringar. Genom att använda Azure DevOps och Resource Manager malluppgift kan du använda Azure Pipelines för att kontinuerligt skapa och distribuera ARM-mallprojekt. Mer information finns i VS-projekt med pipelines och Självstudie: Kontinuerlig integrering av Azure Resource Manager-mallar med Azure Pipelines.

  • Exporterbar kod: Du kan hämta en mall för en befintlig resursgrupp genom att antingen exportera resursgruppens aktuella tillstånd eller visa mallen som används för en viss distribution. Att granska den exporterade mallen är ett bra sätt att lära sig mer om mallsyntaxen.

  • Redigeringsverktyg: Du kan skapa mallar med Visual Studio Code och mallverktygstillägget. Du får intelliSense, syntaxmarkering, infogad hjälp och många andra språkfunktioner. Förutom Visual Studio Code kan du även använda Visual Studio.

Mallfil

I mallen kan du skriva malluttryck som utökar funktionerna i JSON. Dessa uttryck använder de funktioner som tillhandahålls av Resource Manager.

Mallen innehåller följande avsnitt:

  • Parametrar – Ange värden under distributionen som gör att samma mall kan användas med olika miljöer.

  • Variabler – Definiera värden som återanvänds i dina mallar. De kan konstrueras utifrån parametervärden.

  • Användardefinierade funktioner – Skapa anpassade funktioner som förenklar mallen.

  • Resurser – Ange vilka resurser som ska distribueras.

  • Utdata – Returnera värden från de distribuerade resurserna.

Malldistributionsprocess

När du distribuerar en mall konverterar Resource Manager mallen till REST API-åtgärder. Till exempel när Resource Manager tar emot en mall med följande resursdefinition:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "mystorageaccount",
    "location": "centralus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

Den konverterar definitionen till följande REST API-åtgärd, som skickas till resursprovidern Microsoft.Storage:

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
  "location": "centralus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

Observera att den apiVersion som du angav i mallen för resursen används som API-version för REST-åtgärden. Du kan distribuera mallen upprepade gånger och vara säker på att den fortsätter att fungera. Genom att använda samma API-version behöver du inte bekymra dig om icke-bakåtkompatibla ändringar som kan introduceras i senare versioner.

Om du vill distribuera en mall använder du något av följande alternativ:

Malldesign

Det är helt upp till dig hur du definierar mallar och resursgrupper och hur du vill hantera din lösning. Du kan till exempel distribuera programmet i tre nivåer via en enda mall till en enda resursgrupp.

Diagram som visar en programdistribution med tre nivåer med en enda mall.

Du behöver dock inte definiera hela infrastrukturen i en enda mall. Ofta är det praktiskt att dela in dina distributionskrav i en uppsättning riktade mallar för specifika ändamål. Du kan enkelt återanvända dessa mallar för olika lösningar. Om du vill distribuera en viss lösning skapar du en huvudmall som länkar alla mallar som krävs. Följande bild visar hur du distribuerar en lösning i tre nivåer via en överordnad mall som innehåller tre kapslade mallar.

Diagram som visar en programdistribution på tre nivåer med kapslade mallar.

Om du tänker dig att dina nivåer har separata livscykler kan du distribuera dina tre nivåer till separata resursgrupper. Observera att resurserna fortfarande kan länkas till resurser i andra resursgrupper.

Diagram som visar en programdistribution på tre nivåer med separata resursgrupper.

Mer information om kapslade mallar finns i Använda länkade mallar med Azure Resource Manager.

Dela mallar

När du har skapat mallen kanske du vill dela den med andra användare i din organisation. Med mallspecifikationer kan du lagra en mall som resurstyp. Du använder rollbaserad åtkomstkontroll för att hantera åtkomst till mallspecifikationen. Användare med läsbehörighet till mallspecifikationen kan distribuera den, men inte ändra mallen.

Den här metoden innebär att du på ett säkert sätt kan dela mallar som uppfyller organisationens standarder.

Nästa steg