鉴于输出,aws ec2 describe instances
我试图显示没有Platform
值但确实有值的对象VpcId
。到目前为止,我想出了这个:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]'
但是它出错了:
Bad value for --query Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]: Bad jmespath expression: Unknown token ?:
Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]
我一直在寻找http://jmespath.org/并且看不到如何执行多个过滤表达式。
两个都
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null`]'
和
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?VpcId!=`null`]'
工作,但我试图同时获取这两个查询。
答案1
我采纳了您的命令并删除了 1 个字符 - 即第二个?
标记。我添加了将输出格式化为文本的选项。我还意识到,自您最初发布以来,awscli 可能已更改为支持多个查询,因此您需要确保您使用的是最新版本。此查询对我有用:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null` && VpcId!=`null`]' --output text
答案2
我能够解决我的逻辑问题(过滤describe-instances
以下情况是在 VPC 中,但是不是windows)的帮助下这个问题。
我得到的查询(我正在寻找PrivateIPAddress
)是:
aws --output json ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" |\
jq '.Reservations[].Instances | \
map(select(.VpcId != null)) | map(select(.Platform != "windows") | .PrivateIpAddress)'
然而,我问的关于组合过滤器的实际问题仍然没有答案,所以我将这个问题保留下来,希望能够吸引到答案那问题。