有谁知道如何导出 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[]]"
谢谢。
可以使用这个:
aws ec2 describe-instances --query 'Reservations[].Instances[].{Name: Tags[?Key==`Name`].Value | [0], Role: Tags[?Key==`Billing by Role`].Value | [0]}' --output text
此命令列出区域中具有名为“按角色计费”标签的所有实例。将
*
替换为特定值,以仅获取具有特定值的实例。
aws ec2 describe-instances --filter "Name=tag:Billing by Role,Values=*"
为了完善 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 |
具有相同的用例,使用特定的“标签项目”提取实例 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