如何通过AWS Query输出多元素?RDS查询字段为空问题咨询
解决AWS CLI查询RDS实例时关联安全组字段显示为none的问题
问题出在哪?
你第二次修改的查询路径犯了个常见的JMESPath查询逻辑错误:当你进入DBInstances[*].VpcSecurityGroups[*]这个层级后,当前的查询上下文已经变成了单个安全组对象,而DBInstanceIdentifier和PubliclyAccessible是属于上层DBInstance对象的属性,不在当前安全组的上下文范围内,所以这两个字段会被解析为none,只有安全组自身的VpcSecurityGroupId能被正确读取。
正确的查询写法
要同时获取实例级别字段和安全组字段,你需要把实例字段和安全组的数组字段放在同一层级查询,或者用flatten函数展开嵌套结构,适配你想要的输出格式。
场景1:一个实例一行,所有安全组ID同列显示
如果你希望每个RDS实例的标识、公网访问状态,和它的所有安全组ID在同一行展示,可以用这个命令:
aws rds describe-db-instances --region us-east-1 --query 'DBInstances[*].[DBInstanceIdentifier, PubliclyAccessible, VpcSecurityGroups[*].VpcSecurityGroupId]' --output text
示例输出:
DBId true sg-xxxxxx sg-yyyyyy DBId2 false sg-zzzzzz
场景2:一个安全组一行,关联对应实例信息
如果希望每个安全组单独占一行,并且和所属的实例信息绑定(适合有多个安全组的实例),可以用flatten函数展开嵌套数组:
aws rds describe-db-instances --region us-east-1 --query 'flatten(DBInstances[*].VpcSecurityGroups[*].[DBInstanceIdentifier, PubliclyAccessible, VpcSecurityGroupId])' --output text
示例输出:
DBId true sg-xxxxxx DBId true sg-yyyyyy DBId2 false sg-zzzzzz
这样就能完美解决你之前前两列显示none的问题啦~
内容的提问来源于stack exchange,提问作者mitechniq
相关产品推荐
相关产品推荐

