Разбиение шаблонов на модули

Завершено

При использовании шаблонов Azure Resource Manager оптимальным способом их разделения на модули является разбивка на отдельные компоненты.

Основным методом для выполнения этой задачи является использование связанных шаблонов.

Это позволяет разбить решение на целевые компоненты и многократно использовать их в различных развертываниях.

Связанный шаблон

Добавьте ресурс развертывания в основной шаблон, чтобы связать один шаблон с другим.

"resources": [
  {
      "apiVersion": "2017-05-10",
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "properties": {
          "mode": "Incremental",
          <link-to-external-template>
      }
  }
]


Вложенный шаблон

Можно также вложить шаблон в основной шаблон, использовать свойство шаблона и указать синтаксис шаблона.

Это в некоторой степени способствует модуляризации, но разделение различных компонентов может привести к формированию основного файла большого размера, поскольку все элементы находятся в одном файле.

"resources": [
  {
    "apiVersion": "2017-05-10",
    "name": "nestedTemplate",
    "type": "Microsoft.Resources/deployments",
    "properties": {
      "mode": "Incremental",
      "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
          {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageName')]",
            "apiVersion": "2015-06-15",
            "location": "West US",
            "properties": {
              "accountType": "Standard_LRS"
            }
          }
        ]
      }
    }
  }
]

Примечание.

Для вложенных шаблонов нельзя использовать параметры или переменные, определенные в самом вложенном шаблоне. Можно использовать параметры и переменные только из основного шаблона.

Свойства, указываемые для ресурса развертывания, зависят от связывания с внешним шаблоном или вложения встроенного шаблона в основной шаблон.

Режимы развертывания

При развертывании ресурсов с помощью шаблонов можно выбрать один из трех вариантов:

  • Проверка. При использовании этого варианта выполняется компиляция шаблонов, проверка развертывания, обеспечение работоспособности шаблона (например, отсутствие циклических зависимостей) и применение правильного синтаксиса.
  • Добавочный режим (по умолчанию). В этом режиме развертываются только компоненты, определенные в шаблоне. Он не удаляет и не изменяет ресурсы, которые не определены в шаблоне. Например, если вы развернули виртуальную машину с помощью шаблона, а затем переименовали ее в шаблоне, первая развернутая виртуальная машина останется после повторного запуска шаблона. Это режим по умолчанию.
  • Полный режим. Resource Manager удаляет имеющиеся в группе ресурсы, которые не указаны в шаблоне. Например, после развертывания шаблона присутствовать в группе ресурсов будут только ресурсы, определенные в шаблоне. Рекомендуется использовать этот режим для рабочих сред, чтобы достичь идемпотентности в шаблонах развертывания.

Выполняя развертывание с помощью PowerShell, для установки режима развертывания используйте параметр Mode в соответствии с примером вложенного шаблона, приведенного ранее в этом разделе.

Примечание.

Рекомендуется использовать одну группу ресурсов для каждого развертывания.

Примечание.

Вы можете использовать только режим развертывания incremental для связанных и вложенных шаблонов.

Внешний шаблон и внешние параметры

Связать внешний шаблон и файл параметров можно с помощью свойств templateLink и parametersLink.

При связывании с шаблоном убедитесь, что этот шаблон доступен службе Resource Manager.

Например, нельзя указать локальный файл или файл, доступный только в локальной сети.

Вы можете предоставить только значение универсального кода ресурса (URI), которое включает HTTP или HTTPS.

Один из вариантов — поместить связанный шаблон в учетную запись хранения и использовать для него код URI.

Можно также указать встроенный параметр. Однако встроенный параметр и ссылку на файл параметров нельзя использовать одновременно.

В следующем примере используется параметр templateLink:

  "resources": [
    {
      "name": "linkedTemplate",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
          "mode": "Incremental",
          "templateLink": {
              "uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
          },
          "parameters": {
              "storageAccountName":{"value": "[variables('storageAccountName')]"},
              "location":{"value": "[parameters('location')]"}
          }
      }
    },


Защита внешнего шаблона

Хотя связанный шаблон должен быть доступен извне, он не должен быть общедоступным.

Можно добавить шаблон в закрытую учетную запись хранения, доступную только владельцу учетной записи хранения, создав маркеры подписанного URL-адреса (SAS), чтобы разрешить доступ во время развертывания.

Этот маркер SAS добавляется в универсальный код ресурса (URI) связанного шаблона.

Несмотря на то, что маркер передается в виде защищенной строки, URI связанного шаблона, включая маркер SAS, регистрируется в операциях развертывания.

Чтобы ограничить доступность, можно также задать дату окончания срока действия маркера.