我开始学习 aws cli,我只是想知道aws cli 中--query
和之间的区别--filter
?什么时候应该使用--query
和--filter
选项?
答案1
本质上--filter
是状况用于选择哪些资源您想要描述、列出等等。
另一方面--query
是字段列表您希望在响应中返回的内容。您也可以使用进行一些简单的过滤,--query
但过滤--filter
功能往往更强大。
示例来自aws ec2 describe-volumes help
:
描述标记卷并过滤输出
此示例命令描述了具有标签键的所有卷姓名 以及以 开头的值测试。输出经过过滤,仅显示标签和 ID的卷数。
命令:
aws ec2 describe-volumes \ --filters Name=tag-key,Values="Name" Name=tag-value,Values="Test*" \ --query 'Volumes[*].{ID:VolumeId,Tag:Tags}'
输出:
[ { "Tag": [ { "Value": "Test2", "Key": "Name" } ], "ID": "vol-1234567890abcdef0" }, { "Tag": [ { "Value": "Test1", "Key": "Name" } ], "ID": "vol-049df61146c4d7901" } ]
如您所见,--filter
用于选择所需的记录(即带有标签的记录姓名以字符串开头测试*。然后--query
仅用于检索标签(作为标签)和卷ID(作为ID)。
希望有帮助:)
答案2
接受的答案在某种程度上暗示了这一点,但更准确地说:
--filter
执行服务器端过滤,AWS 服务仅返回符合过滤器的记录--query
执行客户端过滤,AWS 服务将在响应中返回所有记录/字段,并且只有与查询匹配的记录才会显示在输出中
因此,如果输出中存在大量潜在记录,则使用--filter
AWS 服务进行繁重的工作(过滤),请参阅官方文档了解详情。