Een Azure Logic Apps-werkstroom implementeren met behulp van een Azure Resource Manager-sjabloon

Voltooid

Als u een tijdje met Azure hebt gewerkt, zult u waarschijnlijk wel gehoord hebben van Azure Resource Manager. Laten we eens kijken naar de rol van Resource Manager en omschrijven waaruit een Resource Manager-sjabloon bestaat.

Wat is Azure Resource Manager?

Azure Resource Manager is de interface voor het beheren en ordenen van cloudresources. U kunt Resource Manager zien als een manier om cloudresources te implementeren.

Als u bekend bent met Azure-resourcegroepen, weet u dat u hiermee sets gerelateerde resources als één eenheid kunt behandelen. Resource Manager is de functie waarmee u de resourcegroepen kunt ordenen die u gebruikt om verschillende resources in één bewerking te implementeren, beheren en verwijderen.

We nemen weer het voorbeeld van de financiële modellen die u voor uw analisten uitvoert. Als u een model wilt uitvoeren, hebt u mogelijk een of meer VM's nodig, een database voor het opslaan van gegevens en een virtueel netwerk om alles met elkaar te verbinden. Met Resource Manager kunt u deze assets in dezelfde resourcegroep implementeren en deze samen beheren en bewaken. Wanneer u klaar bent, kunt u alle resources in een resourcegroep in één bewerking verwijderen.

Wat zijn Resource Manager-sjablonen?

Een Resource Manager-sjabloon omschrijft nauwkeurig alle Resource Managers-resources in een implementatie. U kunt een Resource Manager-sjabloon in één bewerking implementeren in een resourcegroep.

Een Resource Manager-sjabloon is een JSON-bestand, waardoor de sjabloon een vorm van declaratieve automatisering is. Declaratieve automatisering betekent dat u definieert welke resources u nodig hebt, niet hoe u ze wilt maken. Op een andere manier definieert u wat u nodig hebt, maar Resource Manager moet ervoor zorgen dat resources correct worden geïmplementeerd.

U kunt declaratieve automatisering vergelijken met de manier waarop webbrowsers HTML-bestanden weergeven. Het HTML-bestand beschrijft welke elementen op de pagina worden weergegeven, maar niet hoe deze moeten worden weergegeven. Het 'hoe' is de verantwoordelijkheid van de webbrowser.

Notitie

Mogelijk hoort u Resource Manager-sjablonen die arm-sjablonen worden genoemd. We geven de voorkeur aan de volledige namen van Azure Resource Manager-sjablonen of Resource Manager-sjablonen.

Waarom Resourcemanager-sjablonen gebruiken?

Met Resource Manager-sjablonen kunt u uw implementaties sneller en herhaalbaarder maken. Zo hoeft u niet meer een VM te maken in de portal, te wachten tot deze klaar is om vervolgens de volgende VM te gaan maken, enzovoort. Resource Manager neemt de volledige implementatie van u over.

