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

如何让AWS SAM build缓存生效,避免重复下载Lambda容器依赖?

解决AWS Lambda容器构建重复下载依赖的问题

1. 重构Dockerfile,利用Docker分层缓存

这是解决重复下载问题的核心,Docker会缓存每一层的构建结果,只要某一层的输入没变化,就会直接复用缓存。你需要把依赖安装和代码拷贝的步骤拆分:

  • 先把依赖配置文件(比如requirements.txt、poetry.lock这类锁文件)单独拷贝到容器
  • 先执行依赖安装命令
  • 最后再拷贝你的Lambda业务代码

示例Dockerfile:

FROM public.ecr.aws/lambda/python:3.11

# 先拷贝依赖文件,这一层只有依赖文件变更时才会重新构建
COPY requirements.txt ${LAMBDA_TASK_ROOT}

# 安装依赖,依赖不变时直接用Docker缓存,不会重新下载
RUN pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

# 最后拷贝代码,代码修改只会重建这一层,不影响依赖层
COPY app.py ${LAMBDA_TASK_ROOT}

CMD ["app.lambda_handler"]

2. 调整SAM Build的使用方式

针对你使用的SAM CLI 1.60.0版本:

  • 确保template.yaml里的函数是Image类型,并且指定了正确的Dockerfile路径
  • 执行构建时用sam build --cached即可,不需要加--beta-features(1.60.0版本的缓存功能已经脱离beta阶段)
  • 不要手动删除SAM默认缓存目录~/.aws-sam/cache,这个目录存储着构建缓存数据

3. 预构建大依赖的Lambda层(可选)

如果sentence-transformers这类大依赖几乎不会改动,可以单独做成Lambda层:

  • 用Docker构建层的压缩包:
# 生成依赖目录
docker run --rm -v "$PWD":/var/task public.ecr.aws/lambda/python:3.11 pip install sentence-transformers -t python/lib/python3.11/site-packages/
# 打包成zip
zip -r sentence-transformers-layer.zip python/
  • 把这个zip包上传到Lambda层,然后在template.yaml的函数配置里添加Layers字段引用该层的ARN
  • 这样后续构建容器时,完全不需要再处理这个大依赖,只更新你的业务代码即可

4. 验证缓存是否生效

构建时查看日志,如果出现Using cache for image...或者依赖安装步骤直接跳过,说明缓存生效了。如果还是重新下载,检查:

  • Dockerfile的步骤顺序是不是把依赖安装放在代码拷贝之前
  • 依赖配置文件有没有被误修改(比如不小心加了空行,也会触发层重建)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:55:16