【问题标题】:exec format error when running AWS Golang Lambda运行 AWS Golang Lambda 时出现 exec 格式错误
【发布时间】:2018-11-14 23:50:01
【问题描述】:

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

cmd
|
报告
|
main.go

main.go 导入 internal/reports 包并有一个函数 main(),它将调用委托给 aws-lambda-go/lambda.Start() 函数。

代码正在构建运行命令(sn-p):

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 Image 的一部分,在 AWS CodeBuild 上。这里应该没有环境问题,即使错误表明存在跨平台问题。

有什么想法吗?

【问题讨论】:

    标签: amazon-web-services go aws-lambda aws-lambda-go


    【解决方案1】:

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

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

    GOARCH=amd64 GOOS=linux go build handler.go

    【讨论】:

    • hmm 在 Windows 10 中构建仅在“GOOS=”时对我有效,然后我必须设置“GOARCH=amd64 GOOS=linux”才能使 build-lambda-zip.exe 工作跨度>
    • 运行“go get -u golang.org/x/crypto/md4”为我解决了这个问题,不知道为什么我必须这样做
    • docs.aws.amazon.com/lambda/latest/dg/… 提供了我在 Windows 上需要的详细信息,但这个答案指向了我
    • 很多亚马逊文档和在线演练跳过/忽略GOARCH=amd64 部分。如果您使用的是新的 Mac M1 芯片之一,这是必需的。
    【解决方案2】:

    问题是 main 包中没有声明 main() 函数,这是 Golang language spec 强制要求的

    【讨论】:

    • 谢谢,考虑到错误消息,这真的很难捕捉到。
    • 我完全错过了您的评论并在此浪费了数小时!谢谢你的分享。正是这个!
    猜你喜欢
    • 2021-02-08
    • 2021-12-31
    • 2022-07-09
    • 2021-09-15
    • 2020-03-22
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多