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

使用Terraform创建AWS Lambda时遇filename文件加载失败求助

解决Terraform部署AWS Lambda时的main.zip文件找不到问题

我来帮你排查这个Lambda部署的坑,这种文件找不到的情况其实挺常见的,咱们一步步拆解问题:

  • 先确认Terraform的执行工作目录
    你说main.zip和.tf文件在同一路径,但要注意:Terraform是从你执行terraform apply的当前目录去查找文件的,而不是.tf文件所在的目录。比如如果你的.tf文件在./terraform/lambda目录,但你在./根目录执行命令,那Terraform会在根目录找main.zip,自然找不到。
    解决方法:先cd到.tf和main.zip所在的目录,再执行terraform apply;或者在filename里写相对模块路径,比如filename = "${path.module}/main.zip"(path.module会指向当前.tf文件所在的模块目录,更可靠)。

  • 不要随便去掉filename参数
    虽然Terraform文档说filename非必填,但那是因为Lambda代码还可以从S3加载(需要配置s3_bucket和s3_key)或者用内嵌代码(inline_code参数)。如果你只是删掉filename,没替换成其他代码源,Terraform根本不知道该从哪获取Lambda的代码,这肯定会出问题。本地部署的话,filename是必须的(除非用内嵌代码)。

  • 检查main.zip的结构和完整性
    有时候zip文件本身有问题也会导致报错:

    • 确认zip里不是嵌套文件夹:比如你压缩的是包含JS文件的文件夹,导致zip里是my-folder/index.js,而Lambda需要代码在根目录,这样会找不到handler。打开zip看看,要直接能看到你的JS文件,而不是在子文件夹里。
    • 确认zip不是空的,或者没有损坏:重新压缩一次JS文件试试。
  • 加上source_code_hash参数辅助验证
    建议在Lambda资源里加上source_code_hash = filebase64sha256("main.zip"),这个参数有两个作用:一是帮助Terraform检测zip文件的变化,避免不必要的重新部署;二是如果文件不存在,这个函数会直接报错,更早帮你定位路径问题,比默认的错误提示更清晰。

给你一个本地部署Lambda的完整示例配置参考:

resource "aws_lambda_function" "test_lambda" {
  filename      = "${path.module}/main.zip" # 用path.module确保路径正确
  function_name = "test_lambda"
  role          = aws_iam_role.lambda_exec_role.arn # 你需要提前创建好IAM角色
  handler       = "index.handler" # 对应你的JS文件里的导出函数,比如exports.handler = ...
  runtime       = "nodejs18.x" # 选你对应的Node.js版本

  source_code_hash = filebase64sha256("${path.module}/main.zip")
}

先按上面的步骤排查,应该能解决问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:47:19