[英]How to run multiple lambda functions when deploying as a Docker image?
當在templates.yaml
中聲明多個函數/應用程序時,dockerfile 對於 aws lambda 和dockerfile
圖像通過 aws-sam 看起來如何?
這是運行“單個應用程序”的示例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
行的存在看起來需要更改,但這是一種誤導。 可以在template.yaml
文件中基於每個函數指定CMD
值。
必須使用有關新 function 的信息更新template.yaml
文件。您需要為每個 function 添加一個ImageConfig
屬性ImageConfig
屬性必須以與CMD
值相同的方式指定 function 的名稱,否則會這樣做。
您還需要將每個函數的DockerTag
值更新為唯一的,盡管這可能是一個錯誤。
這是 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.lambdaHandler
和exports.lambdaHandler2
。 我假設相應的 python 文件應該進行類似的修改。
以這種方式更新template.yaml
后, sam local start-api
將按預期工作,將/hello
路由到lambdaHandler
並將/hello2
路由到lambdaHandler2
。
這在技術上創建了兩個單獨的 Docker 圖像(每個圖像對應一個不同的DockerTag
值)。 然而,除了標簽之外,這兩個圖像將是相同的,並且基於相同的Dockerfile
,因此第二個圖像將使用第一個圖像的 Docker 緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.