生命周期策略
Amazon ECR 生命周期策略提供了对私有存储库中镜像的生命周期管理的更多控制。生命周期策略是一组规则,其中的每个规则为 Amazon ECR 定义一个操作。这提供了一种自动清理未使用镜像的方法,例如根据使用期限或计数过期的镜像。创建生命周期策略后,受影响的镜像会在 24 小时内过期。
生命周期策略工作原理
生命周期策略由一条或多条规则组成,这些规则确定存储库中的哪些镜像应过期。在考虑使用生命周期策略时,务必使用生命周期策略预览来确认生命周期策略视为过期的镜像,然后再将其应用到存储库。将生命周期策略应用到存储库后,您应发现受影响的镜像将在 24 小时内过期。
下图显示了生命周期策略工作流程。

-
创建一个或多个测试规则。
-
保存测试规则并运行预览。
-
生命周期策略评估程序遍历所有规则,并标记每个规则影响的镜像。
-
然后,生命周期策略评估程序根据规则优先级应用规则,并显示存储库中的哪些镜像设置为过期。
-
查看测试结果,确保标记为过期的镜像符合您预期的要求。
-
将测试规则应用为存储库的生命周期策略。
-
创建生命周期策略后,受影响的镜像将在 24 小时内过期。
生命周期策略评估规则
生命周期策略评估器负责解析生命周期策略的明文 JSON,评估所有规则,然后根据规则优先级将这些规则应用于存储库中的镜像。下文更详细地解释了生命周期策略评估器采用的逻辑。有关示例,请参阅 生命周期策略的示例。
-
无论规则优先级如何,评估器都会同时评估所有规则。评估所有规则后,将根据规则优先级应用这些规则。
-
镜像由一条或零条规则设为过期。
-
与规则的标记要求匹配的镜像不能被优先级较低的规则设为过期。
-
规则永远不能标记已由较高优先级规则标记的镜像,但仍然可以将其识别为未过期。
-
规则集必须包含一组唯一的标签前缀。
-
只允许一个规则选择未标记的镜像。
-
过期始终按
pushed_at_time
排序,并且始终是较早的镜像在较新的镜像之前过期。 -
使用
tagPrefixList
时,如果tagPrefixList
值中的全部标签均与任何镜像的标签相符,则该镜像成功匹配。 -
使用
countType = imageCountMoreThan
,镜像基于pushed_at_time
从最新到早排序,然后所有大于指定计数的镜像都将过期。 -
使用
countType = sinceImagePushed
,其pushed_at_time
早于指定天数 (基于countNumber
) 的所有镜像均会过期。
生命周期策略模板
在与存储库关联之前评估生命周期策略的内容。以下是生命周期策略的 JSON 语法模板。有关生命周期策略示例,请参阅 生命周期策略的示例。
{
"rules": [
{
"rulePriority": integer
,
"description": "string
",
"selection": {
"tagStatus": "tagged
"|"untagged
"|"any
",
"tagPrefixList": list<string>
,
"countType": "imageCountMoreThan
"|"sinceImagePushed
",
"countUnit": "string
",
"countNumber": integer
},
"action": {
"type": "expire"
}
}
]
}
仅当 tagStatus
为 tagged
时,才能使用 tagPrefixList
参数。仅当 countType
为 sinceImagePushed
时,才能使用 countUnit
参数。
生命周期策略参数
生命周期策略分为以下几个部分:
规则优先级
rulePriority
-
类型:整数
必需:是
设置应用规则的顺序,从低到高。优先级为
1
的生命周期策略规则将首先应用,优先级为2
的规则将下一个应用,依此类推。当您向某个生命周期策略添加规则时,必须为每个规则赋予一个唯一的rulePriority
值。但是,在策略中的各规则之间,值不需要顺序。具有tagStatus
值any
的规则必须具有最大的rulePriority
值并且最后被评估。
说明
description
-
类型:字符串。
必需:否
(可选) 描述生命周期策略中规则的用途。
标签状态
tagStatus
-
类型:字符串
必需:是
确定要添加的生命周期策略规则是否为镜像指定标签。可接受的选项包括
tagged
、untagged
或any
。如果您指定any
,则所有镜像都会根据它们评估规则。如果指定tagged
,还必须指定tagPrefixList
值。如果指定untagged
,那么必须省略tagPrefixList
。
标签前缀列表
tagPrefixList
-
类型:list[string]
必需:是,仅当
tagStatus
设置为标记仅在指定
"tagStatus": "tagged"
时使用。您必须指定以逗号分隔的镜像标签前缀列表,以便根据此列表执行生命周期策略操作。例如,如果您的镜像被标记为prod
、prod1
、prod2
等,则可以使用标签前缀prod
以指定所有这些标签。如果指定多个标签,则仅选择具有所有指定标签的镜像。
计数类型
countType
-
类型:字符串
必需:是
指定要应用于镜像的计数类型。
如果
countType
设置为imageCountMoreThan
,您还可以指定countNumber
以创建一个规则,用于设置存储库中存在的镜像数量限制。如果countType
设置为sinceImagePushed
,您还可以指定countUnit
和countNumber
,以指定存储库中存在的镜像的时间限制。
计数单位
countUnit
-
类型:字符串
必需:是,仅当
countType
设置为sinceImagePushed
时指定计数单位
days
作为时间单位,除此之外,还指定countNumber
表示天数。只有在
countType
为sinceImagePushed
时才能指定;如果您在countType
是任何其他值时指定计数单位,将发生错误。
计数
countNumber
-
类型:整数
必需:是
指定计数数量。可接受的值为正整数 (
0
不是可接受的值)。如果使用的
countType
是imageCountMoreThan
,则该值为您希望在存储库中保留的镜像的最大数量。如果使用的countType
是sinceImagePushed
,则该值为镜像的最大使用期限。
操作
type
-
类型:字符串
必需:是
指定操作类型。支持的值为
expire
。