如何在ARM模板中参数化嵌套JSON对象(以SKU为例)
如何在ARM模板中参数化嵌套JSON对象(以消耗计划的sku为例)
当然可以一次性参数化整个sku嵌套对象,不用拆分每个字段单独定义参数。具体实现步骤如下:
1. 定义object类型的参数
在ARM模板的parameters区块中,新增一个类型为object的sku参数,还可以设置默认值(匹配你原本的消耗计划配置)和描述,提升模板复用性:
"parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]" }, "hostingPlanName": { "type": "string" }, "sku": { "type": "object", "defaultValue": { "name": "Y1", "tier": "Dynamic", "size": "Y1", "family": "Y", "capacity": 0 }, "metadata": { "description": "消耗计划的SKU配置对象,包含name、tier、size、family、capacity字段" } } }
2. 在资源中引用整个参数对象
修改Microsoft.Web/serverfarms资源的sku属性,直接引用这个对象参数即可:
{ "type": "Microsoft.Web/serverfarms", "apiVersion": "2022-03-01", "name": "[parameters('hostingPlanName')]", "location": "[parameters('location')]", "sku": "[parameters('sku')]", "properties": { "computeMode": "Dynamic" } }
3. 部署时自定义SKU配置(可选)
如果需要在部署时传入不同的SKU配置,比如切换到其他计划类型,可通过以下方式传递对象参数:
- Azure CLI命令示例:
az deployment group create \ --resource-group <你的资源组名> \ --template-file <模板路径> \ --parameters hostingPlanName="myPlan" sku="{'name':'P1v3','tier':'PremiumV3','size':'P1v3','family':'P','capacity':1}"
- 参数文件(
parameters.json)示例:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "hostingPlanName": { "value": "myPlan" }, "sku": { "value": { "name": "P1v3", "tier": "PremiumV3", "size": "P1v3", "family": "P", "capacity": 1 } } } }
这种方式比拆分单个参数更简洁,尤其适合字段较多的嵌套对象,能灵活控制整个配置块。
内容的提问来源于stack exchange,提问作者Bilal Shafqat
相关产品推荐
相关产品推荐

