使用AWS SAM-CLI更新代码需每次重建,热重载不生效如何解决?
SAM CLI 镜像包类型热重载失效解决方案
热重载失效的核心原因是你使用了PackageType: Image的镜像打包模式,SAM CLI 原生热重载默认仅支持 Zip 打包的函数,镜像模式下默认使用构建生成的固定镜像内容,不会自动同步本地代码变更。
方案1:直接挂载本地代码目录(推荐,无需重复构建)
AWS 官方 Python Lambda 镜像的代码默认存放在容器内的/var/task目录,你可以在启动sam local start-api时添加卷挂载参数,直接把本地代码目录映射到容器内:
sam local start-api --docker-volume-basedir "$PWD/hello_world" --warm-containers EAGER
参数说明:
--docker-volume-basedir "$PWD/hello_world":将本地hello_world目录直接映射到容器的代码目录,修改本地app.py后下次请求会直接加载最新代码--warm-containers EAGER:提前启动并保持容器运行,避免每次请求重建容器,提升响应速度
该方案仅在修改requirements.txt、Dockerfile等依赖或配置项时才需要重新执行sam build,日常修改业务代码无需构建。
方案2:使用增量监听构建
如果因为镜像配置特殊无法直接挂载目录,可以开两个终端分别执行命令实现热重载:
- 第一个终端执行增量构建监听:
sam build --watch
该命令会监测本地代码变更,仅增量更新变化的内容,不会每次全量下载依赖,普通代码变更通常几秒即可完成构建。
2. 第二个终端启动本地API服务:
sam local start-api --warm-containers LAZY
注意事项
- 不需要手动修改
.aws-sam/build目录下的文件,上述两个方案均可直接同步本地源代码变更,无需维护两份代码 - 若修改了
template.yaml、Dockerfile、依赖文件等配置类内容,仍需执行一次全量sam build让变更生效
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

