24

我有一个 go 应用程序,结构如下:

命令
|
报告
|
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.zipTest上传到 AWS Lambda,当按下按钮时会抛出错误:

{
  "errorMessage": "fork/exec /var/task/reports: exec format error",
  "errorType": "PathError"
}

reports设置为 Lambda 的Handler.

此外,代码构建在 Ubuntu 14.04 机器上,作为aws/codebuild/ubuntu-base:14.04Docker Image 的一部分,位于AWS CodeBuild上。这里应该没有环境问题,即使错误表明存在跨平台问题。

有任何想法吗?

4

2 回答 2

52

你必须用GOARCH=amd64 GOOS=linux. 无论您在何处构建二进制文件,Lambda 的二进制文件都在 Amazon Linux 上运行。

所以,试试这个构建命令。

GOARCH=amd64 GOOS=linux go build handler.go

于 2018-12-12T03:47:47.343 回答
25

问题是 main() 函数未在main包中声明,这是 Golang语言规范的强制要求

于 2018-06-05T13:39:17.163 回答