aws ec2 describe-instances:如何过滤* out * spot实例?

时间:2017-09-13 16:31:29

标签: amazon-web-services amazon-ec2 command-line-interface

我可以通过发出以下CLI命令列出我的所有现场实例:

aws ec2 describe-instances --filter Name="instance-lifecycle",Values="spot"

但是如何显示所有现货实例?这些都不起作用:

aws ec2 describe-instances --filter Name="instance-lifecycle",Values=""
aws ec2 describe-instances --filter Name="instance-lifecycle",Values="?"

(对于非现货实例,instance-lifecycle为空/ null,类似于spot-instance-request-id

3 个答案:

答案 0 :(得分:1)

AWS CLI 和控制台无法过滤实例生命周期“正常”。

所以我使用 jq 工具而不是 '--filter Key=instance-lifecycle,Values=scheduled'

aws ec2 describe-instances --filter Name="instance-state-code",Values="16" \
| jq '.Reservations[]?.Instances[]? | select(.InstanceLifecycle == null)| .InstanceId' -r

答案 1 :(得分:0)

如果您使用的是Windows平台,则可以使用以下命令列出按需实例

的所有实例
aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,InstanceLifecycle]" --output table --region eu-west-1 | find "None"

同样,对于所有现场实例

aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,InstanceLifecycle]" --output table --region eu-west-1 | find "spot"

在Linux环境中,以下内容可能会得到结果

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, InstanceLifecycle]' --output text |
%{if ($_.split("`t")[1] -match "None") { $_.split("`t")[2]; } }

注意:我没有测试过Linux环境命令,因为我目前无法访问Linux

答案 2 :(得分:0)

看来您可以通过--query选项来做到这一点。

我一直在努力寻找关于期权本身的良好文档,但是我设法遇到了一个事实,那就是您可以在其中传递过滤器。

例如,这两个命令将返回相同的结果:

aws ec2 describe-instances --filters "[{\"Name\": \"tag:role\", \"Values\": [\"web\"]}, {\"Name\":\"instance-state-name\", \"Values\": [\"running\"]}]" --query='Reservations[*].Instances[*].[LaunchTime,PrivateIpAddress][]'

aws ec2 describe-instances --filters "[{\"Name\": \"tag:role\", \"Values\": [\"web\"]}]" --query='Reservations[*].Instances[?InstanceStateName=="running"].[LaunchTime,PrivateIpAddress][]'

这还允许我们在没有指定标签的实例输出中过滤项目(例如,“普通”实例没有“ InstanceLifecycle”属性,因此返回null):

aws ec2 describe-instances --filters "[{\"Name\": \"tag:role\", \"Values\": [\"web\"]}, {\"Name\":\"instance-state-name\", \"Values\": [\"running\"]}]" --query='Reservations[*].Instances[?!InstanceLifecycle].[LaunchTime,PrivateIpAddress][]'

在查询中注意Instances[?!InstanceLifecycle]