我目前正在尝试从命令行编写aws ec2查询(在AWS Linux中,这无关紧要)。我正在尝试设置一个与以下两个条件匹配的过滤器:
实际上发生的是,无论是否设置了标签“ 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) | | |
| | | | |
+-------------+--------------+------------------------+--+
我正在使用的命令是:
aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId" --filters "Name=tag:ShortPurpose,Values=Fleet,Name=instance-state-code,Values=80"
结果是标准数组样式响应。实例状态已成功过滤,但没有成功过滤标签。
我试图验证您的命令,并且在您编写该命令时会产生错误:
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.
但是,我能够在沙箱实例上成功使用,如下所示:
aws ec2 describe-instances \
--query "Reservations[*].Instances[*].InstanceId" \
--filters Name=tag:ShortPurpose,Values=Fleet Name=instance-state-code,Values=80
在一个示例中,我发现AWS重复使用了错误的查询格式。正确的查询是:
aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId" --filters "Name=tag-value,Values=Fleet" "Name=instance-state-code,Values=80"
请注意,我忽略了ShortPurpose标记,而是直接寻找该值,该值可能存在于任何标记中。