AWS CloudFormation Describe-Stacks查询返回空数组问题排查与解决
问题原因与修复方案
问题根源
你遇到的空数组问题,核心是查询语句中的引号转义错误:
你用了"(HTML转义的双引号)来包裹堆栈名,但在shell环境中,这些转义符会被当作普通字符传递给JMESPath解析器。这导致JMESPath尝试匹配StackName等于字符串"MyStack",而实际返回的堆栈对象中StackName的值是MyStack(不带转义符),自然匹配失败,返回空数组。
另外补充一点:当你指定--stack-name MyStack参数时,AWS CLI已经提前帮你过滤了结果,返回的Stacks数组只会包含这一个目标堆栈,其实完全没必要再用JMESPath做二次过滤——这也是你第二个命令Stacks[0]能正常返回结果的原因。
修复方法
方法1:修正JMESPath的引号写法
根据shell的引号规则,选择以下任意一种写法:
- 用单引号包裹整个查询表达式,内部用反引号(
`)包裹匹配字符串:$ aws cloudformation describe-stacks --region $AWS_REGION --profile $AWS_PROFILE --stack-name MyStack --query 'Stacks[?StackName == `MyStack`]' - 用双引号包裹整个查询表达式,内部对双引号做转义:
$ aws cloudformation describe-stacks --region $AWS_REGION --profile $AWS_PROFILE --stack-name MyStack --query "Stacks[?StackName == \"MyStack\"]"
方法2:简化查询(推荐)
既然已经通过--stack-name指定了目标堆栈,直接省略二次过滤,用Stacks[0]获取结果即可,或者直接去掉--query参数返回完整结果:
# 直接获取唯一的堆栈对象 $ aws cloudformation describe-stacks --region $AWS_REGION --profile $AWS_PROFILE --stack-name MyStack --query 'Stacks[0]' # 返回完整结果(包含Stacks数组) $ aws cloudformation describe-stacks --region $AWS_REGION --profile $AWS_PROFILE --stack-name MyStack
内容的提问来源于stack exchange,提问作者Code-Apprentice
相关产品推荐
相关产品推荐

