CloudCustodian筛选指定标签过期AMI关联EC2实例失败排查
解决CloudCustodian EC2实例筛选不匹配的问题
正确的策略代码
policies: - name: stop-old-special-ami-instances resource: ec2 filters: # 筛选运行时长超过110天的实例 - type: running-time days: 110 op: ge # 筛选所用AMI带有指定标签的实例 - type: jmespath query: "ImageId | aws.ec2.get_image(ImageId).Tags[?Key=='special-tag'].Value | [0] == 'special-value'" actions: - type: stop
重点说明
- 运行时长筛选:直接用CloudCustodian内置的
running-time过滤器即可,无需自行编写复杂的时间计算逻辑,既可靠又省心。 - AMI标签筛选:核心逻辑是通过
aws.ec2.get_image(ImageId)拉取实例关联的AMI详情,再用JMESPath定位标签值进行匹配。需要注意:- 执行CloudCustodian的角色必须拥有
ec2:DescribeImages权限,否则无法获取AMI的标签信息。 - JMESPath表达式中,
Tags[?Key=='special-tag'].Value会返回匹配标签的数值数组,[0]用于提取第一个值(标签键具有唯一性),再与目标值special-value做比对。
- 执行CloudCustodian的角色必须拥有
常见排查方向
- 别搞混筛选对象:要筛选的是AMI的标签,不是EC2实例自身的标签,之前如果错误地写了实例标签的筛选规则,肯定匹配不到目标实例。
- 核对AMI标签:确认AMI的标签确实是
special-tag: special-value,AWS标签默认大小写敏感,别输错字母大小写。 - 验证实例运行时长:通过AWS控制台或执行
aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId, LaunchTime]'命令,核对实例的启动时间是否确实超过110天。
内容的提问来源于stack exchange,提问作者user2175783
相关产品推荐
相关产品推荐

