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")
}

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,那么它會運行一次,結束,然后第二次并在沒有給出原因的情況下崩潰
- 2 回答
- 0 關注
- 215 瀏覽
添加回答
舉報