Step Functions调用Route53 API时参数数组格式适配问题
解决Route53调用中JMESPath返回数组转单个值的问题
核心问题出在JMESPath过滤表达式返回数组类型,但Route53的ListResourceRecordSets API要求HostedZoneId必须是单个字符串值,而EC2的DescribeNetworkInterfaces刚好需要数组类型参数,所以得针对两个API用不同的JMESPath处理逻辑:
- 针对EC2的
DescribeNetworkInterfaces:继续使用原表达式[?(@.name==networkInterfaceId)],保持数组输出适配接口要求。 - 针对Route53的
ListResourceRecordSets:修改JMESPath表达式,从过滤后的数组中提取单个值,把原来的[?(@.Key==HOSTZONEID)]替换为:[?(@.Key==HOSTZONEID)].Value | [0]
表达式说明:
[?(@.Key==HOSTZONEID)]:过滤出Key为HOSTZONEID的条目.Value:提取该条目的Value字段,此时结果是包含单个元素的数组(比如["Z1234567890ABC"])| [0]:通过管道操作符结合索引,取出数组的第一个元素,最终得到字符串类型的HostedZoneId(比如"Z1234567890ABC")
这样处理后,传给Route53的参数就是符合要求的单个值,不会再出现“未找到对应托管区ID”的报错,同时EC2的调用也能继续正常工作。
内容的提问来源于stack exchange,提问作者mreferre
相关产品推荐
相关产品推荐

