AWS CLI 在使用 ec2 描述实例时如何对包含多个值的标签使用标签过滤?

Ili*_*nov 3 amazon-ec2 amazon-web-services aws-cli

AWS CLI 提供了一种按标签键和标签值进行过滤的方法,具体方式如下:

aws ec2 describe-instances --filters Name=tag-key,Values=my_tag

aws ec2 describe-instances --filters Name=tag-value,Values=my_tag_value

aws ec2 describe-instances --filters Name=tag:my_tag,Values=my_tag_value

但是当标签包含多个值时,例如my_tag:my_value1,my_value2,my_value3 ,它不起作用。当使用前面的任何命令时,它仅返回包含具有该值的标签的实例。标记包含值以及其他值的所有其他情况都将被忽略。

如何实现“标签包含这个值”而不是“标签正是这个值”的过滤?

PC 我将在使用 aws-sdk 的 java 应用程序中使用这种方法,所以我对 aws-sdk api 解决方案感兴趣;我绝对不想在服务器端过滤一组实例。

Chr*_*eth 5

您可以根据通配符(* 或 ? 分别表示多字符或单字符匹配)或将其列为逗号分隔值来过滤标签值。因此,如果我有三个带有标签“t1”的实例,并且多个实例之间有不同的可能值,我可以使用以下命令选择它们:

aws ec2 describe-instances --filters Name=tag:t1,Values=*
Run Code Online (Sandbox Code Playgroud)

您还可以使用通配符或逗号分隔列表来选择子集。下面是一些示例,AWS 参考页面位于此处以获取更多信息。

匹配以“myval”开头的 t1 标记的所有值(请注意,本示例中使用 --query 参数仅选择实例 ID,因此我们可以快速比较结果,而无需滚动所有 JSON 输出):

$ aws ec2 describe-instances --filters Name=tag:t1,Values=myval* --query "Reservations[*].Instances[*].InstanceId" --output text
Run Code Online (Sandbox Code Playgroud)

匹配以逗号分隔的值列表:

$ aws ec2 describe-instances --filters Name=tag:t1,Values=t1val1,t1val2
Run Code Online (Sandbox Code Playgroud)

匹配单个字符通配符:

$ aws ec2 describe-instances --filters Name=tag:t1,Values=t1val?
Run Code Online (Sandbox Code Playgroud)