Distribuera länkade och kapslade ARM-mallar

Slutförd

Om distributionen börjar bli komplex kan du byta till en modulär metod och distribuera resurser med hjälp av länkade eller kapslade Azure Resource Manager-mallar. Länkade och kapslade mallar är olika sätt att dela upp distributionen i flera relaterade mallar och sedan distribuera dem tillsammans via en huvudmall.

Länkad mall

En länkad mall innebär att man kopplar samman separata mallfiler, som refereras av en länk från en huvudmall. Med länkade mallar kan du skapa återanvändbara, sammansättningsbara och modulära distributioner som består av många enskilda ARM-mallar.

När du refererar till en länkad mall måste du ange ett URI-värde som kan nås via HTTP eller HTTPS. Till skillnad från vår senaste lektion, där vi kan använda en lokal fil som mall.

För att använda länkade mallar måste du först mellanlagra mallarna på en allmänt tillgänglig slutpunkt, till exempel GitHub eller Azure Blob Storage. Använd ett Azure-lagringskonto som skyddas av en SAS-token (signatur för delad åtkomst) för att skydda dina mallar från offentlig åtkomst.

Om du vill lägga till en länkad mall i ARM-mallen lägger du till en Microsoft.Resources/deployments resurs och egenskapen templateLink som konfigurerats med mallens plats.

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

Vid behov kan du också skicka in parametervärden i den länkade mallen och få utdata från den länkade mallen vid distributionstillfället. Du kan skicka parametrar antingen via en parameterfil eller via infogade parametrar.

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

För små till medelstora lösningar är en enskild mall enklare att förstå och underhålla. Du kan se alla resurser och värden i en enda fil. I avancerade scenarier kan du använda länkade mallar till att dela upp lösningen i riktade komponenter. Du kan enkelt återanvända dessa mallar för andra scenarier.

Kapslad mall

En kapslad mall innebär att man bäddar in mallsyntaxen i en huvudmall. Med kapslade mallar kan du göra avancerade distributioner, till exempel till flera Azure Resource Manager-omfång eller flera resursgrupper, från en enda mallfil. Till skillnad från länkade mallar, där varje mall lagras i en egen mallfil, kan kapslade mallar lagra flera olika mallar i en fil. Det finns flera orsaker till att du kanske vill använda den här mallstrukturen, till exempel när du distribuerar resurser till flera resursgrupper eller distributionsomfång.

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

Om du använder en kapslad mall kan du ange om malluttryck ska utvärderas inom omfånget för den överordnade mallen eller den kapslade mallen. Omfånget avgör hur parametrar, variabler och funktioner som resourceGroup och subscription matchas.