使用Terraform部署Go语言AWS Lambda时遭遇exec format error问题求助
Terraform部署Go语言AWS Lambda时遭遇exec format error问题求助
各位好,我最近在用Terraform部署Go语言编写的AWS Lambda函数时碰到了一个挺棘手的exec format error问题,折腾了好一阵都没解决,来请大家帮忙排查下!
情况是这样的:我用Terraform管理所有AWS资源(包括Lambda、API Gateway),部署JavaScript写的Lambda完全正常,但部署Go语言的Lambda时,调用接口就会返回执行格式错误。我怀疑是二进制架构的问题,但已经按照AWS Lambda要求的架构编译了,甚至换成provided.al2 runtime还是报同样的错误,Terraform的代码逻辑应该没问题,毕竟JS函数能正常跑起来。
下面是一些调试相关的信息:
目录结构
- infra
- helloGO
- main.go
- main(编译后的二进制文件)
- terraform
- main.tf
- hello.zip(包含main二进制文件的压缩包)
- helloGO
Terraform Lambda资源配置
resource "aws_lambda_function" "hello" { function_name = "hello" filename = "../hello.zip" // 从根目录引用hello.zip文件 runtime = "go1.x" # 之前测试nodejs16.x是正常的 handler = "main" role = aws_iam_role.hello_lambda_exec.arn timeout = 3 }
编译命令
我用以下命令编译Go代码并打包成zip:
buildGO: cleanGO GOOS=linux GOARCH=amd64 CGO_ENABLED=0 cd ./helloGo/ && go build -o ./ main.go cd ./helloGo/ && chmod +x main cd ./helloGo/ && zip ../hello.zip main
这里我确认amd64对应Lambda使用的x86_64架构,也试过网上提到的相关编译方案,但还是出现“二进制不可执行”的错误提示。
有没有大佬遇到过类似问题?求指点!
备注:内容来源于stack exchange,提问作者ibrahim jamil
相关产品推荐
相关产品推荐

