Wdrażanie połączonych i zagnieżdżonych szablonów usługi ARM

Ukończone

Wraz ze wzrostem złożoności wdrożenia coraz atrakcyjniejsza może wydawać się metoda modułowa wdrażania zasobów przy użyciu połączonych lub zagnieżdżonych szablonów usługi Azure Resource Manager (ARM). Dzięki połączonym i zagnieżdżonym szablonom można podzielić wdrożenie na wiele powiązanych szablonów, a następnie wdrażać je razem za pomocą głównego szablonu.

Szablon połączony

Szablon połączony odnosi się do konsolidowania oddzielnych plików szablonów przywoływanych za pomocą linku z głównego szablonu. Szablony połączone umożliwiają tworzenie składalnych, modułowych wdrożeń wielokrotnego użytku składających się z wielu pojedynczych szablonów usługi ARM.

W przypadku odwoływania się do połączonego szablonu należy podać wartość identyfikatora URI, do której można uzyskać dostęp za pośrednictwem protokołu HTTP lub HTTPS. W przeciwieństwie do naszej ostatniej lekcji, w której można użyć pliku lokalnego jako szablonu.

Aby można było korzystać z szablonów połączonych, należy najpierw umieścić te szablony w publicznie dostępnym punkcie końcowym, takim jak usługa GitHub lub Azure Storage Blob. Użyj konta usługi Azure Storage zabezpieczonego przed publicznym dostępem za pomocą tokenu sygnatury dostępu współdzielonego (SAS).

Aby dodać połączony szablon do szablonu usługi ARM, dodaj Microsoft.Resources/deployments zasób i templateLink właściwość skonfigurowaną z lokalizacją szablonu.

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

W razie konieczności można także przekazać wartości parametrów do szablonu połączonego i uzyskać dane wyjściowe z szablonu połączonego podczas wdrażania. Parametry można przekazywać za pomocą pliku parametrów lub parametrów śródwierszowych.

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

W przypadku małych i średnich rozwiązań łatwiej jest zrozumieć i utrzymywać jeden szablon. Wszystkie zasoby i wartości są widoczne w jednym pliku. W przypadku zaawansowanych scenariuszy połączone szablony umożliwiają podzielenie rozwiązania na składniki przeznaczone do realizacji. Te szablony mogą być bez problemu używane wielokrotnie w innych scenariuszach.

Szablon zagnieżdżony

Szablon zagnieżdżony odwołuje się do osadzania składni szablonu w szablonie głównym. Szablony osadzone umożliwiają realizowanie zaawansowanych scenariuszy wdrażania, takich jak wdrażanie w wielu zakresach usługi Azure Resource Manager lub w wielu grupach zasobów za pomocą jednego pliku szablonu. W przeciwieństwie do szablonów połączonych, w przypadku których każdy szablon jest przechowywany we własnym pliku szablonów, zagnieżdżone szablony umożliwiają przechowywanie wielu pojedynczych szablonów w jednym pliku. Istnieje kilka powodów, dla których warto użyć tej struktury szablonu, na przykład podczas wdrażania zasobów w wielu grupach zasobów lub zakresach wdrażania.

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

Podczas korzystania z szablonu zagnieżdżonego można określić, czy wyrażenia szablonów mają być oceniane w zakresie szablonu nadrzędnego, czy szablonu zagnieżdżonego. Zakres określa, jak są rozpoznawane parametry, zmienne i funkcje, takie jak resourceGroup i subscription.