我有一个项目,使用无服务器框架在我的 AWS 环境中部署 lambda。 该项目是一个接收 API 调用的 Web 服务器。
但是,我有一位客户希望使用 docker 将其本地托管在他的一台服务器上。
问题是我找不到任何解决方案来 dockerize 我的无服务器项目。 有没有办法获取这个无服务器项目,对其进行 docker 化,部署这个 docker,然后客户可以进行 API 调用?
我能想到的唯一解决方案是添加一个抽象层和一个 Flask/express 服务器,它将 API 调用转换为对我的 lambda 函数的调用。我不确定这有多清楚。
我还没有找到任何解决方案可以做到这一点。我是唯一面临这种情况的人吗?
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!"}'