ARM模板concat函数语法及templateLink、TemplateSpec使用相关疑问
ARM模板代码片段问题解答
你提供的代码片段如下:
"variables": { "apiVersion": "2016-06-01", "SharedTemplateSAS": "[concat('?',split(deployment().properties.templateLink.uri,'?')[1])]",
疑问1:concat函数的参数'?'具体作用是什么?
split函数执行后,deployment().properties.templateLink.uri会被按?切割为两部分,第一部分是不带参数的模板访问路径,第二部分是?之后的所有SAS令牌参数(本身不含开头的?)。这里的'?'是拼接前缀,用来补全SAS令牌的标准前缀,确保最终生成的变量可以直接拼接在其他模板URI后使用,不需要额外处理格式。
疑问2:deployment().properties.templateLink.uri的取值是否依赖TemplateLink URI?TemplateSpec相对路径引用场景是否适配?
- 该属性取值完全依赖部署时传入的TemplateLink URI,只有当你通过外部URI(比如存储账户的公开/带SAS的URI)传入主模板触发部署时,该属性才会返回有效值。
- TemplateSpec场景下该属性不生效:TemplateSpec是将整套模板打包存储在Azure的资源服务中,部署时不会生成外部TemplateLink URI,该属性会返回空值。如果需要在TemplateSpec中通过相对路径引用关联模板,直接使用ARM模板原生支持的
templateLink.relativePath属性即可,不需要手动处理SAS令牌。
疑问3:SharedTemplateSAS变量的实际功能是什么?
这行代码的核心作用是提取当前主模板的访问SAS令牌,作为共享权限凭证。后续如果要引用和主模板存放在同一存储位置的嵌套模板、链接模板,直接将该SharedTemplateSAS变量拼在对应模板的URI末尾,就可以复用主模板的访问权限,不需要为每个关联模板单独生成、配置SAS令牌,减少重复配置工作。
内容的提问来源于stack exchange,提问作者Jeff Christman
相关产品推荐
相关产品推荐

