如何使AWS Lambda代码在ZIP包解压后位于根目录?
解决AWS Lambda通过ZIP包上传后代码在子目录导致Handler找不到的问题
方法1:修正ZIP打包范围(最直接的解决方式)
问题出在你打包时把整个仓库目录(比如my-lambda-repo/)压缩进去了,解压后Lambda的工作目录下是这个子文件夹,自然找不到根目录的index.handler。
在GitHub Actions的打包步骤里,必须进入代码所在的目录后再执行压缩命令,而不是压缩父目录。举两个常见场景:
- 如果代码都在仓库根目录的
src/子文件夹里:cd src && zip -r ../lambda-deploy.zip . - 如果代码直接在仓库根目录:
zip -r lambda-deploy.zip .
打包完成后可以本地解压验证,确保index.js等核心文件直接在ZIP的根目录,没有嵌套子文件夹。
方法2:调整Lambda的Handler路径(不用改打包逻辑)
要是不想改打包方式,直接修改Lambda函数的Handler配置,指定子目录里的处理程序就行。
比如代码解压后在my-project子目录里,原来的Handler是index.handler,改成my-project/index.handler。在GitHub Actions里可以和更新代码的命令一起执行:
# 先更新代码 aws lambda update-function-code --function-name YOUR_FUNCTION_NAME --zip-file fileb://lambda-deploy.zip # 再更新Handler配置 aws lambda update-function-configuration --function-name YOUR_FUNCTION_NAME --handler "my-project/index.handler"
方法3:用AWS官方的GitHub Action简化流程
不想自己写打包和CLI命令的话,用AWS官方的Lambda部署Action,它会自动处理打包路径的问题,前提是你按方法1的正确方式生成ZIP包:
- name: Deploy to AWS Lambda uses: aws-actions/aws-lambda-deploy@v2 with: function-name: YOUR_FUNCTION_NAME zip-file: lambda-deploy.zip
内容的提问来源于stack exchange,提问作者DevBob
相关产品推荐
相关产品推荐

