运行AWS Golang Lambda时的exec格式错误

Iva*_*van 10 go amazon-web-services 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
Run Code Online (Sandbox Code Playgroud)

reports.zip上载到AWS Lambda,当Test按下按钮时,后者又引发错误:

{
  "errorMessage": "fork/exec /var/task/reports: exec format error",
  "errorType": "PathError"
}
Run Code Online (Sandbox Code Playgroud)

reports设置为Lambda的Handler

同样,代码是aws/codebuild/ubuntu-base:14.04AWS CodeBuild上作为Docker Image 的一部分在Ubuntu 14.04机器上构建的。即使该错误表明存在跨平台问题,此处也不应该存在环境问题。

有任何想法吗?

Tos*_*ita 15

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

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

GOARCH=amd64 GOOS=linux go build handler.go

  • 许多亚马逊文档和在线演练都会跳过/忽略“GOARCH=amd64”部分。如果您使用的是新的 Mac M1 芯片之一,则这是必需的。 (7认同)

Iva*_*van 8

问题是main()函数未在main包中声明,这是Golang 语言规范所必需的