Distribuera ett Azure Logic Apps-arbetsflöde med hjälp av en Azure Resource Manager-mall

Slutförd

Om du har använt Azure ett tag har du förmodligen hört talas om Azure Resource Manager. Nu ska vi gå igenom vilken roll Resource Manager har och definiera vad som utgör en Resource Manager-mall.

Vad är Azure Resource Manager?

Azure Resource Manager är gränssnittet där du hanterar och ordnar molnresurser. Tänk dig Resource Manager som ett sätt att distribuera molnresurser.

Om du är bekant med Azure-resursgrupper vet du att de låter dig behandla uppsättningar med relaterade resurser som en enda enhet. Resource Manager ordnar resursgrupper som låter dig distribuera, hantera och ta bort alla resurserna med en enda åtgärd.

Tänk på att de finansiella modellerna som du kör åt analytikerna. För att köra en modell behöver du kanske en eller flera virtuella datorer, en databas för att lagra data och ett virtuellt nätverk för att koppla samman allting. Med Resource Manager kan du distribuera dessa tillgångar till samma resursgrupp och hantera och övervaka dem tillsammans. När du är klar kan du ta bort alla resurser i en resursgrupp i en enda åtgärd.

Vad är Resource Manager-mallar?

En Resource Manager-mall definierar exakt alla Resource Manager-resurser i en distribution. Du kan distribuera en Resource Manager-mall i en resursgrupp som en enda åtgärd.

En Resource Manager-mall är en JSON-fil, vilket gör mallen till en form av deklarativ automatisering. Deklarativ automatisering innebär att du definierar vilka resurser du behöver men inte hur de skapas. På ett annat sätt definierar du vad du behöver, men Resource Manager måste se till att resurserna distribueras korrekt.

Du kan tänka dig deklarativ automatisering som något liknande som hur webbläsare visar HTML-filer. HTML-filen beskriver vilka element som visas på sidan, men inte beskriver hur de ska visas. Detta ”hur” är webbläsarens ansvar.

Kommentar

Du kan höra Resource Manager-mallar som kallas ARM-mallar. Vi föredrar de fullständiga namnen på Azure Resource Manager-mallar eller Resource Manager-mallar.

Varför ska du använda Resource Manager-mallar?

Med Hjälp av Resource Manager-mallar blir dina distributioner snabbare och mer repeterbara. Till exempel behöver du inte längre skapa en virtuell dator i portalen, vänta tills den har slutförts, sedan skapa nästa virtuella dator och så vidare. Resource Manager tar hand om hela distributionen åt dig.

Här är några andra fördelar som du kan tänka på:

  • Mallar förbättrar konsekvensen.

    Resource Manager-mallar tillhandahåller ett gemensamt språk för dig och andra att beskriva distributionerna. Oavsett vilket verktyg eller SDK som används för att distribuera mallen, är struktur, format och uttryck i mallen desamma.

  • Mallar hjälper till att uttrycka komplexa distributioner.

    Med mallar kan du distribuera flera resurser i rätt ordning. Du bör till exempel inte distribuera en virtuell dator innan du har skapat en OS-disk eller ett nätverksgränssnitt. Resource Manager mappar varje resurs och dess beroende resurser och skapar de överordnade resurserna först. Beroendemappning hjälper till att säkerställa att distributionen genomförs i rätt ordning.

  • Mallar minskar manuella, felbenägna uppgifter.

    Att manuellt skapa och ansluta resurser kan ta lång tid och det är lätt att göra något misstag längs vägen. Resource Manager ser till att distributioner sker på samma sätt varje gång.

  • Mallar är kod.

    Mallar uttrycker dina krav i kod. Se en mall som en typ av infrastruktur som kod som kan delas, testas och versionshanteras som alla andra typer av programvara. Eftersom mallar är kod kan du även skapa en ”dokumentationsspår” som du kan följa. Mallkoden dokumenterar distributionen. De flesta användare har sina mallar under någon typ av revisionskontroll, till exempel Git. När du ändrar mallen dokumenterar revisionshistoriken också hur mallen (och distributionen) har utvecklats med tiden.

  • Mallar främjar återanvändning.

    Mallen kan innehålla parametrar som fylls i när mallen körs. En parameter kan definiera ett användarnamn eller lösenord, ett domännamn och så vidare. Med mallparametrar kan du skapa flera versioner av infrastrukturen, till exempel mellanlagring och produktion, men ändå använda samma mall.

  • Mallar kan länkas.

    Du kan länka ihop Resource Manager-mallar för att göra själva mallarna modulära. Du kan skriva små mallar som var och en definierar en del av en lösning och kombinera dem för att skapa ett komplett system.

Modellerna som de finansiella analytikerna kör är unika, men du ser mönster i den underliggande infrastrukturen. De flesta modeller kräver till exempel en databas för att lagra data. Många modeller använda den samma programmeringsspråk, ramverk och operativsystem för att utföra uppgifterna. Du kan definiera mallar som beskriver varje enskild komponent, till exempel beräkning, lagring och nätverk. Du kan sedan kombinera komponenterna för att uppfylla varje analytikers specifika behov.

Vad innehåller en Resource Manager-mall?

Kommentar

Här visas några kodexempel som ger dig en uppfattning om varje avsnitts struktur. Oroa dig inte om det du ser är obekant för dig. Du kan granska andras mallar och skriva egna när du får mer praktisk erfarenhet.

Du kan ha använt JavaScript Object Notation (JSON) tidigare för att skicka data mellan servrar och webbprogram. JSON är också ett populärt sätt att beskriva hur program och infrastruktur är konfigurerade.

