Рубрики
Uncategorized

Введение в спецификации шаблона Azure Arm

В предыдущем посте, связанных шаблонов в шаблоне ARM, я продемонстрировал, как модулизировать шаблоны с помощью u … Tagged с помощью Azure, DevOps, IAC.

В предыдущем посте, связанных шаблонов в шаблоне 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»