2 回答

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
我真的建議選擇“無(wú)容器”路徑。只需將您的可執(zhí)行文件打包到 .zip 存檔中即可。不要忘記編譯GOOS=linux您的代碼以與 AWS Lambda 兼容。
在 Linux 上,您可以使用以下命令來(lái)獲取存檔:
GOOS=linux go build -o executableName path/to/main.go
zip archive.zip executableName
請(qǐng)注意,您必須設(shè)置Handler為executableName在函數(shù)的運(yùn)行時(shí)設(shè)置中。
要處理 lambda 函數(shù),您必須使用github.com/aws/aws-lambda-go/lambdapackage 并在 main 中啟動(dòng)處理函數(shù),例如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")
}

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
確保您遵循 aws 提供的有關(guān)構(gòu)建容器映像的推薦指南。https://docs.aws.amazon.com/lambda/latest/dg/go-image.html
你的 Dockerfile 應(yīng)該看起來(lái)像這樣才能與 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 非常奇怪,如果您像在本地計(jì)算機(jī)上那樣擁有 Dockerfile,那么它會(huì)運(yùn)行一次,結(jié)束,然后第二次并在沒(méi)有給出原因的情況下崩潰
- 2 回答
- 0 關(guān)注
- 213 瀏覽
添加回答
舉報(bào)