

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

# 在 Amazon ECR 中使用生命周期策略自动清理映像
<a name="LifecyclePolicies"></a>

Amazon ECR 生命周期策略提供了对私有存储库中镜像的生命周期管理的更多控制。生命周期策略是一项或多项规则，每项规则都为 Amazon ECR 定义一个操作。根据生命周期策略中的过期标准，可以根据生命周期策略中指定的标准在 24 小时内对图像进行存档或过期。当 Amazon ECR 基于生命周期策略执行操作时，此操作将在 AWS CloudTrail中记录为一个事件。有关更多信息，请参阅 [使用记录 Amazon ECR 操作 AWS CloudTrail](logging-using-cloudtrail.md)。

## 生命周期策略工作原理
<a name="lifecycle-policy-howitworks"></a>

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

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

![\[显示评估和应用生命周期策略的过程的图表。\]](http://docs.aws.amazon.com/zh_cn/AmazonECR/latest/userguide/images/lifecycle-policy.png)


1. 创建一个或多个测试规则。

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

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

1. 然后，生命周期策略评估器根据规则优先级应用规则，并显示存储库中哪些图像设置为过期或存档。规则优先级数字越小，优先级越高。例如，优先级为 1 的规则优先于优先级为 2 的规则。

1. 查看测试结果，确保标记为过期或存档的图像符合您的预期。

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

1. 创建生命周期策略后，您应该期望图像在满足过期标准后的 24 小时内过期或存档。

### 生命周期策略评估规则
<a name="lp_evaluation_rules"></a>

生命周期策略评估器负责解析生命周期策略的明文 JSON，评估所有规则，然后根据规则优先级将这些规则应用于存储库中的镜像。下文更详细地解释了生命周期策略评估器采用的逻辑。有关示例，请参阅 [Amazon ECR 中的生命周期策略的示例](lifecycle_policy_examples.md)。
+ 当参考项目存在于存储库中时，Amazon ECR 生命周期策略会在主题图片被删除或存档后的 24 小时内自动过期或存档这些项目。
+ 无论规则优先级如何，评估器都会同时评估所有规则。评估所有规则后，将根据规则优先级应用这些规则。
+ 只有一条或零条规则才会使图像过期或存档。
+ 符合规则标签要求的图像不能被优先级较低的规则过期或存档。
+ 规则永远无法标记由更高优先级规则标记的图像，但仍然可以将其识别为未过期或存档。
+ 选择特定存储类的所有规则集必须包含一组唯一的前缀。
+ 只有一条规则可以选择特定的存储类别，才能选择未加标签的图像。
+ 如果清单列表引用了图像，则如果不先删除或存档清单列表，则该图像无法过期或存档。
+ 到期时间始终按`pushed_at_time`或排序`transitioned_at_time`，并且始终在较旧的图像之前过期。如果图像已存档，然后在过去的任何时候恢复，`last_activated_at`则使用该图像代替`pushed_at_time`。
+ 生命周期策略规则可以指定 `tagPatternList` 或 `tagPrefixList`，但不能同时指定这两个选项。但是，一个生命周期策略可能包含多个规则，而不同的规则可能同时使用模式和前缀列表。如果 `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` 值中的***全部***通配符筛选条件均与任何映像的标签匹配，则表示该映像成功匹配。
+ 仅当`countUnit`为`sinceImagePushed``sinceImagePulled`、或时`countType`才使用该参数`sinceImageTransitioned`。
+ 使用`countType = imageCountMoreThan`，图像将根据从最小到最旧进行排序，`pushed_at_time`然后所有大于指定数量的图像都将过期或存档。
+ 使用`countType = sinceImagePushed`时，所有超过指定天数的图像都将过期或存档。`pushed_at_time` `countNumber`
+ 使用`countType = sinceImagePulled`，所有早`last_recorded_pulltime`于指定天数的图像`countNumber`都将被存档。如果从未提取过图像，`pushed_at_time`则使用该图像代替`last_recorded_pulltime`。如果图像已存档，然后在过去的任何时候恢复，但自图像恢复后从未提取过，`last_activated_at`则使用该图像代替`last_recorded_pulltime`。
+ 使用`countType = sinceImageTransitioned`时，所有早`last_archived_at`于指定天数的存档图像`countNumber`都将过期。
+ 到期时间始终按旧图像排序，`pushed_at_time`并且始终在较新的图像之前过期。