Развертывание связанных и вложенных шаблонов ARM
По мере роста сложности развертывания может потребоваться перейти на модульный подход к развертыванию ресурсов с помощью Azure Resource Manager (ARM) связанных или вложенных шаблонов. Связанные и вложенные шаблоны — это способы разбиения развертывания на множество связанных шаблонов, а затем развертывать их вместе с помощью основного шаблона.
Связанный шаблон
связанный шаблон ссылается на действие подключения отдельных файлов шаблонов, на которые ссылается ссылка из основного шаблона. Связанные шаблоны позволяют создавать повторно используемые, составные и модульные развертывания, которые составляют множество отдельных шаблонов ARM.
При ссылке на связанный шаблон необходимо указать значение URI, доступное по протоколу HTTP или HTTPS. В отличие от последнего модуля, где можно было использовать локальный файл в качестве шаблона.
Чтобы использовать связанные шаблоны, необходимо сначала разместить их на общедоступной конечной точке, например, GitHub или хранилище BLOB-объектов Azure. Используйте учетную запись хранения Azure, защищенную маркером подписанного общего доступа (SAS), чтобы защитить ваши шаблоны от общедоступного доступа.
Чтобы добавить связанный шаблон в шаблон ARM, добавьте ресурс Microsoft.Resources/deployments
и свойство templateLink
, настроенное с расположением шаблона.
{
"$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]"
}
}
}
При необходимости можно также передать значения параметров в связанный шаблон и получить выходные данные из связанного шаблона во время развертывания. Параметры можно передавать через файл параметров или через встроенные параметры.
{
"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]" }
}
}
}
Для небольших и средних решений один шаблон проще понять и поддерживать. Все ресурсы и значения можно просмотреть в одном файле. В расширенных сценариях связанные шаблоны позволяют разбить решение на целевые компоненты. Эти шаблоны можно легко использовать для других сценариев.
Вложенный шаблон
вложенный шаблон относится к действию внедрения синтаксиса шаблона в основной шаблон. Вложенные шаблоны позволяют выполнять расширенные сценарии развертывания, такие как развертывание в нескольких областях Azure Resource Manager или нескольких группах ресурсов из одного файла шаблона. В отличие от связанных шаблонов, где каждый шаблон хранится в собственных файлах шаблонов, вложенные шаблоны позволяют хранить множество отдельных шаблонов в одном файле. Существует несколько причин, по которым может потребоваться использовать эту структуру шаблона, например при развертывании ресурсов в нескольких группах ресурсов или областях развертывания.
{
"$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": {
}
}
При использовании вложенного шаблона можно указать, вычисляются ли выражения шаблонов в пределах родительского шаблона или вложенного шаблона. Область определяет, как разрешаются такие параметры, переменные и функции, как resourceGroup
и subscription
.