AWS Lambda镜像未加载最新代码问题求助
AWS Lambda镜像未加载最新代码问题求助
看起来你遇到了Lambda Docker镜像更新后不生效的典型问题,我帮你梳理几个最可能的原因和排查步骤,按顺序来应该能快速解决:
1. 先确认Lambda函数是否使用了最新的镜像版本
Lambda不会自动监听ECR的镜像更新,哪怕你推了新镜像到ECR,Lambda还是会沿用之前配置的旧镜像版本。你可以:
- 打开Lambda控制台,进入目标函数,切换到「代码」标签页,查看「镜像」区域显示的URI是不是你刚推送的
3xxxxxxxxxxx0.dkr.ecr.us-east-1.amazonaws.com/demo-lambda:$MY_DOCKER_IMAGE_VERSION - 如果版本不对,手动点击「部署新镜像」选择最新版本;或者用CLI命令更新:
aws lambda update-function-code --function-name 你的Lambda函数名 --image-uri 3xxxxxxxxxxx0.dkr.ecr.us-east-1.amazonaws.com/demo-lambda:$MY_DOCKER_IMAGE_VERSION
2. 重点排查:Buildspec里的镜像名称不一致!
我注意到你构建镜像的命令是:
docker image build -t 359772415770.dkr.ecr.us-east-1.amazonaws.com/demolambda:$MY_DOCKER_IMAGE_VERSION .
但推送镜像的命令是:
docker push 359772415770.dkr.ecr.us-east-1.amazonaws.com/demo-lambda:$MY_DOCKER_IMAGE_VERSION
这里镜像仓库名称差了个横杠!demolambda vs demo-lambda——你其实把新构建的镜像推到了另一个仓库里,Lambda用的还是原来demolambda仓库的旧镜像!这大概率是核心问题!
3. 验证ECR里的镜像内容是否正确
如果上面的名称没问题,你可以本地拉取最新镜像验证代码:
# 先登录ECR aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin 3xxxxxxxxxxx0.dkr.ecr.us-east-1.amazonaws.com # 拉取镜像 docker pull 3xxxxxxxxxxx0.dkr.ecr.us-east-1.amazonaws.com/demo-lambda:$MY_DOCKER_IMAGE_VERSION # 查看容器内的app.py内容 docker run --rm 3xxxxxxxxxxx0.dkr.ecr.us-east-1.amazonaws.com/demo-lambda:$MY_DOCKER_IMAGE_VERSION cat app.py
看看输出里有没有新增的print('\nevent = ', event)语句,如果没有,说明构建过程没正确打包新代码,检查下buildspec的工作目录是否正确,或者构建时有没有意外忽略了app.py的修改?
4. 处理Lambda的镜像缓存
如果以上都确认没问题,但还是运行旧代码,那可能是Lambda的镜像缓存在作怪。Lambda会缓存镜像层来优化冷启动速度,你可以通过修改函数的一个小配置(比如添加一个临时环境变量,保存后再删掉)来强制Lambda重新拉取镜像,触发冷启动加载新内容。
另外顺便提一句:你的app.py里用到了boto3但没写import boto3,这个后续可能会报错,记得补上哦!
备注:内容来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

