如何在AWS cli中获取所有实例和特定标签的列表

问题描述 投票:0回答:4

有谁知道如何导出 AWS 账户中的所有实例及其名称和特定标签?我的标签名为按角色计费。尝试将此与 aws ec2 描述实例一起使用。

我尝试使用这个:

aws ec2 describe-instances --query 'Reservations[].Instances[].[Tags[?Key==`Name`].Value[] | [0], [Tags[?Key==`Billing by Role`].Value[]]' --output text

但我收到错误:

ValueError: --query Reservations[].Instances[].[Tags[?Key==

Name
].Value[] 的值错误[0],[Tags[?Key==
Billing by Role
].Value[]]:无效标记。:在表达式的标记“”(EOF)附近的第 101 列处解析错误: "预订[].Instances[].[Tags[?Key==
Name
].Value[] | [0],[Tags[?Key==
Billing by Role
].Value[]]"

谢谢。

amazon-web-services aws-cli
4个回答
10
投票

可以使用这个:

aws ec2 describe-instances --query 'Reservations[].Instances[].{Name: Tags[?Key==`Name`].Value | [0], Role: Tags[?Key==`Billing by Role`].Value | [0]}' --output text

6
投票

此命令列出区域中具有名为“按角色计费”标签的所有实例。将

*
替换为特定值,以仅获取具有特定值的实例。

aws ec2 describe-instances --filter "Name=tag:Billing by Role,Values=*"

3
投票

为了完善 Mark B 的答案并完整回答您的问题,您可以结合使用

--query
--filter
。区别在于过滤是在服务器端完成的,而查询是在客户端完成的。如果您有很多实例,则避免返回要使用
--query
隐藏的大量数据是有意义的。

如果您想要设置了

Billing by Role
标签的实例,但想为每个实例返回
"Name   Role"
,您可以使用:

aws ec2 describe-instances --filter "Name=tag:Billing by Role,Values=*" --query 'Reservations[].Instances[].{Name: Tags[?Key==`Name`].Value | [0], Role: Tags[?Key==`Billing by Role`].Value | [0]}' --output text

将每个属性与

[0]
进行“或”运算是一个很好的技巧,可以用于执行完整外部联接之类的操作,对于服务器端过滤器来说意义不大,但当您无法保证设置了哪些标签键时,这很好:

aws ec2 describe-instances --query 'Reservations[].Instances[].{Foo: Tags[?Key==`foo`].Value | [0], Bar: Tags[?Key==`bar`].Value | [0]}' --output table

| Foo  | Bar  |
|------|------|
| None | blue |
| red  | None |
| None | None |
| pink | grey |

0
投票

具有相同的用例,使用特定的“标签项目”提取实例 ID 和名称详细信息

aws ec2 describe-instances --filter "Name=tag:project,Values=test-project" --query 'Reservations[].Instances[].{Instance:InstanceId,Name: Tags[?Key==`Name`].Value | [0],Tags: Tags[?Key==`project`].Value | [0]}' --output table

--filter = 指定所需标签 Name=tag:,Values=

--query = 用于过滤响应数据的查询。 这里我们查询instance-id,Name,tags

© www.soinside.com 2019 - 2024. All rights reserved.