如何使用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
相关产品推荐
相关产品推荐

