В предыдущем посте, связанных шаблонов в шаблоне ARM, я продемонстрировал, как модулировать шаблоны, используя метод связывания шаблона. Цель состоит в том, чтобы создать несколько маленьких шаблонов рук и центральный шаблон, организующий развертывание этих детских шаблонов. Есть много ограничений на эту технику. Во -первых, вам нужно разместить шаблон своего ребенка в глобально доступном месте, например, репозиторий GitHub или учетная запись Azure Storage с ключом SAS. Во-вторых, вы не можете использовать управление Resource Manager Resource Resources с вашим связанным шаблоном.
Управление версией является третьим ограничением. С шаблонами ARM во внешнем хранилище управление версиями управляется свойством ContentVersion. Это ручный процесс, и вы должны убедиться, что шаблоны и шаблоны Calling и Child используют одну и ту же версию.
Спецификации шаблонов рассматривают эти ограничения. Шаблонные спецификации — это ресурс Azure, а не внешнее хранилище, как и любой другой ресурс, вы можете добавить роли и разрешения. Спецификация шаблона — это объект, где вы можете хранить шаблон JSON ARM и его разные версии. Если вы хотите развернуть версию этого шаблона, вы можете позвонить в шаблон ARM, используя ссылку на объект и версию, которую вы хотите развернуть.
Чтобы создать спецификацию шаблона, вам нужен файл шаблона JSON и группа ресурсов. Вам придется дать имя в версию шаблона, которую вы загрузите. Вам нужно будет использовать последнюю версию AZ PowerShell Module или AZ CLI.
Например, если у вас есть этот шаблон с именем vnet.json, чтобы создать ресурс Vnet
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "vnetName": { "type": "string" }, "vnetPrefix": { "type": "string" }, "subnetName": { "type": "string" }, "subnetPrefix": { "type": "string" } }, "variables": {}, "resources": [ { "name": "[parameters('vnetName')]", "type": "Microsoft.Network/virtualNetworks", "apiVersion": "2019-11-01", "location": "[resourceGroup().location]", "properties": { "addressSpace": { "addressPrefixes": [ "[parameters('vnetPrefix')]" ] }, "subnets": [ { "name": "[parameters('subnetName')]", "properties": { "addressPrefix": "[parameters('subnetPrefix')]" } } ] } } ], "outputs": {} }
Для этого шаблона я выбираю «vnet-1-subnet.0.1» в качестве имени версии. Чтобы создать спецификацию шаблона, вам понадобится группа ресурсов, местоположение и имя для спецификации шаблона. Вам необходимо предоставить данные шаблона, данные JSON, чтобы создать объект. Вы также можете добавить теги в ресурс Spect Spec, как и любой другой ресурс в Azure. Вы также можете добавить описание, описание версии и имя отображения.
Чтобы создать шаблоны для файла vnet.json.
New-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS -Version "vnet-1-subnet.0.1" -location westeurope -TemplateFile ./storage.json -tags @{"project"="vnet design"} -Description "store VNET ARM Template" -VersionDescription "Vnet with one subnet" -DisplayName "Vnet deployment"
Представьте, что вы хотите сохранить другую версию с двумя подсетями вместо одной. После изменения в файле шаблона вы можете запустить одну и ту же команду с изменением версии и версии.
New-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS -Version "vnet-2-subnet.0.1" -location westeurope -TemplateFile ./storage.json -tags @{"project"="vnet design"} -Description "store VNET ARM Template" -VersionDescription "Vnet with two subnet" -DisplayName "Vnet deployment"
Как ресурс Azure, вы также можете создать спецификацию шаблона через шаблон ARM. Есть два ресурса шаблона ARM The Microsoft. Ресурсы/Шаблоны и его дочерние ресурсы Microsoft. Ресурсы/Шаблоны ПЕЧАТИ/ВЕРИИ. Взгляните на этот шаблон.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "templateSpecsName": { "type": "String" } }, "variables": {}, "resources": [ { "type": "Microsoft.Resources/templateSpecs", "apiVersion": "2019-06-01-preview", "name": "[parameters('templateSpecsName')]", "location": "westeurope", "tags": {}, "properties": { } }, { "type": "Microsoft.Resources/templateSpecs/versions", "apiVersion": "2019-06-01-preview", "name": "[concat(parameters('templateSpecsName'), '/1.0.0.b')]", "location": "westeurope", "dependsOn": [ "[resourceId('Microsoft.Resources/templateSpecs', parameters('templateSpecsName'))]" ], "properties": { "artifacts": [], "template": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "functions": [], "variables": {}, "resources": [ { "name": "udsiuisdudisudsi", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "location": "[resourceGroup().location]", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } } ], "outputs": {} } } } ] }
Вы можете создать версию шаблона внутри Microsoft. Ресурсы/Шаблоны/версии
В качестве ресурса Azure вы можете назначить роли вашему объекту Spec Spec. Изображение ситуации, когда у вас есть команда, которая разрабатывает шаблоны, и директор службы, используемый для развертывания тех же шаблонов. Вы можете добавить роли участника в команду DEV и роль читателя к директору службы.
New-AzRoleAssignment -ObjectId (Get-AzADGroup -DisplayName 'arm-team').id -RoleDefinitionName "Contributor" -Scope "/subscriptions/XXXXX-6200-4226-bac3-XXXXXXXX/resourceGroups/01-TPLSPECS/providers/Microsoft.Resources/templateSpecs/testarm01" New-AzRoleAssignment -ObjectId (Get-AzADServicePrincipal -DisplayName 'spArmTemplate').id -RoleDefinitionName "Reader" -Scope "/subscriptions/XXXXX-6200-4226-bac3-XXXXXXXX/resourceGroups/01-TPLSPECS/providers/Microsoft.Resources/templateSpecs/testarm01"
Эти две команды PowerShell позволяют члену команды ARM создавать, обновлять и удалять версии в объекте Spec Spec Testarm01 и позволяют основному сервису SparmTemplate извлекать данные из одного и того же объекта.
Чтобы получить информацию об объекте TemplatesPec, вы можете использовать командлет Get-AZTEMPLATESPEC.
Get-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS
Он возвращает объект pstemplatespec
Id : /subscriptions/XXXXXXXX/resourceGroups/01-TPLSPECS/providers/Microsoft.Resources/templateSpecs/VNET Name : VNET DisplayName : Vnet deployment ResourceGroupName : 01-TPLSPECS SubscriptionId : XXXXXXXXXXX Location : westeurope Tags : {[project, vnet design]} Description : store VNET ARM Template Versions : {vnet-1-subnet.0.1, vnet-2-subnet.0.1} CreationTime(UTC) : 01/29/2021 21:49:33 LastModifiedTime(UTC) : 01/29/2021 22:16:51
Также можно экспортировать шаблон из версии спецификации шаблона, используя командлет Export-AztemplatesPec. Вы должны предоставить название спецификации шаблона и версию вместе с локальной папкой. Cmdlet создаст папку, если ее не существует, и экспортировать шаблон JSON под именем .. json
Export-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS -Version "vnet-1-subnet.0.1" -OutputFolder v1
После того, как ваши версии шаблона будут доступны для развертывания и загрузки в объекте спецификации шаблона, вы можете начать использовать их в своих развертываниях. Вызов спецификации шаблона Используйте тот же тип ресурса, который вы используете с традиционным шаблоном, связывающим Technic; Microsoft. Ресурс/развертывание. Но обязательно используйте последнюю версию API. Вместо использования URI для свойства TemplateLink вам нужно будет использовать идентификатор со ссылкой на объект версии Spec Spec Template, который вам необходимо использовать.
В моем примере, если я хочу использовать версию «Vnet-1-Subnet.0.1» Spept Spect в группе ресурсов 01-tplSpecs. Ссылка будет:
«[ResourceId (’01 -Tplspecs ‘,’ Microsoft. Ресурсы/Шаблоны Пеки/Версии ‘,’ Vnet ‘,’ vnet-1-subnet.0.1 ‘)] «
Шаблон со всеми параметрами
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [ { "apiVersion": "2020-06-01", "name": "demo-tpl-spec01", "type": "Microsoft.Resources/deployments", "properties": { "mode": "Incremental", "templateLink": { "id": "[resourceId('01-TPLSPECS', 'Microsoft.Resources/templateSpecs/versions', 'VNET', 'vnet-1-subnet.0.1')]" }, "parameters": { "vnetName": { "value": "vnet01" }, "vnetPrefix": { "value": "10.0.0.0/21" }, "subnetName": { "value": "subnet01" }, "subnetPrefix": { "value": "10.0.0.0/24" } } } } ], "outputs": {} }
Шаблон Spec предлагает новый способ управления связанными шаблонами. Вместо того, чтобы полагаться на внешние сервисы, такие как GitHub или другие решения для хранения в Интернете, или учетная запись Azure Storage, он объединяет ресурс Azure. Используя ресурс Azure для управления связанными шаблонами в качестве огромного преимущества, единой системы управления доступом, контроля доступа на основе ролей Azure.
Вы можете сохранить несколько версий одного шаблона внутри спецификации шаблона и создать спецификацию шаблона для каждого типа шаблона. Вы также можете использовать один шаблон Spec Per Project и размещать любой тип шаблона, если хотите.
Чтобы узнать больше о спецификациях шаблона рук, посетите Microsoft Doc Page
Оригинал: «https://dev.to/omiossec/azure-template-specs-1h42»