Dit zijn nog enkele andere interessante voordelen:

  • Sjablonen verbeteren de consistentie.

    Resource Manager-sjablonen hanteren een algemene taal die door u en anderen kan worden gebruikt om implementaties te beschrijven. Ongeacht het hulpprogramma of de SDK die wordt gebruikt om de sjabloon te implementeren, blijven de structuur, indeling en expressies in de sjabloon hetzelfde.

  • Sjablonen helpen complexe implementaties uit te drukken.

    Sjablonen kunnen helpen om meerdere resources in de juiste volgorde te implementeren. Het is bijvoorbeeld niet handig om een virtuele machine te implementeren voordat u een besturingssysteemschijf of netwerkinterface hebt gemaakt. Resource Manager brengt alle resources en de bijbehorende afhankelijke resources in kaart en maakt eerst de afhankelijke resources. Afhankelijkheidstoewijzing zorgt ervoor dat de implementatie in de juiste volgorde wordt uitgevoerd.

  • Sjablonen verminderen handmatige, foutgevoelige taken.

    Het handmatig maken en verbinden van resources kan tijdrovend zijn, en er kunnen gemakkelijk fouten worden gemaakt. Resource Manager zorgt ervoor dat implementaties elke keer op dezelfde manier plaatsvinden.

  • Sjablonen zijn code.

    Sjablonen gebruiken code om uw vereisten tot uitdrukking te brengen. U kunt een sjabloon zien als een soort infrastructuur als code, die net als elk ander stukje software kan worden gedeeld, getest en een versienummer kan krijgen. En omdat sjablonen code zijn, kunt u een 'controlespoor' maken dat kan worden gevolgd. De sjablooncode vormt de documentatie van de implementatie. De meeste gebruikers onderhouden hun sjablonen met behulp van een soort revisiecontrole, zoals Git. Wanneer u de sjabloon wijzigt, wordt in de revisiegeschiedenis ook vastgelegd hoe de sjabloon (en uw implementatie) zich heeft ontwikkeld in de loop van de tijd.

  • Sjablonen bevorderen hergebruik.

    Een sjabloon kan parameters bevatten die worden ingevuld op het moment dat de sjabloon wordt uitgevoerd. Een parameter kan een gebruikersnaam of wachtwoord definiëren, een domeinnaam, enzovoort. Met sjabloonparameters kunt u meerdere versies van uw infrastructuur maken, zoals fasering en productie, maar toch dezelfde sjabloon gebruiken.

  • Sjablonen kunnen worden gekoppeld.

    U kunt Resource Manager-sjablonen koppelen om de sjablonen zelf modulair te maken. U kunt kleine sjablonen schrijven die elk een onderdeel van een oplossing definiëren, en de sjablonen vervolgens combineren om een volledig systeem te maken.

De modellen die uw financieel analisten uitvoeren zijn uniek, maar er zijn wel patronen zichtbaar in de onderliggende infrastructuur. Zo hebben de meeste modellen bijvoorbeeld een database nodig voor het opslaan van gegevens. Veel modellen gebruiken dezelfde programmeertalen, frameworks en besturingssystemen voor het uitvoeren van de details. U kunt sjablonen definiëren die elk afzonderlijk onderdeel beschrijven, zoals compute, opslag en netwerken. Vervolgens kunt u de onderdelen combineren om te voldoen aan de specifieke behoeften van elke analist.

Waaruit bestaat een Resource Manager-sjabloon?

Notitie

Hier ziet u enkele codevoorbeelden om u een idee te geven van de structuur van elke sectie. Maakt u zich geen zorgen als wat u ziet onbekend is voor u. U kunt sjablonen van anderen bekijken en uw eigen sjablonen schrijven naarmate u meer praktische ervaring krijgt.

Mogelijk hebt u JSON (JavaScript Object Notation) gebruikt voordat u gegevens tussen servers en webtoepassingen verzendt. JSON is ook een populaire manier om te beschrijven hoe toepassingen en infrastructuur moeten worden geconfigureerd.

Met JSON kunnen gegevens die zijn opgeslagen als een object, zoals een virtuele machine, in tekst uitdrukken. Een JSON-document is in feite een verzameling sleutel-waardeparen. Elke sleutel is een tekenreeks. De waarde van de sleutel kan een tekenreeks, een getal, een Booleaanse expressie, een lijst met waarden of een object zijn, een verzameling andere sleutel-waardeparen.

Een Resource Manager-sjabloon kan de volgende secties bevatten:

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

Hoewel deze secties worden uitgedrukt met behulp van JSON, zijn ze niet gerelateerd aan de werkelijke JSON-taal. Laten we eens kijken naar elke sectie in meer detail.

Parameters

In deze sectie geeft u op welke waarden kunnen worden geconfigureerd wanneer de sjabloon wordt uitgevoerd. U kunt bijvoorbeeld toestaan dat uw sjabloongebruikers een gebruikersnaam, wachtwoord of domeinnaam opgeven.

Hier volgt een voorbeeld van twee parameters: één voor de gebruikersnaam van een virtuele machine en één voor het wachtwoord.

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

Variabelen

In deze sectie definieert u waarden die in de sjabloon worden gebruikt. Variabelen kunnen helpen om het onderhoud van sjablonen te vereenvoudigen. U kunt bijvoorbeeld één keer de naam van een opslagaccount als een variabele definiëren, en deze variabele vervolgens overal in de sjabloon gebruiken. Als de naam van het opslagaccount verandert, hoeft u alleen de variabele bij te werken.

Hier volgt een voorbeeld met enkele variabelen die netwerkfuncties voor een VM beschrijven.

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

