ARM模板中Parameter与Variable的区别是什么?
ARM模板中Parameter与Variable的区别
核心用途
- Parameter(参数):是模板对外的输入接口,用来接收部署时外部传入的动态值,让同一个模板能适配不同的部署需求。比如环境名称、虚拟机规格、存储账户SKU这类需要根据部署场景调整的值,都适合用参数定义。
- Variable(变量):是模板内部的辅助存储单元,用来存放重复使用的计算结果、固定逻辑的中间值,目的是简化模板代码,避免重复编写相同的表达式。比如拼接资源ID、组合标准化的资源名称,只在模板内部生效。
配置与修改方式
Parameter:必须在模板的
parameters块中定义,可设置默认值、类型约束、允许的取值范围(如allowedValues)。部署时无需修改模板,就能通过命令行参数、Azure门户界面或参数文件来覆盖默认值。
示例:"parameters": { "environment": { "type": "string", "defaultValue": "dev", "allowedValues": ["dev", "test", "prod"] } }部署时可通过
az deployment group create --parameters environment=prod指定值。Variable:在模板的
variables块中定义,值可以是静态字符串,也可以是基于参数、其他变量或模板函数的计算结果。只能在模板内部通过variables('变量名')引用,部署时无法直接修改,只能通过调整依赖的参数或修改模板本身来变更。
示例:"variables": { "storageAccountName": "[concat('sa', parameters('environment'), uniqueString(resourceGroup().id))]" }这里
storageAccountName由参数和模板函数计算得出,无法直接从外部修改。
生命周期与作用域
- Parameter:从部署启动时传入,作用域覆盖整个模板(包括资源定义、输出、变量计算),直到部署完成后才失效。
- Variable:在模板解析阶段就会计算出最终值,部署过程中直接使用预计算的结果,作用域同样覆盖整个模板,但仅在模板内部可见。
适用场景总结
- 当需要让用户在部署时灵活调整的值,用Parameter;
- 当需要简化模板代码、复用计算逻辑时,用Variable。
内容的提问来源于stack exchange,提问作者Ravi Rathnam
相关产品推荐
相关产品推荐

