You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SAM为Docker部署的Lambda函数配置ECR生命周期策略

解决方案

可以直接通过SAM模板为ECR镜像仓库配置生命周期策略,实现旧镜像自动清理,无需手动在ECR控制台操作。

配置方法

你需要在SAM模板中显式声明ECR仓库资源并定义生命周期规则,再将使用镜像部署的Lambda函数关联到该仓库即可,完整示例如下:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: SAM App with ECR Lifecycle Policy

Resources:
  # 定义Lambda对应的ECR仓库,配置生命周期策略
  DemoLambdaECRRepo:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: demo-lambda-image-repo
      LifecyclePolicy:
        LifecyclePolicyText: |
          {
            "rules": [
              {
                "rulePriority": 10,
                "description": "仅保留最近10个镜像",
                "selection": {
                  "tagStatus": "any",
                  "countType": "imageCountMoreThan",
                  "countNumber": 10
                },
                "action": {
                  "type": "expire"
                }
              }
            ]
          }

  # 定义使用镜像部署的Lambda函数
  DemoLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: demo-lambda
      PackageType: Image
      ImageRepository: !Ref DemoLambdaECRRepo
      ImageConfig:
        Command: ["app.lambda_handler"]
      MemorySize: 256
      Timeout: 10

常用生命周期规则说明

你可以根据业务需要调整LifecyclePolicyText的规则配置,常见场景如下:

  • 按时间清理:将countType改为sinceImagePushed,countUnit设为days,countNumber设为保留天数,即可自动清理超过指定天数的旧镜像
  • 分标签清理:可以设置tagStatus为tagged,指定匹配特定标签的镜像单独设置保留规则,比如生产环境打了prod标签的镜像保留90天,其余测试镜像仅保留7天
  • 多规则叠加:可以设置多条不同优先级的规则,优先级数字越小优先级越高,先执行高优先级规则

注意事项

  • SAM默认自动创建的ECR仓库不支持直接配置生命周期策略,必须显式声明ECR资源后关联到Lambda函数才能通过模板管理策略
  • 如果你有多个Lambda函数分别使用独立的ECR仓库,为每个仓库单独声明对应的AWS::ECR::Repository资源并配置策略即可
  • 生命周期规则触发后,ECR会在24小时内完成过期镜像的自动清理,清理后不会再产生存储费用
  • 对于之前已经通过SAM自动创建的ECR仓库,你可以先将现有仓库导入CloudFormation栈,再添加生命周期策略配置,避免重新创建仓库丢失已有镜像

内容的提问来源于stack exchange,提问作者Savage Reader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:36:03