如何正确构建AWS Lambda ZIP文件?解决Handler找不到的目录嵌套问题
解决AWS Lambda因压缩目录嵌套导致找不到处理程序的问题
最优解是修正压缩方式,不要修改Lambda配置——AWS Lambda默认要求处理程序文件(比如index.js)和依赖目录node_modules直接放在压缩包的根目录下,嵌套目录会让Lambda找不到指定的handler,而且后续维护容易出问题。
正确的压缩操作方式
- 手动压缩:打开存放
index.js和node_modules的文件夹,直接选中这两个对象右键压缩(注意不要压缩整个父文件夹)。 - 命令行压缩:切换到这两个文件所在的目录,执行以下命令:
确保当前工作目录就是zip -r on-sign-in-trigger.zip index.js node_modulesindex.js所在的目录,这样压缩出来的ZIP包根目录就会直接包含这两个内容。
特殊情况:必须保留嵌套结构(不推荐)
如果因为某种原因无法调整压缩结构,你可以修改Terraform配置里的handler字段,指定嵌套路径。比如index.js在名为src的子目录里,就把handler改成src/index.handler:
resource "aws_lambda_function" "Lambda" { s3_bucket = var.bucket_id s3_key = "on-sign-in-trigger.zip" handler = "src/index.handler" # 指定嵌套路径 runtime = "nodejs18.x" role = aws_iam_role.lambda_iam_role.arn function_name = "on-sign-in-trigger-${var.env_name}" }
但这种方式会增加代码路径的复杂度,后续更新代码或依赖时容易出错,优先推荐调整压缩方式。
内容的提问来源于stack exchange,提问作者Stretch0
相关产品推荐
相关产品推荐

