Модульная структура шаблонов

Завершено

При использовании шаблонов 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"
            }
          }
        ]
      }
    }
  }
]

Заметка

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

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

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

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

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

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

Заметка

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

Заметка

Для связанных и вложенных шаблонов можно использовать только режим развертывания 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')]"}
          }
      }
    },


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

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

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

Вы добавляете этот маркер SAS в URI для связанного шаблона.

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

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