Создание динамических схем с использованием параметров

Важно!

11 июля 2026 г. схемы (предварительная версия) будут объявлены нерекомендуемыми. Перенос существующих определений и назначений схем в спецификации шаблонов и стеки развертывания. Артефакты схемы необходимо преобразовать в шаблоны JSON ARM или файлы Bicep, используемые для определения стеков развертывания. Чтобы узнать, как создать артефакт в качестве ресурса ARM, см. следующие статьи:

Полностью определенная схема с различными артефактами, такими как группы ресурсов, шаблоны Azure Resource Manager (шаблоны ARM), политики или назначения ролей, позволяет быстро и согласовано создавать объекты в Azure. Azure Blueprint поддерживает параметры для обеспечения гибкого использования этих конструктивных шаблонов и контейнеров многократного использования. Параметры обеспечивают гибкий способ изменения свойств артефактов, развернутых с помощью схемы, как при определении, так и при назначении.

Простым примером является артефакт группы ресурсов. При создании группы ресурсов для нее нужно указать два обязательных значения: имя и расположение. При добавлении в схему группы ресурсов в случае отсутствия параметров это имя и расположение нужно указывать при каждом использовании схемы. В результате этих повторяющихся действий при каждом использовании схемы будут создаваться артефакты в одной группе ресурсов. Ресурсы в пределах этой группы ресурсов будут дублироваться и вызывать конфликт.

Примечание

Если в разных схемах содержится группа ресурсов с одним именем, это не является сложностью. Если группа ресурсов, включенная в схему, уже существует, схема продолжит создавать связанные артефакты в этой группе ресурсов. Это может привести к конфликту, так как в подписке не могут быть два ресурса с одинаковым именем и типом.

Решить эту проблему позволяют параметры. С помощью Azure Blueprints можно задавать значения для каждого свойства артефакта во время назначения подписке. Параметры позволяют повторно использовать схему, которая создает группу ресурсов и другие ресурсы в рамках одной подписки без конфликта.

Параметры схемы

С помощью REST API параметры могут быть созданы в самой схеме. Эти параметры отличаются от параметров всех поддерживаемых артефактов. Когда параметр создается в схеме, он может использоваться ее артефактами. Примером может быть префикс для именования группы ресурсов. Артефакт может использовать параметр схемы для создания "в основном динамического" параметра. Так как параметр может быть определен во время назначения, этот шаблон обеспечивает согласованность в соответствии с правилами именования. Сведения о рекомендуемых шагах см. в разделе о задании статических параметров (параметров уровня схемы).

Использование параметров secureString и secureObject

Хотя артефакт шаблона ARM поддерживает параметры типов secureString и secureObject, Azure Blueprints требует, чтобы каждый из них был связан с Azure Key Vault. Эта мера безопасности предотвращает рискованную практику хранения секретов вместе со схемами и способствует использованию безопасных шаблонов. Azure Blueprints поддерживает эту меру безопасности, обнаруживая добавление любого из параметров secure в артефакт шаблона ARM. Затем во время назначения служба предлагает задать такие свойства Key Vault для каждого обнаруженного параметра безопасности:

  • идентификатора ресурса Key Vault;
  • имени секрета Key Vault;
  • версии секрета Key Vault.

Если в назначении схемы используется управляемое удостоверение, назначаемое системой, соответствующее хранилище Key Vault должно существовать в той же подписке, которой назначено определение схемы.

Если в назначении схемы используется управляемое удостоверение, назначаемое пользователем, соответствующее хранилище Key Vault может существовать в централизованной подписке. Управляемому удостоверению необходимо предоставить соответствующие права в отношении Key Vault до назначения схемы.

Важно!

В обоих случаях Key Vault необходимо предоставить доступ к Azure Resource Manager для развертывания шаблона на странице Политики доступа. Инструкции о том, как включить эту функцию, см. в разделе Включение развертывания шаблона.

Дополнительные сведения об Azure Key Vault см. в этой статье.

Типы параметров

Статические параметры

Значение параметра, заданное в определении схемы называется статический параметр, так как при каждом использовании схемы развертывается артефакт с использованием этого статического значения. В примере группы ресурсов это может не иметь смысла для имени группы ресурсов, но может быть полезным для расположения. Затем при каждом назначении схемы в том же расположении создавалась бы группа ресурсов (с определенным именем во время назначения). Такая гибкость позволяет выбирать, какие свойства являются обязательными и что можно изменить во время назначения.

Установка статических параметров на портале

  1. Выберите Все службы в левой области. Найдите и выберите пункт Схемы.

  2. Выберите Определения схем на странице слева.

  3. Выберите существующую схему, а затем щелкните Изменить схему ИЛИ + Создать схему и введите данные на вкладке Основные сведения.

  4. Выберите Далее: артефакты ИЛИ перейдите на вкладку Артефакты.

  5. Для добавленных в схему артефактов с заданными параметрами отображается строка наподобие Заполнено X из Y параметров в столбце Параметры. Выберите строку артефакта, чтобы изменить его параметры.

    Снимок экрана: определения схемы с выделенным элементом

  6. На странице Изменение артефакта отобразятся значения параметров, соответствующие выбранному артефакту. Каждый параметр артефакта включает заголовок, поле значения и поле для установки флажка. Снимите флажок для преобразования в статический параметр. В примере ниже статическим параметром является только расположение, так как для него не установлен флажок, а флажок для имени группы ресурсов установлен.

    Снимок экрана: статические параметры в артефакте схемы.

