亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號