有没有一种方法可以通过标签列出 CloudFront 分布,而无需使用 ListDistributions 将它们全部下载?

Is there a way to list CloudFront distributions by tag without downloading them all using ListDistributions?

This question 类似,但唯一的答案是获取 all 分布的列表并在本地过滤它们,这不是我想要的。

This page 提示可以按标签过滤(“您可以根据您添加的标签搜索和过滤您的资源”),但我只是想不通如何!

我只能想到一种方法,因为aws cloudfront不直接支持通过标签获取分布。 我们可以使用 resourcegroupstaggingapi cli 获取所有云端的 ResourceARN,并使用 jqsed 提取 DistributionIds

例如:标记 ApplicationID=APP1111

aws  resourcegroupstaggingapi get-resources --tag-filters Key=ApplicationID,Values=APP1111 --resource-type-filters 'cloudfront' --tags-per-page 100 | jq -r ".ResourceTagMappingList[].ResourceARN" | sed 's:.*/::'

我们可以进一步使用 xargs 并为每个 Id 执行 get-distribution。

aws  resourcegroupstaggingapi get-resources --tag-filters Key=ApplicationID,Values=APP1111 --resource-type-filters 'cloudfront' --tags-per-page 100 | jq -r ".ResourceTagMappingList[].ResourceARN" | sed 's:.*/::' | xargs -I {} aws cloudfront  get-distribution --id {}

添加到 Balu 的好答案中,如果您在设置 aws-cli 时指定了默认区域并且该区域是 not us-east-1 那么它就赢了无法正常工作(您会看到 ResourceTagMappingList 的空数组)。

请务必在命令末尾添加 --region us-east-1,如下所示:

aws resourcegroupstaggingapi get-resources --tag-filters Key=tagName,Values=tagValue --resource-type-filters 'cloudfront' --tags-per-page 100 --region us-east-1