ECR生命周期策略异常

Ron*_*one 6 amazon-web-services amazon-ecs docker docker-image amazon-ecr

在我们的ECR中,我们每天都在推送带有标签16_XXXX的许多图像。某些推送的图像不是该应用程序的稳定版本。如果有稳定版本,我们将使用标签16.XXXX重新标记图像。

我们已经建立了生命周期策略,以在imageCountMoreThan(500)处清除带有16_XXXX标签的图像。由于存在带有两个标签的图像(即稳定版本)(例如16_0715和16.0715),它们也会被清除吗?

我们不想删除图像的所有稳定版本。是否有办法为图像重新加标签并删除旧标签,只是在ECR生命周期策略中将其除外?

谢谢!

Vol*_*Rig 6

如果只有一条规则,则确实会删除您的稳定图像。

但是,您可以在策略中使用2条规则来完成此操作。优先级为10的规则将确保您的稳定映像(16.XXXX)的安全,优先级为20的规则将“查看”具有不稳定版本(16_XXXX)的标签的数量,但将无法删除稳定的映像处于更高的优先级。这是一个例子:

{ "rules": [ { "rulePriority": 10, "description": "Keep Stable Images", "selection": { "tagStatus": "tagged", "tagPrefixList": ["16."], "countType": "imageCountMoreThan", "countNumber": 9999 }, "action": { "type": "expire" } }, { "rulePriority": 20, "description": "Delete Old Unstable Images", "selection": { "tagStatus": "tagged", "tagPrefixList": ["16_"], "countType": "imageCountMoreThan", "countNumber": 500 }, "action": { "type": "expire" } } ] }

来源:我为生命周期策略编写了规则评估逻辑:)您也可以检查文档,在此页底部描述了一些有关用户可以利用的系统的事实:https : //docs.aws.amazon.com /AmazonECR/latest/userguide/LifecyclePolicies.html

An image that matches the tagging requirements of a rule cannot be expired by a rule with a lower priority.

  • 尊重:规则薄弱,语义混乱。我们希望 ECR 的行为类似于 OCI 注册表,而不是 S3。丢弃提交/分支标签并保留版本标签需要非正统的标记策略(需要不同的前缀)和许多_stil_不表达意图的规则(没有操作“保留”,只有“在遥远的未来到期”)。 (3认同)
  • @VolatileRig只是好奇为什么规则不允许我们想要排除的标签前缀?例如,我们只想标记具有特定前缀(例如 stable)的稳定图像,而将其余图像保留为其他通用标记,例如 buildnumber 和 git hashes,这些标记将与所有图像相关联。只需指定排除图像标签以使除具有稳定标签的图像之外的所有图像都过期不是很好吗? (2认同)
  • 我应该说我不再在AWS工作,但我可以简单地说一下为什么它是这样设计的。我们从 S3 的生命周期策略评估中获得灵感,并且必须仔细关注 API 设计,以使其保持简单易懂。由于字段致力于删除除指定排除之外的所有内容,因此我们冒着用户意外制定策略的风险,该策略将删除他们上传的每个新图像,除非它与排除模式匹配,我们认为从长远来看,这将更具破坏性和混乱性跑步。 (2认同)