Gekoppelde en geneste ARM-sjablonen implementeren

Voltooid

Naarmate de complexiteit van uw implementatie toeneemt, kunt u een modulaire benadering gebruiken om resources te implementeren met behulp van gekoppelde of geneste sjablonen van Azure Resource Manager (ARM). Gekoppelde en geneste sjablonen zijn manieren om uw implementatie op te splitsen in veel gerelateerde sjablonen en deze vervolgens samen te implementeren via een hoofdsjabloon.

Een gekoppelde sjabloon

Het koppelen van sjablonen verwijst naar de handeling van het koppelen van afzonderlijke sjabloonbestanden, waarnaar wordt verwezen door een koppeling vanuit een hoofdsjabloon. Gekoppelde sjablonen bieden u de mogelijkheid om herbruikbare, samenstelbare en modulaire implementaties te maken die bestaan uit een groot aantal afzonderlijke ARM-sjablonen.

Wanneer u verwijst naar een gekoppelde sjabloon, moet u een URI-waarde opgeven die toegankelijk is via HTTP of HTTPS. In tegenstelling tot onze laatste eenheid, waar we een lokaal bestand als sjabloon kunnen gebruiken.

Als u gekoppelde sjablonen wilt gebruiken, moeten de sjablonen eerst worden klaargezet op een openbaar toegankelijk eindpunt, zoals GitHub of Azure Blob Storage. Gebruik een Azure-opslagaccount dat wordt beveiligd met een SAS-token (Shared Access Signature) om uw sjablonen te beveiligen tegen openbare toegang.

Als u een gekoppelde sjabloon wilt toevoegen aan uw ARM-sjabloon, voegt u een Microsoft.Resources/deployments resource en de templateLink eigenschap toe die is geconfigureerd met de locatie van de sjabloon.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-Module-sample/storage.json",
        "linked-template-two": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/mslearn-arm-Module-sample/identity.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "name": { "value": "[parameters('name')]" },
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-two')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "name": { "value": "[parameters('name')]" },
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        }
    ],
    "outputs": {
        "storageURI": {
            "type": "string",
            "value": "[reference('storage').outputs.storageEndpoint.value]"
        }
    }
}

Indien nodig, kunt u ook parameterwaarden doorgeven aan de gekoppelde sjabloon en uitvoer uit de gekoppelde sjabloon ophalen tijdens de implementatie. Parameters kunnen worden doorgegeven door een parameterbestand of inlineparameters.

{
  "name": "storage",
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2019-10-01",
  "properties": {
      "mode": "Incremental",
      "templateLink": {
          "uri": "[variables('linked-template')]",
          "contentVersion": "1.0.0.0"
      },
      "parameters": {
          "name": { "value": "[parameters('name')]" },
          "location": { "value": "[resourceGroup().location]" }
      }
  }
}

Voor kleine tot middelgrote oplossingen is één sjabloon eenvoudiger te begrijpen en te onderhouden. U kunt alle resources en waarden in één bestand bekijken. Voor geavanceerde scenario's kunt u met gekoppelde sjablonen de oplossing opsplitsen in de beoogde onderdelen. U kunt deze sjablonen eenvoudig opnieuw gebruiken voor andere scenario's.

Geneste sjabloon

Genest sjabloon verwijst naar de handeling waarbij de syntaxis van de sjabloon wordt ingesloten in een hoofdsjabloon. Geneste sjablonen maken geavanceerde implementatiescenario's mogelijk, zoals implementatie naar meerdere ARM-bereiken (Azure Resource Manager) of meerdere resourcegroepen vanuit één sjabloonbestand. In tegenstelling tot gekoppelde sjablonen, waarbij elke sjabloon wordt opgeslagen in bijbehorende sjabloonbestanden, kunt u met geneste sjablonen veel afzonderlijke sjablonen in één bestand opslaan. Er zijn verschillende redenen waarom u deze sjabloonstructuur wilt gebruiken, bijvoorbeeld wanneer u resources implementeert in meerdere resourcegroepen of implementatiebereiken.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2019-10-01",
      "name": "nestedTemplate1",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2019-04-01",
              "name": "[parameters('storageAccountName')]",
              "location": "West US",
              "sku": {
                "name": "Standard_LRS"
              },
              "kind": "StorageV2"
            }
          ]
        }
      }
    }
  ],
  "outputs": {
  }
}

Wanneer u een geneste sjabloon gebruikt, kunt u opgeven of sjabloonexpressies worden geëvalueerd binnen het bereik van de bovenliggende sjabloon of de geneste sjabloon. Het bereik bepaalt hoe parameters, variabelen en functies, zoals resourceGroup en subscription, worden omgezet.