lambda 运行两次,并且运行时在没有提供原因的情况下退出

我在一个容器上运行了一个用 Go 编写的 lambda,该图像是用 alpine-golang 构建的,并用 alpine 运行。

在测试时,我从日志中注意到 lambda 在退出之前运行了两次,并显示以下内容:

Error: Runtime exited without providing a reason Runtime.ExitError

在我的本地系统中,这段代码运行良好,没有错误,我之前尝试过在没有容器的情况下运行,但仍然面临运行时问题。我的代码中唯一的错误处理和记录机制是log.Printlnfmt.Printf。任何人都知道发生了什么事?

编辑:

我捕获了退出代码,结果是0lambda 退出了

 Runtime exited with error: exit status 1 Runtime.ExitError


眼眸繁星
浏览 162回答 2
2回答

交互式爱情

我真的建议选择“无容器”路径。只需将您的可执行文件打包到 .zip 存档中即可。不要忘记编译GOOS=linux您的代码以与 AWS Lambda 兼容。在 Linux 上,您可以使用以下命令来获取存档:GOOS=linux go build -o executableName path/to/main.gozip archive.zip executableName请注意,您必须设置Handler为executableName在函数的运行时设置中。要处理 lambda 函数,您必须使用github.com/aws/aws-lambda-go/lambdapackage 并在 main 中启动处理函数,例如lambda.Start(handler).完整代码示例:package mainimport (    "context"    "log"    "github.com/aws/aws-lambda-go/lambda")func main() {    lambda.Start(handler)}func handler(ctx context.Context) {    log.Println("successfully executed")}

绝地无双

确保您遵循 aws 提供的有关构建容器映像的推荐指南。https://docs.aws.amazon.com/lambda/latest/dg/go-image.html你的 Dockerfile 应该看起来像这样才能与 lambda 一起工作,FROM public.ecr.aws/lambda/provided:al2 as build# install compilerRUN yum install -y golangRUN go env -w GOPROXY=direct# cache dependenciesADD go.mod go.sum ./RUN go mod download# buildADD . .RUN go build -o /main# copy artifacts to a clean imageFROM public.ecr.aws/lambda/provided:al2COPY --from=build /main /mainENTRYPOINT [ "/main" ]  Lambda 非常奇怪,如果您像在本地计算机上那样拥有 Dockerfile,那么它会运行一次,结束,然后第二次并在没有给出原因的情况下崩溃
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go