猿问

在 Docker 容器中部署 Go Lambda

我有一个 Go Lambda 函数。我想将该功能托管在 Docker 映像/容器中,以便我可以在本地对其进行测试。在这项工作中,我遵循了此处提供的说明。根据这些说明,我有以下文件:

  • .

    • 文件

    • go.mod

    • go.sum

    • 主程序

这些文件包含以下内容:

Dockerfile本节中 Dockerfile 的副本)

FROM alpine as build

# install build tools
RUN apk add go git
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 alpine
COPY --from=build /main /main
ENTRYPOINT [ "/main" ]

go.mod这个 go.mod的更新版本)

module maingo 1.18require (
    github.com/aws/aws-lambda-go v1.32.1
    github.com/aws/aws-sdk-go v1.44.60)

require github.com/jmespath/go-jmespath v0.4.0 // indirect

我可以成功运行:

go mod tidygo build

我还可以使用以下方法成功构建和运行我的 Docker 映像:

docker build -t lambda-fn .
docker run -d -v ~/.aws-lambda-rie:/aws-lambda --entrypoint /aws-lambda/aws-lambda-rie  -p 9000:8080 lambda-fn:latest /main

lambda-fn我可以在 Docker 桌面中看到一个基于所列图像的容器,状态为“正在运行”。但是,当我发送以下 cURL 请求时,没有任何反应:

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

我期望根据handleRequest函数的内容编写一些日志。我究竟做错了什么?


波斯汪
浏览 113回答 1
1回答

白猪掌柜的

如果您以恶魔模式 (-d) 运行,则看不到日志。删除 -d 并重新运行命令这是由于空的处理程序注册。您可以通过传递额外参数来设置处理程序名称docker run -d -v ~/.aws-lambda-rie:/aws-lambda --entrypoint /aws-lambda/aws-lambda-rie  -p 9000:8080 lambda-fn:latest /main handleRequest
随时随地看视频慕课网APP

相关分类

Go
我要回答