运行AWS Golang Lambda时出现exec格式错误

时间:2018-06-05 13:12:29

标签: amazon-web-services go aws-lambda aws-lambda-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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

因此,请尝试使用此构建命令。

GOARCH=amd64 GOOS=linux go build handler.go

答案 1 :(得分:2)

问题是main {)函数未在main包中声明,这是Golang language spec

强制执行的