awcli 多个过滤表达式的查询选项

awcli 多个过滤表达式的查询选项

鉴于输出,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)'

然而,我问的关于组合过滤器的实际问题仍然没有答案,所以我将这个问题保留下来,希望能够吸引到答案问题。

相关内容