Nasazení propojených a vnořených šablon ARM

Dokončeno

S rostoucí složitostí nasazení můžete chtít přejít na modulární přístup k nasazování prostředků pomocí Azure Resource Manageru (ARM) propojených nebo vnořených šablon. Propojené a vnořené šablony představují způsoby, jak rozdělit nasazení do mnoha souvisejících šablon a pak je nasadit společně prostřednictvím hlavní šablony.

Propojená šablona

propojená šablona odkazuje na propojení samostatných souborů šablon, na které odkazuje odkaz z hlavní šablony. Propojené šablony umožňují vytvářet opakovaně použitelná, kompozibilní a modulární nasazení, která tvoří mnoho jednotlivých šablon ARM.

Při odkazování na propojenou šablonu musíte zadat hodnotu identifikátoru URI, která je přístupná přes protokol HTTP nebo HTTPS. Na rozdíl od naší poslední lekce, kde bychom mohli jako šablonu použít místní soubor.

Pokud chcete používat propojené šablony, musíte je nejprve vytvořit na veřejně přístupném koncovém bodu, jako je GitHub nebo Azure Blob Storage. K zabezpečení šablon před veřejným přístupem použijte účet úložiště Azure zabezpečený tokenem sdíleného přístupového podpisu (SAS).

Pokud chcete do šablony ARM přidat propojenou šablonu, přidejte prostředek Microsoft.Resources/deployments a vlastnost templateLink nakonfigurovanou s umístěním šablony.

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

V případě potřeby můžete také předat hodnoty parametrů do propojené šablony a získat výstup z propojené šablony v době nasazení. Parametry lze předat buď prostřednictvím souboru parametrů, nebo prostřednictvím vložených parametrů.

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

Pro malá až střední řešení je jedna šablona snazší na pochopení a údržbu. Všechny prostředky a hodnoty můžete zobrazit v jednom souboru. V případě pokročilých scénářů vám propojené šablony umožňují rozdělit řešení do cílových komponent. Tyto šablony můžete snadno použít pro jiné scénáře.

Vnořená šablona

Vnořená šablona se týká aktu vkládání syntaxe šablony do hlavní šablony. Vnořené šablony umožňují pokročilé scénáře nasazení, jako je nasazení do více oborů Azure Resource Manageru nebo více skupin prostředků z jednoho souboru šablony. Na rozdíl od propojených šablon, kde je každá šablona uložená ve svých vlastních souborech šablon, umožňují vnořené šablony ukládat mnoho jednotlivých šablon do jednoho souboru. Existuje několik důvodů, proč byste mohli chtít tuto strukturu šablony použít, například když nasazujete prostředky do více skupin prostředků nebo rozsahů nasazení.

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

Při použití vnořené šablony můžete určit, jestli se výrazy šablony vyhodnocují v rámci oboru nadřazené šablony nebo vnořené šablony. Obor určuje způsob řešení parametrů, proměnných a funkcí, jako jsou resourceGroup a subscription.