AWS Web控制台中的标签编辑器允许我搜索不存在特定标签的“所有资源类型”。例如,我可以列出缺少标签“environment”的所有内容。
我想将其作为定期检查来执行,以强制没有创建新的未标记资源。一些Boto代码(作为Lambda cron作业运行)似乎很合适。但是,Boto文档只显示了如何查看特定的资源类型(例如 EC2实例)。
是否有任何API可用于询问标签?或者我是否需要枚举每种资源类型?
答案 0 :(得分:3)
一般来说,标签没有API。您必须为每种服务类型执行此操作。这并不困难。我有一个Lambda被执行(通过S3 PutObject / CloudTrail),它检查新创建的实例并在需要时标记它们。由于CloudTrail监控大多数AWS服务,因此很容易扩展其他类型的AWS服务。但是,如果您要查找所有未标记的资源,则必须编写Boto脚本并查询每种服务类型的标记。
答案 1 :(得分:3)
如果将来有人要问相同的问题,请在此处发布。
AWS资源组提供了这样的功能。您可以通过https://console.aws.amazon.com/resource-groups/home在AWS控制台中访问资源组。
我没有找到如何在CLI中将--tag-filters
与未标记值一起使用,因此使用jq
来过滤结果。
这是一个示例命令,用于获取没有环境标签的所有资源。
aws resourcegroupstaggingapi get-resources --tags-per-page 100 | jq '.ResourceTagMappingList[] | select(contains({Tags: [{Key: "environment"} ]}) | not)'
通过resourcegroupstaggingapi
参考-https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html
有关资源组API的更多信息,请访问https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html
答案 2 :(得分:2)
您可以按this write-up在控制台中使用AWS资源组,以查找标记值为空的资源。要查找具有标签键但没有标签值的资源,请选择(未添加标签)。
如果您正在寻找自动警报,请考虑使用AWS Config Rules并同时查看此related blog。特别是,存在一个称为“ required_tags”的规则模板,该模板检查最多5个标签的存在。您可以根据需要运行规则的更多实例,或修改代码。查找该链接以及其他rule templates here。
我还发现了一个nice blog,它通过CLI调用服务API时通过使用过滤来帮助回答问题。
我还发现使用AWS Config的效果也很好。为特定的AWS区域设置AWS Config之后,您可以提交高级查询以查找丢失的标签,例如针对EC2资源上缺少的标签的查询:
SELECT
resourceId,
resourceType,
configuration.instanceType,
configuration.placement.tenancy,
configuration.imageId,
tags,
availabilityZone
WHERE
resourceType = 'AWS::EC2::Instance'
AND tags.key NOT LIKE 'owner'