运行 AWS Golang Lambda 时执行格式错误
exec format error when running AWS Golang Lambda
我有一个 go 应用程序,结构如下:
cmd
|
报告
|
main.go
main.go 导入 internal/reports
包并有一个函数 main(),它委托调用 aws-lambda-go/lambda.Start()
函数。
代码是构建 运行 命令(片段):
cd internal/reports && go build handler.go
cd ../..
go build -o reports ../cmd/reports/main.go && chmod +x reports && zip reports.zip reports
reports.zip
被上传到 AWS Lambda,当按下 Test
按钮时它会抛出错误:
{
"errorMessage": "fork/exec /var/task/reports: exec format error",
"errorType": "PathError"
}
reports
设置为 Lambda 的 Handler
.
此外,代码是在 Ubuntu 14.04 机器上构建的,作为 aws/codebuild/ubuntu-base:14.04
Docker 图像的一部分,在 AWS CodeBuild 上。这里应该没有环境问题,即使错误提示跨平台问题。
有什么想法吗?
问题是 main
包中没有声明 main() 函数,这是 Golang 强制要求的 language spec
您必须使用 GOARCH=amd64 GOOS=linux
进行构建。
无论您在哪里构建二进制文件,Lambda 的二进制文件在 Amazon Linux.
上都是 运行
所以,试试这个构建命令。
GOARCH=amd64 GOOS=linux go build handler.go
我有一个 go 应用程序,结构如下:
cmd
|
报告
|
main.go
main.go 导入 internal/reports
包并有一个函数 main(),它委托调用 aws-lambda-go/lambda.Start()
函数。
代码是构建 运行 命令(片段):
cd internal/reports && go build handler.go
cd ../..
go build -o reports ../cmd/reports/main.go && chmod +x reports && zip reports.zip reports
reports.zip
被上传到 AWS Lambda,当按下 Test
按钮时它会抛出错误:
{
"errorMessage": "fork/exec /var/task/reports: exec format error",
"errorType": "PathError"
}
reports
设置为 Lambda 的 Handler
.
此外,代码是在 Ubuntu 14.04 机器上构建的,作为 aws/codebuild/ubuntu-base:14.04
Docker 图像的一部分,在 AWS CodeBuild 上。这里应该没有环境问题,即使错误提示跨平台问题。
有什么想法吗?
问题是 main
包中没有声明 main() 函数,这是 Golang 强制要求的 language spec
您必须使用 GOARCH=amd64 GOOS=linux
进行构建。
无论您在哪里构建二进制文件,Lambda 的二进制文件在 Amazon Linux.
所以,试试这个构建命令。
GOARCH=amd64 GOOS=linux go build handler.go