实际上,在使用terraform调用golang lambda时,我遇到了一个非常罕见的问题。因此,基本上,我使用像lambda这样的地形来部署我的所有资源,使用golang的api网关。问题是,当我使用terraform将我的golang lambda二进制.zip文件部署到lambda时,在用route检查请求时,它返回exec格式错误。terraform的所有代码都很好,当我测试简单的js lambda函数时,格式化也很好。我想这是二进制体系结构的问题,但我使用的二进制arch与aws上使用的lambda相同。如果有人能帮忙的话,我也会使用provide.al2来解决exec格式错误的问题。
一些调试信息
1-目录结构
- infra
-- helloGO
-- main.go
-- main // binary file
-- terraform
-- main.tf
-- hello.zip // with main binary file
2-地形lambda函数资源
resource "aws_lambda_function" "hello" {
function_name = "hello"
filename = "../hello.zip" // taking filename from root ./hello.zip
runtime = "go1.x" # nodejs16.x go1.x
handler = "main" # function.handler
role = aws_iam_role.hello_lambda_exec.arn
timeout = 3
}
3-构建命令
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
这将创建构建文件main和包,并将其作为main.zip根目录,以供lambda地形文件使用。
(amd64可执行x86_64)
我尝试过提供的解决方案,比如用amd64构建,但不知道它lambda调用go说二进制文件不能用这个可执行文件执行