在 Amazon ECR 中使用生命周期策略自动清理映像 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon ECR 中使用生命周期策略自动清理映像

Amazon ECR 生命周期策略提供了对私有存储库中镜像的生命周期管理的更多控制。生命周期策略是一项或多项规则,每项规则都为 Amazon ECR 定义一个操作。根据生命周期策略中的过期条件,映像将根据使用时限或计数在 24 小时内过期。当 Amazon ECR 基于生命周期策略执行操作时,此操作将在 Amazon CloudTrail 中记录为一个事件。有关更多信息,请参阅 使用记录亚马逊的ECR操作 Amazon CloudTrail

生命周期策略工作原理

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

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

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

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

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

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

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

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

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

生命周期策略评估规则

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

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

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

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

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

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

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

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

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

  • 生命周期策略规则可以指定 tagPatternListtagPrefixList,但不能同时指定这两个选项。但是,一个生命周期策略可能包含多个规则,而不同的规则可能同时使用模式和前缀列表。如果 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) 的所有镜像均会过期。