重要
2026 年 7 月 11 日,蓝图(预览版)将弃用。 将现有蓝图定义和分配迁移到 模板规格。 蓝图工件将被转换为用于定义部署堆栈的 ARM JSON 模板或 Bicep 文件。 若要了解如何将工件创建为 ARM 资源,请参阅:
经过完全定义的蓝图,包括各种项目,例如资源组、Azure 资源管理器模板(ARM 模板)、策略或角色分配,提供了在 Azure 内快速且一致地创建对象的能力。 若要灵活使用这些可重用的设计模式和容器,Azure Blueprints支持参数。 参数在定义和分配期间均创建灵活性,以更改蓝图部署的项目的属性。
一个简单的示例是资源组工件。 创建资源组后,必须向其提供两个所需值:名称和位置。 将资源组添加到蓝图时,如果参数不存在,则应为蓝图的每次使用定义该名称和位置。 这种重复会导致每次使用蓝图时都在同一资源组中创建项目。 资源组内的资源会重复并产生冲突。
注释
对于两个不同的蓝图,包含具有相同名称的资源组不是问题。 如果包含在蓝图中的资源组已存在,蓝图会继续在该资源组中创建相关项目。 这可能会产生冲突,因为订阅中不能存在具有相同名称和资源类型的两个资源。
使用参数可以解决此问题。 Azure Blueprints允许在分配给订阅期间定义项目的每个属性的值。 通过参数还可以重复使用在一个订阅中创建资源组和其他资源的蓝图,且不会产生冲突。
蓝图参数
通过 REST API 可以在蓝图自身上创建参数。 这些参数不同于每个受支持工件中的参数。 在蓝图上创建参数时,该蓝图中的项目可使用该参数。 示例可能是资源组命名的前缀。 工件可以使用蓝图参数创建“大部分动态”的参数。 由于还可以在分配期间定义参数,因此,此模式可以实现遵守命名规则的一致性。 有关步骤,请参阅设置静态参数 - 蓝图级别参数。
使用 secureString 和 secureObject 参数
虽然 ARM 模板 artifact支持 secureString 和 secureObject 类型的参数,但Azure Blueprints要求每个参数都与Azure Key Vault连接。 此安全措施可防止将机密与蓝图一起存储的不安全做法,并有利于采用安全模式。 Azure Blueprints 支持此安全措施,检测 ARM 模板中涉及任一安全参数 artifact。 然后,服务会根据检测到的安全参数在分配期间提示以下Key Vault属性:
- Key Vault 资源 ID
- Key Vault机密名称
- Key Vault机密版本
如果蓝图分配使用 系统分配的托管标识,则引用的 Key Vault 必须存在于分配该蓝图定义的同一订阅中。
如果蓝图分配使用用户分配的托管标识,则引用的 Key Vault 可能会存在于集中订阅中。 在分配蓝图之前,必须为托管标识授予适当的 Key Vault 权限。
重要
在这两种情况下,Key Vault 必须在 访问策略页面上配置 启用模板部署的 Azure Resource Manager 访问权限。 有关如何启用此功能的说明,请参阅 Key Vault - 启用模板部署。
有关Azure Key Vault的详细信息,请参阅 Key Vault 概述。
参数类型
静态参数
蓝图定义中定义的参数值称为静态参数,因为每次使用蓝图都会部署使用该静态值的项目。 在资源组示例中,这对资源组名称没有意义,但可能对位置有意义。 然后,蓝图的每次分配都会在同一位置创建资源组,无论在分配时该资源组被命名为何。 这种灵活性允许您选择哪些内容是必需的,哪些内容可以在分配期间更改。
在门户中设置静态参数
在左窗格中选择 “所有服务 ”。 搜索并选择Blueprints。
从左侧页面选择 蓝图定义 。
选择现有蓝图,然后选择“编辑蓝图”或选择“+ 创建蓝图”,并在“基本”选项卡上填写信息 。
选择“下一步:工件”或选择“工件”选项卡。
添加到蓝图中的项目(具有参数选项)会在“参数”列中显示“填充了 X 个参数,共 Y 个参数”。 选择项目行,编辑项目参数。
“编辑项目”页会显示适用于所选项目的值选项。 工件上的每个参数具有标题、数值框和复选框。 将框设置为未选中状态,使其称为“静态参数”。 在以下示例中,只有“位置”是静态参数,因为它处于未选中状态,同时“资源组名称”已选中。
从 REST API 设置静态参数
在每个 REST API URI 中,都包含需要替换为您自己值的变量:
-
{YourMG}- 替换为管理组的名称 -
{subscriptionId}- 替换为订阅 ID
蓝图级别参数
通过 REST API 创建蓝图时,可以创建蓝图参数。 为此,请使用以下 REST API URI 和正文格式:
REST API URI
PUT https://management.chinacloudapi.cn/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 示例在蓝图上创建角色分配项目,并使用蓝图级别参数。
REST API URI
PUT https://management.chinacloudapi.cn/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 属性使用 owners 蓝图级参数,并使用一个 [parameters('owners')] 的值。 使用蓝图级参数在项目中设置参数仍是静态参数的示例。 蓝图级参数无法在蓝图分配期间设置,每次分配时都是同一个值。
工件级别参数
在项目上创建“静态参数”情况相似,但采用直接值而不是使用 函数parameters()。 以下示例创建了两个静态参数:“tagName”和“tagValue”。 每个参数的值直接提供,且不使用函数调用。
REST API URI
PUT https://management.chinacloudapi.cn/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" } } } }
动态参数
与静态参数相对的是“动态参数”。 此参数未在蓝图中定义,而是在每次分配蓝图期间定义的。 在资源组示例中,使用动态参数对资源组名称有意义。 每次分配蓝图时,它将提供不同的名称。 有关蓝图函数的列表,请参阅蓝图函数参考。
在门户中设置动态参数
在左窗格中选择 “所有服务 ”。 搜索并选择Blueprints。
从左侧页面选择 蓝图定义 。
右键单击要分配的蓝图。 选择“分配蓝图”或选择要分配的蓝图,然后使用“分配蓝图”按钮 。
在“分配蓝图”页上,查找“项目参数”部分 。 具有至少一个“动态参数”的每个项目会显示项目和配置选项。 分配蓝图前,请向参数提供所需值。 在以下示例中,“名称”是动态参数,必须对其定义以完成蓝图分配。
从 REST API 设置动态参数
在分配期间设置动态参数是通过直接输入值完成的。 并不使用函数(如 parameters()),提供的值是适当的字符串。 资源组的项目是使用“模板名称”、name 和 location 属性定义的。 包含的项目的其他所有参数在 parameters 下使用 <名称> 和值键对进行定义。 如果为分配期间未提供的动态参数配置了蓝图,则分配将会失败。
REST API URI
PUT https://management.chinacloudapi.cn/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": "chinaeast2" } }, "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": "chinanorth2" }