本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
生命周期策略
Amazon ECR 生命周期策略提供了对私有存储库中镜像的生命周期管理的更多控制。生命周期策略是一组规则,其中的每个规则为 Amazon ECR 定义一个操作。这提供了一种自动清理容器镜像的方法,例如根据使用期限或计数过期的镜像。镜像将在达到生命周期策略规定的过期标准后 24 小时内过期。当 Amazon ECR 基于生命周期策略执行操作时,这将在 AWS CloudTrail中记录为一个事件。有关更多信息,请参阅 使用 AWS CloudTrail 记录 Amazon ECR 操作。
生命周期策略工作原理
生命周期策略由一条或多条规则组成,这些规则确定存储库中的哪些镜像应过期。在考虑使用生命周期策略时,务必使用生命周期策略预览来确认生命周期策略视为过期的镜像,然后再将其应用到存储库。将生命周期策略应用到存储库后,镜像将在达到到期标准后 24 小时内过期。当 Amazon ECR 基于生命周期策略执行操作时,这将在 AWS CloudTrail中记录为一个事件。有关更多信息,请参阅 使用 AWS CloudTrail 记录 Amazon ECR 操作。
注意
如果您使用 Amazon ECR 复制功能跨不同的区域或账户创建存储库的副本,请注意,生命周期策略可能仅对创建该策略的区域中的存储库执行操作。因此,如果您开启了复制功能,则建议在要将存储库复制到的每个区域和账户中创建一个生命周期策略。
下图显示了生命周期策略工作流程。
-
创建一个或多个测试规则。
-
保存测试规则并运行预览。
-
生命周期策略评估程序遍历所有规则,并标记每个规则影响的镜像。
-
然后,生命周期策略评估程序根据规则优先级应用规则,并显示存储库中的哪些镜像设置为过期。
-
查看测试结果,确保标记为过期的镜像符合您预期的要求。
-
将测试规则应用为存储库的生命周期策略。
-
创建生命周期策略后,镜像将在达到过期标准后 24 小时内过期。
生命周期策略评估规则
生命周期策略评估器负责解析生命周期策略的明文 JSON,评估所有规则,然后根据规则优先级将这些规则应用于存储库中的镜像。下文更详细地解释了生命周期策略评估器采用的逻辑。有关示例,请参阅生命周期策略的示例。
-
无论规则优先级如何,评估器都会同时评估所有规则。评估所有规则后,将根据规则优先级应用这些规则。
-
镜像由一条或零条规则设为过期。
-
与规则的标记要求匹配的镜像不能被优先级较低的规则设为过期。
-
规则永远不能标记已由较高优先级规则标记的镜像,但仍然可以将其识别为未过期。
-
规则集必须包含一组唯一的标签前缀。
-
只允许一个规则选择未标记的镜像。
-
如果清单列表引用了映像,则在未先删除清单列表的情况下,该映像无法过期。
-
过期始终按
pushed_at_time
排序,并且始终是较早的镜像在较新的镜像之前过期。 -
生命周期策略规则可以指定
tagPatternList
或tagPrefixList
,但不能同时指定这两个选项。但是,一个生命周期策略可能包含多个规则,而不同的规则可能同时使用模式和前缀列表。 -
仅在
tagStatus
为tagged
时才能使用tagPatternList
或tagPrefixList
参数。 -
使用时
tagPatternList
,只要与通配符筛选条件匹配,即表示该映像成功匹配。例如,假设应用的筛选条件为prod*
,则将匹配名称以prod
开头的存储库,例如prod
、prod1
或production-team1
。同样,如果应用的筛选条件为*prod*
,则将匹配名称包含prod
的存储库,例如repo-production
或prod-team
。重要
每个字符串最多可以使用四个通配符(
*
)。例如,["*test*1*2*3", "test*1*2*3*"]
有效,而["test*1*2*3*4*5*6"]
无效。 -
使用
tagPrefixList
时,如果tagPrefixList
值中的全部标签均与任何映像的标签匹配,则表示该映像成功匹配。 -
仅当
countType
为sinceImagePushed
时,才能使用countUnit
参数。 -
使用
countType = imageCountMoreThan
,镜像基于pushed_at_time
从最新到早排序,然后所有大于指定计数的镜像都将过期。 -
使用
countType = sinceImagePushed
,其pushed_at_time
早于指定天数 (基于countNumber
) 的所有镜像均会过期。
生命周期策略模板
在与存储库关联之前评估生命周期策略的内容。以下是生命周期策略的 JSON 语法模板。有关生命周期策略示例,请参阅 生命周期策略的示例。
{
"rules": [
{
"rulePriority": integer
,
"description": "string
",
"selection": {
"tagStatus": "tagged
"|"untagged
"|"any
",
"tagPatternList": list<string>
,
"tagPrefixList": list<string>
,
"countType": "imageCountMoreThan
"|"sinceImagePushed
",
"countUnit": "string
",
"countNumber": integer
},
"action": {
"type": "expire"
}
}
]
}
生命周期策略参数
生命周期策略分为以下几个部分:
规则优先级
rulePriority
-
类型:整数
必需:是
设置应用规则的顺序,从低到高。优先级为
1
的生命周期策略规则将首先应用,优先级为2
的规则将下一个应用,依此类推。当您向某个生命周期策略添加规则时,必须为每个规则赋予一个唯一的rulePriority
值。但是,在策略中的各规则之间,值不需要顺序。具有tagStatus
值any
的规则必须具有最大的rulePriority
值并且最后被评估。
描述
description
-
类型:字符串
必需:否
(可选) 描述生命周期策略中规则的用途。
标签状态
tagStatus
-
类型:字符串
必需:是
确定要添加的生命周期策略规则是否为镜像指定标签。可接受的选项包括
tagged
、untagged
或any
。如果您指定any
,则所有镜像都会根据它们评估规则。如果指定tagged
,还必须指定tagPrefixList
值。如果指定untagged
,那么必须省略tagPrefixList
。
标签模式列表
tagPatternList
-
类型:list[string]
必填项:
tagStatus
设置为“已标记”且未指定tagPrefixList
时,是必填项为已标记的映像创建生命周期策略时,最佳实践是使用
tagPatternList
来指定要过期的标签。您必须指定以逗号分隔的可能包含通配符(*
)的映像标签模式列表,以便根据此列表执行生命周期策略操作。例如,假设映像标记为prod
、prod1
、prod2
等,则可以使用标签模式列表prod*
来指定所有这些映像。如果指定多个标签,则仅选择具有所有指定标签的镜像。重要
每个字符串最多可以使用四个通配符(
*
)。例如,["*test*1*2*3", "test*1*2*3*"]
有效,而["test*1*2*3*4*5*6"]
无效。
标签前缀列表
tagPrefixList
-
类型:list[string]
必填项:
tagStatus
设置为“已标记”且未指定tagPatternList
时,是必填项仅在您指定了
"tagStatus": "tagged"
但未指定tagPatternList
时才使用。您必须指定以逗号分隔的镜像标签前缀列表,以便根据此列表执行生命周期策略操作。例如,如果您的镜像被标记为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
。