ARM模板创建Cosmos DB容器时表达式属性'0'无法计算如何解决
报错原因
- 变量copy生成的数组路径引用错误
ARM模板中使用变量级copy生成的数组,会以你定义的copy块的name属性作为key挂载在父对象下。你定义的copy名称为autoscaleSettings,因此最终生成的配置数组实际路径是variables('autoscaleOptions').autoscaleSettings。你调用时直接使用variables('autoscaleOptions')[copyIndex('ContainerCopy')],相当于尝试从对象类型的autoscaleOptions上取下标为0的属性,自然触发无法评估属性'0'的报错。 - 自动扩容的判断逻辑写反
当前变量中的if表达式逻辑为:当容器的autoscale参数为true时返回空值,为false时返回maxThroughput,和实际业务逻辑完全相反,后续即使路径修正后也会出现配置错误。
修复方案
1. 修正变量引用路径
将容器资源定义中的options字段代码修改为:
"options": "[variables('autoscaleOptions').autoscaleSettings[copyIndex('ContainerCopy')]]"
变量copy的input字段定义的内容会直接作为生成的autoscaleSettings数组的元素,无需额外加.input后缀。
2. 修正自动扩容条件逻辑
将变量定义中maxThroughput对应的表达式修改为:
"maxThroughput": "[if(parameters('containers')[copyIndex('autoscaleSettings')].autoscale, parameters('containers')[copyIndex('autoscaleSettings')].maxThroughput, null())]"
调整后逻辑为:当autoscale参数为true时传入配置的最大吞吐量,为false时返回空值,符合自动扩容的配置规则。
内容的提问来源于stack exchange,提问作者prakashrajansakthivel
相关产品推荐
相关产品推荐

