生命周期策略 - Amazon ECR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

生命周期策略

Amazon ECR 生命周期策略提供了对私有存储库中镜像的生命周期管理的更多控制。生命周期策略是一组规则,其中的每个规则为 Amazon ECR 定义一个操作。这提供了一种自动清理容器镜像的方法,例如根据使用期限或计数过期的镜像。镜像将在达到生命周期策略规定的过期标准后 24 小时内过期。当 Amazon ECR 基于生命周期策略执行操作时,这将在 AWS CloudTrail中记录为一个事件。有关更多信息,请参阅 使用 AWS CloudTrail 记录 Amazon ECR 操作

生命周期策略工作原理

生命周期策略由一条或多条规则组成,这些规则确定存储库中的哪些镜像应过期。在考虑使用生命周期策略时,务必使用生命周期策略预览来确认生命周期策略视为过期的镜像,然后再将其应用到存储库。将生命周期策略应用到存储库后,镜像将在达到到期标准后 24 小时内过期。当 Amazon ECR 基于生命周期策略执行操作时,这将在 AWS CloudTrail中记录为一个事件。有关更多信息,请参阅 使用 AWS CloudTrail 记录 Amazon ECR 操作

注意

如果您使用 Amazon ECR 复制功能跨不同的区域或账户创建存储库的副本,请注意,生命周期策略可能仅对创建该策略的区域中的存储库执行操作。因此,如果您开启了复制功能,则建议在要将存储库复制到的每个区域和账户中创建一个生命周期策略。

下图显示了生命周期策略工作流程。


                显示评估和应用生命周期策略的过程的图表。
  1. 创建一个或多个测试规则。

  2. 保存测试规则并运行预览。

  3. 生命周期策略评估程序遍历所有规则,并标记每个规则影响的镜像。

  4. 然后,生命周期策略评估程序根据规则优先级应用规则,并显示存储库中的哪些镜像设置为过期。

  5. 查看测试结果,确保标记为过期的镜像符合您预期的要求。

  6. 将测试规则应用为存储库的生命周期策略。

  7. 创建生命周期策略后,镜像将在达到过期标准后 24 小时内过期。

生命周期策略评估规则

生命周期策略评估器负责解析生命周期策略的明文 JSON,评估所有规则,然后根据规则优先级将这些规则应用于存储库中的镜像。下文更详细地解释了生命周期策略评估器采用的逻辑。有关示例,请参阅生命周期策略的示例

  • 无论规则优先级如何,评估器都会同时评估所有规则。评估所有规则后,将根据规则优先级应用这些规则。

  • 镜像由一条或零条规则设为过期。

  • 与规则的标记要求匹配的镜像不能被优先级较低的规则设为过期。

  • 规则永远不能标记已由较高优先级规则标记的镜像,但仍然可以将其识别为未过期。

  • 规则集必须包含一组唯一的标签前缀。

  • 只允许一个规则选择未标记的镜像。

  • 如果清单列表引用了映像,则在未先删除清单列表的情况下,该映像无法过期。

  • 过期始终按 pushed_at_time 排序,并且始终是较早的镜像在较新的镜像之前过期。

  • 生命周期策略规则可以指定 tagPatternListtagPrefixList,但不能同时指定这两个选项。但是,一个生命周期策略可能包含多个规则,而不同的规则可能同时使用模式和前缀列表。

  • 仅在 tagStatustagged 时才能使用 tagPatternListtagPrefixList 参数。

  • 使用时 tagPatternList,只要与通配符筛选条件匹配,即表示该映像成功匹配。例如,假设应用的筛选条件为 prod*,则将匹配名称以 prod 开头的存储库,例如 prodprod1production-team1。同样,如果应用的筛选条件为 *prod*,则将匹配名称包含 prod 的存储库,例如 repo-productionprod-team

    重要

    每个字符串最多可以使用四个通配符(*)。例如,["*test*1*2*3", "test*1*2*3*"] 有效,而 ["test*1*2*3*4*5*6"] 无效。

  • 使用 tagPrefixList 时,如果 tagPrefixList 值中的全部标签均与任何映像的标签匹配,则表示该映像成功匹配。

  • 仅当 countTypesinceImagePushed 时,才能使用 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 值。但是,在策略中的各规则之间,值不需要顺序。具有 tagStatusany 的规则必须具有最大的 rulePriority 值并且最后被评估。

描述

description

类型:字符串

必需:否

(可选) 描述生命周期策略中规则的用途。

标签状态

tagStatus

类型:字符串

必需:是

确定要添加的生命周期策略规则是否为镜像指定标签。可接受的选项包括 taggeduntaggedany。如果您指定 any,则所有镜像都会根据它们评估规则。如果指定 tagged,还必须指定 tagPrefixList 值。如果指定 untagged,那么必须省略 tagPrefixList

标签模式列表

tagPatternList

类型:list[string]

必填项:tagStatus 设置为“已标记”且未指定 tagPrefixList 时,是必填项

为已标记的映像创建生命周期策略时,最佳实践是使用 tagPatternList 来指定要过期的标签。您必须指定以逗号分隔的可能包含通配符(*)的映像标签模式列表,以便根据此列表执行生命周期策略操作。例如,假设映像标记为 prodprod1prod2 等,则可以使用标签模式列表 prod* 来指定所有这些映像。如果指定多个标签,则仅选择具有所有指定标签的镜像。

重要

每个字符串最多可以使用四个通配符(*)。例如,["*test*1*2*3", "test*1*2*3*"] 有效,而 ["test*1*2*3*4*5*6"] 无效。

标签前缀列表

tagPrefixList

类型:list[string]

必填项:tagStatus 设置为“已标记”且未指定 tagPatternList 时,是必填项

仅在您指定了 "tagStatus": "tagged" 但未指定 tagPatternList 时才使用。您必须指定以逗号分隔的镜像标签前缀列表,以便根据此列表执行生命周期策略操作。例如,如果您的镜像被标记为 prodprod1prod2 等,则可以使用标签前缀 prod 以指定所有这些标签。如果指定多个标签,则仅选择具有所有指定标签的镜像。

计数类型

countType

类型:字符串

必需:是

指定要应用于镜像的计数类型。

如果 countType 设置为 imageCountMoreThan,您还可以指定 countNumber 以创建一个规则,用于设置存储库中存在的镜像数量限制。如果 countType 设置为 sinceImagePushed,您还可以指定 countUnitcountNumber,以指定存储库中存在的镜像的时间限制。

计数单位

countUnit

类型:字符串

必需:是,仅当 countType 设置为 sinceImagePushed

指定计数单位 days 作为时间单位,除此之外,还指定 countNumber 表示天数。

只有在 countTypesinceImagePushed 时才能指定;如果您在 countType 是任何其他值时指定计数单位,将发生错误。

计数

countNumber

类型:整数

必需:是

指定计数数量。可接受的值为正整数 (0 不是可接受的值)。

如果使用的 countTypeimageCountMoreThan,则该值为您希望在存储库中保留的镜像的最大数量。如果使用的 countTypesinceImagePushed,则该值为镜像的最大使用期限。

操作

type

类型:字符串。

必需:是

指定操作类型。支持的值为 expire