Med JSON kan vi uttrycka data som lagras som ett objekt, till exempel en virtuell dator, i text. Ett JSON-dokument är i princip en samling nyckel/värde-par. Varje nyckel är en sträng. Nyckelns värde kan vara en sträng, ett tal, ett booleskt uttryck, en lista med värden eller ett objekt, som är en samling andra nyckel/värde-par.

En Resource Manager-mall kan innehålla följande avsnitt:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}

Även om de här avsnitten uttrycks med JSON är de inte relaterade till det faktiska JSON-språket. Nu ska vi titta närmare på varje avsnitt.

Parametrar

I det här avsnittet anger du vilka värden som kan konfigureras när mallen körs. Du kan till exempel tillåta att mallanvändarna anger användarnamn, lösenord eller domännamn.

Här är ett exempel som illustrerar två parametrar: en för en virtuell dators användarnamn och en för dess lösenord.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

Variabler

I det här avsnittet definierar du värden som används i hela mallen. Variabler kan göra det enklare att underhålla dina mallar. Du kan till exempel definiera ett namn på lagringskontot en gång som en variabel och sedan använda variabeln i hela mallen. Om namnet på lagringskontot ändras behöver du bara uppdatera variabeln.

Här är ett exempel med några variabler som beskriver nätverksfunktioner för en virtuell dator.

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

Funktioner

I det här avsnittet definierar du procedurer som du inte vill upprepa i hela mallen. Precis som variabler kan funktioner göra det enklare att underhålla dina mallar. Här är ett exempel som skapar en funktion för att skapa ett unikt namn som kan användas när du skapar resurser som kräver globalt unika namn.

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Resurser

I det här avsnittet definierar du de Azure-resurser som utgör din distribution.

Här är ett exempel som skapar en resurs med offentlig IP-adress.

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

Här är resurstypen Microsoft.Network/publicIPAddresses. Namnet läse från avsnittet variabler och dess plats (eller Azure-region) läse avsnittet parametrar.

Eftersom resurstyper kan ändras med tiden, refererar apiVersion till den version av resurstyp som du vill använda. Allt eftersom resurstyper utvecklas och ändras kan du ändra dina mallar så att de använder de senaste funktionerna när du är klar.

Utdata

I det här avsnittet definierar du all information som du vill ta emot när mallen körs. Du kanske till exempel vill ta emot den virtuella datorns IP-adress eller FQDN, vilket är information som du inte vet förrän distributionen körs.

I följande exempel visas utdata med namnet hostname. FQDN-värdet läses in från den virtuella datorns inställningar för offentlig IP-adress.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}

Hur gör jag för att distribuera ett Azure Logic Apps-arbetsflöde i en mall?

Ett Azure Logic Apps-arbetsflöde är en resurs i Azure. Därför kan vi distribuera den i en mall genom att lägga till den i listan över resurser som ska distribueras i avsnittet i resources Resource Manager-mallen. Exakt vad behöver vi lägga till i resursavsnittet för att definiera arbetsflödet? Vi lägger till JSON-arbetsflödesdefinitionen för arbetsflödet i fråga i resursavsnittet. I själva verket visar följande JSON-kodavsnitt en Resource Manager-mall för att distribuera det grundläggande arbetsflöde som beskrevs i föregående enhet. Som du ser i markeringen innehåller resursavsnittet den fullständiga arbetsflödesdefinitionen.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Logic/workflows",
            "apiVersion": "2017-07-01",
            "name": "HelloLogicAppsTemplate",
            "location": "westus2",
            "properties": {
                "state": "Enabled",
                "definition": {
                    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "triggers": {
                        "manual": {
                            "type": "Request",
                            "kind": "Http",
                            "inputs": {
                                "method": "GET",
                                "schema": {}
                            }
                        }
                    },
                    "actions": {
                        "Response": {
                            "runAfter": {},
                            "type": "Response",
                            "kind": "Http",
                            "inputs": {
                                "body": "Hello Logic Apps Template!",
                                "statusCode": 200
                            }
                        }
                    },
                    "outputs": {}
                },
                "parameters": {}
            }
        }
    ],
    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', 'HelloLogicAppsTemplate'), '/triggers/manual'), '2017-07-01').value]"
        }
     }
}

Vi kan distribuera mallen med någon av följande metoder:

  • Distribuera med hjälp av Azure-portalen
  • Distribuera med PowerShell-modulen Az
  • Distribuera från Azure-kommandoradsgränssnittet (CLI).

I den här modulen distribuerar vi mallar med hjälp av Azure CLI och az deployment group-kommandona.

Hur gör jag för att skapa en Resource Manager-mall?

Det finns många sätt att skriva Resource Manager-mallar. Även om du kan skriva en mall från grunden är det vanligt att börja med en befintlig mall och anpassa den efter dina behov.

Här är några sätt att få en startmall:

  • Använd Azure-portalen för att skapa en mall baserat på resurserna i en befintlig resursgrupp.
  • Börja med en mall som du eller ditt team har byggt och som har en liknande funktion.
  • Börja med en Azure-snabbstartsmall. Mer om det i nästa del.

Oavsett vilken metod du väljer arbetar du med en textredigerare när du skapar en mall. Du kan ta med din favoritredigerare, men Tillägget Azure Resource Manager Tools i Visual Studio Code är särskilt utformat för att skapa mallar. Med tillägget blir det enklare att navigera i mallkoden och du får en automatisk komplettering för många vanliga uppgifter.

När du utforskar och skriver dina mallar läser du dokumentationen för att förstå tillgängliga resurstyper och hur du använder dem.

I nästa lektion ska vi undersöka och distribuera en befintlig mall från Azure CLI.