Terraform配置APIM策略时condition属性验证错误求助
Azure APIM策略Terraform嵌入XML的问题解决
一、修正条件写法的错误
你当前的@contains(${each.value.name}, 'substring')写法存在语法冲突,问题出在Terraform变量插值和APIM表达式的混合方式上:
- APIM策略表达式里,
@contains()的参数必须是字符串或APIM上下文变量,但你直接把Terraform的${each.value.name}塞进了表达式内部,导致APIM无法识别这种混合语法。 - 正确写法是先让Terraform把API名称插值为字符串,再传入APIM的contains函数:
<choose> <when condition="@contains('${each.value.name}', 'substring')"> <!-- 这里写你的策略逻辑 --> </when> </choose>
Terraform会先把${each.value.name}替换成实际的API名称,最终APIM收到的表达式是@contains('实际API名称', 'substring'),符合语法要求。
二、直接获取BasePath的正确方式
完全不需要依赖Terraform传入的API名称,APIM的策略表达式可以直接通过上下文变量获取当前API的BasePath:
- 用
context.Api.BasePath变量,它直接返回当前匹配的API的官方basepath值,精准可靠。示例:
<choose> <when condition="@contains(context.Api.BasePath, '你的子串')"> <!-- 策略逻辑 --> </when> </choose>
- 如果需要基于请求路径判断(比如检查路径是否包含某个basepath子串),也可以用
context.Request.Url.Path,结合startsWith函数更严谨:
<!-- 检查请求路径是否以目标basepath开头 --> <when condition="@startsWith(context.Request.Url.Path, '/目标basepath')"> <!-- 策略逻辑 --> </when>
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