Functies

In deze sectie definieert u procedures die u niet in de sjabloon wilt herhalen. Net zoals variabelen kunnen functies helpen om het onderhoud van sjablonen te vereenvoudigen. Hier volgt een voorbeeld van een functie voor het maken van een unieke naam die kan worden gebruikt bij het maken van resources die wereldwijd een unieke naam moeten hebben.

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

Resources

In deze sectie definieert u de Azure-resources waaruit de implementatie bestaat.

In het onderstaande voorbeeld wordt een resource in de vorm van een openbaar IP-adres gemaakt.

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

Het type resource is hier Microsoft.Network/publicIPAddresses. De naam wordt gelezen uit de sectie variabelen en de locatie (of De Azure-regio) wordt gelezen uit de sectie parameters.

Omdat resourcetypen na verloop van tijd kunnen veranderen, verwijst apiVersion naar de versie van het resourcetype die u wilt gebruiken. Naarmate resourcetypen worden doorontwikkeld, kunt u de sjablonen aanpassen voor gebruik met de nieuwste functies als u daar klaar voor bent.

Uitvoer

In deze sectie definieert u alle informatie die u wilt ontvangen wanneer de sjabloon wordt uitgevoerd. U wilt bijvoorbeeld het IP-adres of de FQDN van uw VIRTUELE machine ontvangen. Dit is informatie die u niet weet totdat de implementatie wordt uitgevoerd.

In het volgende voorbeeld ziet u een uitvoer met de naam hostname. De FQDN-waarde wordt gelezen van de instellingen van het openbare IP-adres van de VM.

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

Hoe kan ik een Azure Logic Apps-werkstroom implementeren in een sjabloon?

Een Azure Logic Apps-werkstroom is een resource in Azure. Daarom kunnen we deze implementeren in een sjabloon door deze toe te voegen aan de lijst met resources die moeten worden geïmplementeerd in de sectie van de resources Resource Manager-sjabloon. Wat voegen we precies aan de sectie resources toe zodat de werkstroom wordt gedefinieerd? We voegen de JSON-werkstroomdefinitie van de desbetreffende werkstroom toe aan de sectie resources. In het volgende JSON-fragment wordt in feite een Resource Manager-sjabloon getoond voor het implementeren van de eenvoudige werkstroom die in de vorige sectie is beschreven. Zoals u gemarkeerd ziet, bevat de sectie resources de volledige werkstroomdefinitie.

{
    "$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]"
        }
     }
}

U kunt deze sjabloon implementeren met behulp van de volgende methoden:

  • Implementeren met behulp van de Azure-portal
  • Implementeren met behulp van de PowerShell-module Az
  • Implementeren vanaf de Azure-opdrachtregelinterface (CLI).

In deze module gaan we sjablonen implementeren met behulp van de Azure CLI en de az deployment group-opdrachten.

Hoe schrijf ik een Resource Manager-sjabloon?

Er zijn allerlei manieren om een Resource Manager-sjabloon te schrijven. U kunt een sjabloon helemaal zelf schrijven, maar het is gebruikelijk om te beginnen met een bestaande sjabloon en deze aan te passen aan uw behoeften.

Dit zijn enkele manieren om een sjabloon te maken:

  • Gebruik de Azure-portal om een sjabloon te maken op basis van de resources in een bestaande resourcegroep.
  • Begin met een sjabloon die door u of uw team is gebouwd en die een vergelijkbaar doel dient.
  • Begin met een Azure-quickstartsjabloon. In het volgende gedeelte wordt dit uitgelegd.

Ongeacht de benadering is voor het schrijven van een sjabloon een teksteditor nodig. U kunt uw favoriete editor gebruiken, maar de Azure Resource Manager Tools-extensie van Visual Studio Code is speciaal ontworpen voor het maken van sjablonen. Met deze extensie kunt u gemakkelijker navigeren door de sjablooncode, en worden veel algemene taken automatisch aangevuld.

Wanneer u uw sjablonen verkent en schrijft, raadpleegt u de documentatie om inzicht te hebben in de beschikbare resourcetypen en hoe u deze kunt gebruiken.

In de volgende les onderzoeken en implementeren we een bestaande sjabloon vanuit de Azure CLI.