Go 获取错误“;fork/exec/var/task/main:没有这样的文件或目录;在执行aws lambda函数时
获取错误fork/exec/var/task/main:执行lambda函数时没有这样的文件或目录 我正在使用windows平台在Go中运行和构建代码 我已经完成了以下步骤来部署go aws lambda处理程序:Go 获取错误“;fork/exec/var/task/main:没有这样的文件或目录;在执行aws lambda函数时,go,amazon-s3,aws-lambda,handler,Go,Amazon S3,Aws Lambda,Handler,获取错误fork/exec/var/task/main:执行lambda函数时没有这样的文件或目录 我正在使用windows平台在Go中运行和构建代码 我已经完成了以下步骤来部署go aws lambda处理程序: 在windows平台上使用VSCode用go语言编写代码 使用以下命令生成项目:go Build main.go 将main.exe转换为main.zip 使用aws控制台帐户上载了处理程序名为main aws lambda Function的main.zip 已创建测试事件以测试l
go build main.go
AWS控制台中的详细信息错误
{
"errorMessage": "fork/exec /var/task/main: no such file or directory",
"errorType": "PathError"
}
START RequestId: 9ef206ed-5538-407a-acf0-06673bacf2d7 Version: $LATEST
fork/exec /var/task/main: no such file or directory: PathError
null
END RequestId: 9ef206ed-5538-407a-acf0-06673bacf2d7
REPORT RequestId: 9ef206ed-5538-407a-acf0-06673bacf2d7 Duration: 0.64 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 31 MB Init Duration: 1.49 ms
AWS控制台中的日志输出
{
"errorMessage": "fork/exec /var/task/main: no such file or directory",
"errorType": "PathError"
}
START RequestId: 9ef206ed-5538-407a-acf0-06673bacf2d7 Version: $LATEST
fork/exec /var/task/main: no such file or directory: PathError
null
END RequestId: 9ef206ed-5538-407a-acf0-06673bacf2d7
REPORT RequestId: 9ef206ed-5538-407a-acf0-06673bacf2d7 Duration: 0.64 ms Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 31 MB Init Duration: 1.49 ms
在命令提示符下运行以下命令
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
在此之后,构建项目并将zip文件上载到aws控制台lambda
像这样
GOOS=linux-GOARCH=amd64-CGO\u-ENABLED=0 go-build-o main.go
参考链接:可能有两个原因:
在我的例子中,问题是默认将处理程序设置为“hello”函数 需要通过AWS Lambda视图面板->基本设置->编辑将其更改为“main”
最近我遇到了类似的问题,我解决了。正如错误所说,它正在查找具有句柄名称的可执行文件,因此您应该将可执行文件命名为与handler相同的名称 按照这些步骤操作,您将不会收到此错误,我正在使用PowerShell
> go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip # If you do not this have utility earlier
> $env:GOOS = "linux"
> $env:GOARCH = "amd64"
> $env:CGO_ENABLED = "0"
> go build -o .\Handler .\main.go # considering your are in the same directory where your main.go or handler code is present
> ~\Go\Bin\build-lambda-zip.exe -o .\Handler.zip .\Handler
上载此代码,并将处理程序名称更改为handler(您在上面创建的可执行文件的名称)
让我知道这是否有帮助。在我的情况下,这与我的围棋设置有关 当我使用Go版本管理器时,在编译我的项目之前,我必须运行以下命令来指定正确的Go路径
gvm use go1.x.x
继续编译,然后部署。我的案例很奇怪,但我会把它留在这里,以防有人需要它 我在Docker容器中构建了可执行文件,然后使用
Docker cp
将文件放在本地目录中。然后我压缩了可执行文件并部署了它
显然,Docker cp
创建了一个类似符号链接的文件,而不是一个实际的文件,所以它根本不起作用
我的解决方案是只使用
sudo cp
并将可执行文件复制为另一个文件,这创建了一个物理文件,并进行了部署。在我尴尬的情况下,我从外部压缩文件夹,因此我上载的zip中的路径是“folder/main”此错误与程序无关;这是一个配置问题。
请尝试在lambda控制台的go运行时设置下提供符合要求的go文件名-
在我的例子中,我的go lambda编译文件是test,所以将处理程序配置为test,它对我有效
虽然本例中没有问题,但我认为值得指出的是,可执行文件必须被称为“main”,而不仅仅是代码中的函数。在遵循上述说明时,我发现了这一点。是的,您是对的,可执行文件必须被称为“main”,而不仅仅是代码中的函数。现在可以在“运行时设置”下使用标准的serverless framework boiler代码找到这一点,这就解决了在AWS lambda函数中命名处理程序的错误。一旦遵循了上述步骤,将“处理程序”命名为一个重要步骤。