Terraform资源AWS LAMBDA GO“fork/exec /var/task/main:没有这样的文件或目录”

6yoyoihd  于 2023-05-20  发布在  Go
关注(0)|答案(1)|浏览(78)

我有一个go脚本,我正在使用运行时配置制作Terraform资源aws_lambda_function:

handler     = "main"
  memory_size = 512
  timeout     = 360
  runtime     = "go1.x"

在我的go代码中,我导入了模块:

"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"

和ecr-sync.go的代码片段

func main() {
        lambda.Start(HandleRequest)
    }
    
    func HandleRequest(ctx context.Context, event event.HandleRequest)(string,error) {
      return string(body),err
}

lambda函数已经部署,但在测试函数时,它向我抛出以下错误:

{
  "errorMessage": "fork/exec /var/task/main: no such file or directory",
  "errorType": "PathError"
}

有人知道如何解决这个问题吗?我看到了这篇文章https://github.com/serverless/serverless/issues/4710,但我不确定如何通过管道设置构建配置,因为运行时配置是通过terraform设置的。

lrpiutwd

lrpiutwd1#

“fork/exec /var/task/main:没有这样的文件或目录”
该错误意味着lambda压缩文件中的可执行文件名不是main
在Go API for Lambda中,处理程序必须在main包中,并且必须在main()函数中调用,就像您的一样。无论是包还是函数名都不需要在任何地方设置。资源中的handler设置是指上传的zip文件中可执行文件的 filename
从错误中可以清楚地看出,您的zip文件没有main。(/var/task来自lambda端的内部设置)。
lambda函数已经部署,但在测试函数时,它向我抛出以下错误:
是的,部署一个函数并不验证它的处理程序配置是否匹配它的zipfile。该错误发生在运行时。包含扩展名的文件名无关紧要,但必须与您在lambda配置中指定的处理程序匹配。
要修复该错误,请检查zip文件,并更新处理程序以指向可执行文件。请记住,Go lambdas必须被编译,并且可执行文件必须在zip文件中提供-与解释型语言(如Python的Javascript)不同,源代码不在zip文件中。

相关问题