Развертывание связанных и вложенных шаблонов Resource Manager
По мере увеличения сложности развертывания может потребоваться перейти на модульный подход к развертыванию ресурсов с помощью связанных или вложенных шаблонов Azure Resource Manager (ARM). Связанные и вложенные шаблоны — это способ разделения развертывания на множество связанных друг с другом шаблонов, которые развертываются вместе с помощью основного шаблона.
Связанный шаблон
Под связанными шаблонами понимается процесс соединения отдельных файлов шаблонов, на которые ссылается основной шаблон. Связанные шаблоны позволяют создавать многократно используемые компонуемые модульные развертывания, состоящие из множества отдельных шаблонов Resource Manager.
Для ссылки на связанный шаблон необходимо предоставить значение URI, доступное по протоколу HTTP или HTTPS. В отличие от последнего урока, где можно использовать локальный файл в качестве шаблона.
Чтобы использовать связанные шаблоны, их сначала необходимо разместить в общедоступной конечной точке, например GitHub или Хранилище BLOB-объектов Azure. При использовании учетной записи хранения Azure ее следует защитить маркером подписанного URL-адреса (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
.