Vad är ARM-mallar?

I och med övergången till molnet har många team infört 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. Teams måste 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 måste distribueras. Infrastrukturkoden blir en del av projektet. Precis som programkod lagrar du infrastrukturkoden på en källlagringsplats och version. 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. Du kan också ange i vilken resursgrupp dessa resurser ska distribueras.

Dricks

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 du 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.

  • Repeterbara resultat: Distribuera infrastrukturen upprepade gånger under utvecklingslivscykeln och ha förtroende för 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 önskat tillstånd i stället för att utveckla många separata mallar som representerar uppdateringar. Följande fil skapar till exempel ett lagringskonto. Om du distribuerar den här mallen och lagringskontot med de angivna egenskaperna redan finns, görs inga ändringar.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "mystore": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-04-01",
      "name": "mystorageaccount",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    }
  }
}
  • Orkestrering: Du behöver inte bekymra dig om komplexiteten i beställningsåtgärder. Resource Manager samordnar distributionen av beroende resurser 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 seriedistributioner. Du distribuerar mallen via ett kommando i stället för genom 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 distributionstillfället. 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 ingå i mallen eller lagras i en extern källa och refereras till i mallen. Med distributionsskript kan du 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. Verktygspaketet gör det enklare för dig att utveckla expertis med hjälp av mallspråket.

  • Förhandsgranska ändringar: Du kan använda konsekvensåtgärden för att få en förhandsversion av ändringarna innan du distribuerar mallen. Med vad händer om ser du vilka resurser som ska skapas, uppdateras eller tas bort och eventuella resursegenskaper som kommer att ändras. Konsekvensåtgärden kontrollerar miljöns aktuella tillstånd och eliminerar behovet av att hantera tillstånd.

  • Inbyggd validering: Mallen distribueras endast efter verifieringen. Resource Manager kontrollerar mallen innan du startar distributionen för att se till att distributionen lyckas. Distributionen är mindre sannolikt att 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.

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

  • CI/CD-integrering: Du kan integrera mallar i dina CI/CD-verktyg (kontinuerlig integrering och kontinuerlig distribution), som kan automatisera versionspipelines för snabba och tillförlitliga program- och infrastrukturuppdateringar. Med hjälp av Azure DevOps- och Resource Manager-malluppgiften 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älvstudier: 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. De här uttrycken 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 frå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.

Distributionsprocess för mallar

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 komma att 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 på tre nivåer med hjälp av 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 nödvändiga mallar. 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 med 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.

Få support

Här följer stegen för att öppna ett supportärende för azure resource manager-mallrelaterade problem:

  1. Öppna Azure Portal.

  2. Välj ikonen Support + Felsökning i det övre högra hörnet.

  3. I Beskriv problemet kortfattat anger du ARM-mall och väljer sedan Gå.

  4. I Vilken tjänst har du problem med? väljer du Portal under Övervakning och hantering och väljer sedan Nästa.

  5. Välj en prenumeration och välj sedan Nästa.

  6. Välj Problem med ARM-mallar och välj sedan Nästa.

    Skärmbild av begäran om stöd för ARM-mallar.

Nästa steg