Установка статических параметров из REST API

В каждом универсальном коде ресурса (URI) REST API есть переменные, которые необходимо заменить собственными значениями:

  • {YourMG} — замените это значение именем своей группы управления.
  • {subscriptionId} — замените это значение идентификатором своей подписки.
Параметр уровня схемы

При создании схемы через REST API можно создать ее параметры. Для этого используйте следующий универсальный код ресурса (URI) REST API и формат текста:

  • Универсальный код ресурса (URI) REST API

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint?api-version=2018-11-01-preview
    
  • Текст запроса

    {
        "properties": {
            "description": "This blueprint has blueprint level parameters.",
            "targetScope": "subscription",
            "parameters": {
                "owners": {
                    "type": "array",
                    "metadata": {
                        "description": "List of AAD object IDs that is assigned Owner role at the resource group"
                    }
                }
            },
            "resourceGroups": {
                "storageRG": {
                    "description": "Contains the resource template deployment and a role assignment."
                }
            }
        }
    }
    

После создания параметра уровня схемы его можно использовать в артефактах, добавленных в эту схему. В следующем примере REST API создается артефакт назначения ролей в схеме и используется параметр уровня схемы.

  • Универсальный код ресурса (URI) REST API

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/roleOwner?api-version=2018-11-01-preview
    
  • Текст запроса

    {
        "kind": "roleAssignment",
        "properties": {
            "resourceGroup": "storageRG",
            "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
            "principalIds": "[parameters('owners')]"
        }
    }
    

В этом примере в свойстве principalIds использовался параметр уровня схемы владельцев: было указано значение [parameters('owners')]. Настройка параметра артефакта с помощью параметра уровня схемы — это так же пример статического параметра. Параметр уровня схемы нельзя задать во время ее назначения и он будет иметь одинаковое значение при каждом назначении.

Параметр уровня артефакта

Создание статических параметров в артефакте аналогично, но вместо функции parameters() используется прямое значение. В следующем примере создаются два статических параметра: tagName и tagValue. Значение каждого из них предоставляется напрямую, и вызов функции не используется.

  • Универсальный код ресурса (URI) REST API

    PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint/artifacts/policyStorageTags?api-version=2018-11-01-preview
    
  • Текст запроса

    {
        "kind": "policyAssignment",
        "properties": {
            "description": "Apply storage tag and the parameter also used by the template to resource groups",
            "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
            "parameters": {
                "tagName": {
                    "value": "StorageType"
                },
                "tagValue": {
                    "value": "Premium_LRS"
                }
            }
        }
    }
    

Динамические параметры

Противоположностью статического параметра является динамический параметр. Это параметр не определен в схеме, но определяется при каждом ее назначении. В примере группы ресурсов динамический параметр имеет смысл использовать для имени группы ресурсов. Он предоставляет разные имена при каждом назначении схемы. Список функций схемы см. в справочнике по функциям схем.

Установка динамических параметров на портале

  1. Выберите Все службы в левой области. Найдите и выберите пункт Схемы.

  2. Выберите Определения схем на странице слева.

  3. Щелкните правой кнопкой мыши схему, которую нужно назначить. Выберите Назначить схему ИЛИ выберите нужную схему, а затем нажмите кнопку Назначить схему.

  4. На странице Назначение схемы перейдите к разделу Параметры артефакта. Каждый артефакт с хотя бы одним динамическим параметром отображается вместе с параметрами конфигурации. Перед назначением схемы укажите требуемые значения параметров. В примере ниже имя является динамическим параметром, который нужно определить для завершения назначения схемы.

    Снимок экрана: настройка динамических параметров при назначении схемы.

Установка динамических параметров из REST API

Установка динамических параметров во время назначения выполняется путем непосредственного ввода нужного значения. Вместо использования функции, такой как parameters(), указывается значение в виде соответствующей строки. Артефакты для группы ресурсов определяются с помощью имени шаблона и свойств имени и расположения. Все остальные параметры для добавленных артефактов определены в разделе параметров с помощью пары ключей <имени> и значения. Если схема сконфигурирована для динамического параметра, который не указан во время назначения, это назначение завершится сбоем.

  • Универсальный код ресурса (URI) REST API

    PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Blueprint/blueprintAssignments/assignMyBlueprint?api-version=2018-11-01-preview
    
  • Текст запроса

    {
        "properties": {
            "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}  /providers/Microsoft.Blueprint/blueprints/MyBlueprint",
            "resourceGroups": {
                "storageRG": {
                    "name": "StorageAccount",
                    "location": "eastus2"
                }
            },
            "parameters": {
                "storageAccountType": {
                    "value": "Standard_GRS"
                },
                "tagName": {
                    "value": "CostCenter"
                },
                "tagValue": {
                    "value": "ContosoIT"
                },
                "contributors": {
                    "value": [
                        "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                        "38833b56-194d-420b-90ce-cff578296714"
                    ]
                  },
                "owners": {
                    "value": [
                        "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                        "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                    ]
                }
            }
        },
        "identity": {
            "type": "systemAssigned"
        },
        "location": "westus"
    }
    

Дальнейшие действия