如何配置AWS ECR生命周期规则满足日期与数量双条件的镜像过期策略
你的理解完全正确。当前AWS ECR的原生生命周期策略确实存在两个明确限制:
- 单条规则无法同时指定
sinceImagePushed和imageCountMoreThan两个筛选条件,无法直接实现两个条件的与逻辑匹配 - 每个镜像只会被优先级最高的第一条匹配到的规则触发过期,不会叠加多条规则的判断结果,因此也无法通过多条原生规则组合实现你需要的过期逻辑。
实现方案
方案一:自定义Lambda实现(100%匹配需求)
这是唯一可以完全满足要求的方案,实现步骤如下:
- 编写Lambda函数,每次执行时拉取目标ECR仓库的所有镜像元数据,按推送时间倒序排序
- 遍历镜像列表,仅对同时满足以下两个条件的镜像执行删除操作:
- 镜像推送时间距当前时间超过90天
- 该镜像在排序后的列表中排在第10位之后(不属于最新的10个镜像)
- 配置EventBridge定时规则触发Lambda,推荐每天执行一次即可
- 为Lambda执行角色配置ECR镜像读取、删除的对应权限即可。
方案二:原生策略近似实现(仅适用于镜像推送频率稳定的场景)
如果你的业务镜像推送频率较高,正常情况下90天内推送的镜像数量一定大于10个,可以用以下两条原生规则做过渡,优先级数值越低规则优先级越高:
- 规则1(优先级 1):
- 匹配条件:
countType = sinceImagePushed,countNumber = 90,countUnit = days - 动作:
expire - 作用:所有推送超过90天的镜像都会被本条规则匹配过期
- 匹配条件:
- 规则2(优先级 2):
- 匹配条件:
countType = imageCountMoreThan,countNumber = 10 - 动作:
expire - 作用:如果出现镜像推送频率降低,90天内的镜像不足10个的情况,本条规则会确保仅保留最新的10个镜像,避免无限制保留老旧镜像
- 匹配条件:
注意:该方案存在限制,如果90天内推送的镜像数量超过10个,会删除排在第10位之后、但推送未满90天的镜像,不符合你的原始需求,仅适合临时使用。
内容的提问来源于stack exchange,提问作者John Velonis
相关产品推荐
相关产品推荐

