如何对无服务器项目进行 docker 化

问题描述 投票:0回答:1

我有一个项目,使用无服务器框架在我的 AWS 环境中部署 lambda。 该项目是一个接收 API 调用的 Web 服务器。

但是,我有一位客户希望使用 docker 将其本地托管在他的一台服务器上。

问题是我找不到任何解决方案来 dockerize 我的无服务器项目。 有没有办法获取这个无服务器项目,对其进行 docker 化,部署这个 docker,然后客户可以进行 API 调用?

我能想到的唯一解决方案是添加一个抽象层和一个 Flask/express 服务器,它将 API 调用转换为对我的 lambda 函数的调用。我不确定这有多清楚。

我还没有找到任何解决方案可以做到这一点。我是唯一面临这种情况的人吗?

aws-lambda serverless-framework
1个回答
0
投票

您可以基于

aws/aws-lambda-base-images

构建自己的 docker 镜像

AWS Lambda 基础容器镜像

AWS 为 Lambda 提供的基础映像包含在 AWS Lambda 上运行打包为容器映像的函数所需的所有组件。

这些基础映像包含 Amazon Linux Base 操作系统、给定语言的运行时、依赖项以及实现 Lambda 运行时 API 的 Lambda 运行时接口客户端 (RIC)。

Lambda 运行时接口客户端允许您的运行时从 Lambda 服务接收请求并向其发送请求

亚马逊提出

aws-lambda-xxx
图像
aws-lambda-go
aws-lambda-java
aws-lambda-python
,...),或者您可以从众多分支之一构建自己的图像,以添加nodejs 12或18,红宝石,dotnet,...

从那里,您可以在本地测试您的 lambda:(遵循 文档

下面的 Dockerfile 示例:

FROM public.ecr.aws/lambda/python:3.8

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.handler" ]

然后,您可以使用 docker build 和 docker run 命令在本地测试您的函数。

建立您的形象:

docker build -t <image name> .

要在本地运行图像:

docker run -p 9000:8080 <image name>

在单独的终端中,您可以使用 cURL 在本地调用该函数:

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
© www.soinside.com 2019 - 2024. All rights reserved.