Модульная структура шаблонов
При использовании шаблонов 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, регистрируется в операциях развертывания.
Чтобы ограничить экспозицию, можно также задать дату окончания срока действия маркера.