从命令行 (cli) 使用 aws ec2 describe-instances 时,按标签过滤不起作用

ana*_*ine 6 amazon-ec2 amazon-web-services aws-cli

我目前正在尝试从命令行编写 aws ec2 查询(在 AWS Linux 中,这并不重要)。我正在尝试设置一个匹配以下两项的过滤器:

  1. 显示那些处于关闭状态的实例(代码 80);
  2. 显示具有标签“ShortPurpose”且值为“Fleet”的实例。

实际发生的情况是,所有处于关闭状态的实例都将被返回,无论它们是否设置了标签“ShortPurpose”:“Fleet”。

我的实例设置如下:

+-------------+--------------+------------------------+--+
| Instance ID |     Tag      |       Tag Value        |  |
+-------------+--------------+------------------------+--+
| i-09876     | ShortPurpose | Fleet                  |  |
|             | Organisation | UmbrellaCorp           |  |
|             | Name         | cloud-01               |  |
|             | Owner        | ORG-UMBR-ELLA          |  |
|             | Purpose      | Cloud processing fleet |  |
+-------------+--------------+------------------------+--+
|             |              |                        |  |
| i-12345     |  (no tags)   |                        |  |
|             |              |                        |  |
+-------------+--------------+------------------------+--+
Run Code Online (Sandbox Code Playgroud)

我正在使用的命令是:

aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId" --filters "Name=tag:ShortPurpose,Values=Fleet,Name=instance-state-code,Values=80"
Run Code Online (Sandbox Code Playgroud)

结果是标准数组样式响应。实例状态已成功过滤,但标签未过滤。

Mar*_*cin 5

我尝试验证您的命令,但它在您编写时产生错误:

Error parsing parameter '--filters': Second instance of key "Name" encountered for input:
Name=tag:ShortPurpose,Values=Fleet,Name=instance-state-code,Values=80
                                   ^
This is often because there is a preceeding "," instead of a space.
Run Code Online (Sandbox Code Playgroud)

但是,我能够在我的沙箱实例上成功使用它,如下所示:

aws ec2 describe-instances \
     --query "Reservations[*].Instances[*].InstanceId" \
     --filters Name=tag:ShortPurpose,Values=Fleet Name=instance-state-code,Values=80
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。诀窍是每个过滤器必须单独处理,我已将它们用引号分组。我发布的答案有效,但我会将您的答案标记为正确,因为您花时间回复,而且您的答案也有效。 (2认同)