为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
眼眸繁星 2023-02-21 12:39:44
我在一个容器上运行了一个用 Go 编写的 lambda,该图像是用 alpine-golang 构建的,并用 alpine 运行。在测试时,我从日志中注意到 lambda 在退出之前运行了两次,并显示以下内容:Error: Runtime exited without providing a reason Runtime.ExitError在我的本地系统中,这段代码运行良好,没有错误,我之前尝试过在没有容器的情况下运行,但仍然面临运行时问题。我的代码中唯一的错误处理和记录机制是log.Println和fmt.Printf。任何人都知道发生了什么事?编辑:我捕获了退出代码,结果是0lambda 退出了 Runtime exited with error: exit status 1 Runtime.ExitError
查看完整描述

2 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

我真的建议选择“无容器”路径。只需将您的可执行文件打包到 .zip 存档中即可。不要忘记编译GOOS=linux您的代码以与 AWS Lambda 兼容。


在 Linux 上,您可以使用以下命令来获取存档:


GOOS=linux go build -o executableName path/to/main.go

zip archive.zip executableName

请注意,您必须设置Handler为executableName在函数的运行时设置中。


要处理 lambda 函数,您必须使用github.com/aws/aws-lambda-go/lambdapackage 并在 main 中启动处理函数,例如lambda.Start(handler).


完整代码示例:


package main


import (

    "context"

    "log"


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

)


func main() {

    lambda.Start(handler)

}


func handler(ctx context.Context) {

    log.Println("successfully executed")

}


查看完整回答
反对 回复 2023-02-21
?
绝地无双

TA贡献1946条经验 获得超4个赞

确保您遵循 aws 提供的有关构建容器映像的推荐指南。https://docs.aws.amazon.com/lambda/latest/dg/go-image.html


你的 Dockerfile 应该看起来像这样才能与 lambda 一起工作,


FROM public.ecr.aws/lambda/provided:al2 as build

# install compiler

RUN yum install -y golang

RUN go env -w GOPROXY=direct

# cache dependencies

ADD go.mod go.sum ./

RUN go mod download

# build

ADD . .

RUN go build -o /main

# copy artifacts to a clean image

FROM public.ecr.aws/lambda/provided:al2

COPY --from=build /main /main

ENTRYPOINT [ "/main" ]  

Lambda 非常奇怪,如果您像在本地计算机上那样拥有 Dockerfile,那么它会运行一次,结束,然后第二次并在没有给出原因的情况下崩溃


查看完整回答
反对 回复 2023-02-21
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信