gpt4 book ai didi

aws-lambda - 部署为 Docker 镜像时如何运行多个 lambda 函数?

转载 作者:行者123 更新时间:2023-12-04 15:08:02 25 4
gpt4 key购买 nike

当在 templates.yaml 中声明多个函数/应用程序时,dockerfile 对于 aws lambda 和通过 aws-sam 的 docker 图像看起来如何?

这是运行“单个应用程序”的示例 dockerfile

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

COPY app.py requirements.txt ./

RUN python3.8 -m pip install -r requirements.txt -t .

# Command can be overwritten by providing a different command in the template directly.
CMD ["app.lambda_handler"]

最佳答案

Dockerfile 本身看起来是一样的。那里不需要更改。

Docker 文件中 CMD 行的存在看起来需要更改,但这是一种误导。 CMD 值可以在 template.yaml 文件中基于每个函数指定。

template.yaml 文件必须使用有关新函数的信息进行更新。您需要为每个函数添加一个 ImageConfig 属性。 ImageConfig 属性必须以与 CMD 值相同的方式指定函数名称,否则会这样做。

您还需要将每个函数的 DockerTag 值更新为唯一的,尽管这 may be a bug .

这是 NodeJs“Hello World”示例 template.yaml 的资源部分,已更新以支持单个 Docker 镜像的多个功能:

Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
ImageConfig:
Command: [ "app.lambdaHandler" ]
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
Metadata:
DockerTag: nodejs14.x-v1-1
DockerContext: ./hello-world
Dockerfile: Dockerfile
HelloWorldFunction2:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
ImageConfig:
Command: [ "app.lambdaHandler2" ]
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello2
Method: get
Metadata:
DockerTag: nodejs14.x-v1-2
DockerContext: ./hello-world
Dockerfile: Dockerfile

这假设 app.js 文件已修改为同时提供 exports.lambdaHandlerexports.lambdaHandler2。我假设相应的 python 文件应该进行类似的修改。

以这种方式更新 template.yaml 后,sam local start-api 按预期工作,将 /hello 路由到 lambdaHandler /hello2lambdaHandler2

这在技术上创建了两个独立的 Docker 镜像(一个对应于每个不同的 DockerTag 值)。然而,除了标签之外,这两个图像将是相同的,并且基于相同的 Dockerfile,因此第二个图像将使用第一个图像的 Docker 缓存。

关于aws-lambda - 部署为 Docker 镜像时如何运行多个 lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65724726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com