Poo*_*att 24 amazon-s3 handler go aws-lambda
获取错误 fork/exec /var/task/main: 执行 lambda 函数时没有这样的文件或目录。
我正在使用 Windows 平台在 Go 中运行和构建代码。
我已完成以下步骤来部署 go aws-lambda 处理程序:
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
// Request represents the requested object
type Request struct {
ID int `json:"ID"`
Value string `json:"Value"`
}
// Response represents the Response object
type Response struct {
Message string `json:"Message"`
Ok bool `json:"Ok"`
}
// Handler represents the Handler of lambda
func Handler(request Request) (Response, error) {
return Response{
Message: fmt.Sprint("Process Request Id %f", request.ID),
Ok: true,
}, nil
}
func main() {
lambda.Start(Handler)
}
Run Code Online (Sandbox Code Playgroud)
构建命令
go build main.go
Run Code Online (Sandbox Code Playgroud)
AWS 控制台中的详细错误
{
"errorMessage": "fork/exec /var/task/main: no such file or directory",
"errorType": "PathError"
}
Run Code Online (Sandbox Code Playgroud)
AWS 控制台中的日志输出
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
Run Code Online (Sandbox Code Playgroud)
小智 18
在我的情况下,问题是默认设置为“ hello ”函数的处理程序。
需要通过 AWS Lambda 视图面板 -> 基本设置 -> 编辑将其更改为“ main ”。
Poo*_*att 14
在命令提示符下运行以下命令
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
Run Code Online (Sandbox Code Playgroud)
在此之后,构建您的项目并将 zip 文件上传到 aws 控制台 lambda
像这样
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o main main.go
参考链接:https : //github.com/aws/aws-lambda-go
有两个原因可能发生:
你没有在 go build 中使用GOOS=linux GOARCH=amd64,所以试试:
GOOS=linux GOARCH=amd64 go build -o main main.go
您曾经使用 golang-alpine 基础映像构建此程序的一些 CI 功能,因此请尝试使用完整的 golang 映像。
小智 7
最近我遇到了类似的问题,我解决了它。正如错误所说,它正在查找具有句柄名称的可执行文件,因此您应该将可执行文件命名为与处理程序相同的名称。
按照以下步骤操作,您将不会收到此错误,我正在使用 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
Run Code Online (Sandbox Code Playgroud)
上传此代码,并将处理程序名称更改为 Handler(您在上面创建的可执行文件的名称)

如果这有帮助,请告诉我。
| 归档时间: |
|
| 查看次数: |
15216 次 |
| 最近记录: |