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

Dokončeno

S rostoucí složitostí nasazení budete možná chtít přejít na modulární přístup k nasazení prostředků s použitím propojených nebo vnořených šablon Azure Resource Manageru (ARM). Propojené a vnořené šablony nabízejí způsob rozčlenění nasazení do mnoha souvisejících šablon a jejich společného nasazení prostřednictvím hlavní šablony.

Propojená šablona

Propojená šablona označuje připojení samostatných souborů šablon, na které odkazuje hlavní šablona. Propojené šablony umožňují vytvářet opakovaně použitelná sestavitelná modulární nasazení, která se skládají z řady jednotlivých šablon ARM.

Při odkazování na propojenou šablonu musíte uvést 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.

Abyste propojené šablony mohli použít, musíte je nejprve připravit ve veřejně přístupném koncovém bodu, jako je GitHub nebo Azure Blob Storage. Pokud použijete účet Azure Storage zabezpečený tokenem SAS (sdílený přístupový podpis), zabezpečíte šablony před veřejným přístupem.

Pokud chcete do šablony ARM přidat propojenou šablonu, přidejte Microsoft.Resources/deployments prostředek a templateLink vlastnost 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 hodnoty parametrů také předat propojené šabloně a získat výstup v době nasazení. K předání parametrů můžete použít soubor parametrů nebo vložené parametry.

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

U malých až středních řešení je jednodušší pochopit a spravovat jedinou šablonu. Všechny prostředky a hodnoty vidíte v jednom souboru. Ve složitějších scénářích umožňují propojené šablony rozdělit řešení do specializovaných komponent. Tyto šablony můžete jednoduše opakovaně použít v jiných scénářích.

Vnořená šablona

Vnořená šablona znamená, že syntaxe šablony je vložená uvnitř hlavní šablony. Vnořené šablony umožňují scénáře pokročilého nasazení, například nasazení do několika rozsahů ARM nebo do několika skupin prostředků z jednoho souboru šablony. Na rozdíl od propojených šablon, kdy je každá šablona uložená ve vlastním souboru šablony, umožňují vnořené šablony ukládat několik 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 vyhodnotí v rozsahu nadřazené nebo vnořené šablony. Rozsah určuje způsob vyhodnocování parametrů, proměnných a funkcí, jako jsou resourceGroup a subscription.