【问题标题】:"PathError" when deploying Go project to AWS Lambda将 Go 项目部署到 AWS Lambda 时出现“PathError”
【发布时间】:2020-11-05 05:37:54
【问题描述】:

通过 AWS 控制台部署此 Go-based AWS Lambda project 时,我收到:

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

这是我采取的步骤:

  • 从 Git 下载了marriage-master 项目
  • 在终端,go get "github.com/aws/aws-lambda-go/lambda" so the script is buildable by Go
  • 在终端中,go build main.go 创建 Lambda 将用于执行的文件
  • 在终端中,zip main.zip main 将文件归档到 .zip for deployment to Lambda
  • 在 AWS 控制台中,将 main.zip 上传到 Function code

  • 在 AWS 控制台中,将 Handler 更改为 main

但我不断收到此路径错误。知道我做错了什么吗?

【问题讨论】:

  • 你在什么操作系统上运行?如果您在 Windows 或 macOS 上运行,您是否确定构建了 Linux 二进制文件?
  • 我在 MacOS 10.15.6 (19G60d) 上,不,我认为我没有。您有可以分享的说明吗?

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


【解决方案1】:

要在 AWS Lambda 中部署 Go 应用,请运行以下命令:

  1. 构建针对 Linux 操作系统和 amd64 架构的二进制文件

    GOARCH=amd64 GOOS=linux go build main.go -ldflags="-s -w"

  2. 压缩二进制文件

    zip lambda.zip 主文件

  3. 直接从 AWS Lambda 控制台上传此二进制文件,或将其放入 S3 存储桶并导入。

您已经完成了 lambda 配置。

【讨论】:

  • 我收到can't load package: named files must be .go files: -ldflags=-s -w
  • 尝试删除 main.go 吗? GOARCH=amd64 GOOS=linux go build -ldflags="-s -w"
  • 这消除了错误,但是当我压缩二进制文件时,我得到zip warning: name not matched: main zip error: Nothing to do! (main.zip)
  • 检查你的二进制名称@MSD。
【解决方案2】:

尝试不带标志:

GOARCH=amd64 GOOS=linux go build main.go

【讨论】:

    【解决方案3】:

    我的问题是包名没有命名为main

    https://stackoverflow.com/a/50701572/2639163

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-17
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2018-08-06
      • 2021-07-15
      相关资源
      最近更新 更多