簡體   English   中英

部署為 Docker 圖像時如何運行多個 lambda 函數?

[英]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.lambdaHandlerexports.lambdaHandler2 我假設相應的 python 文件應該進行類似的修改。

以這種方式更新template.yaml后, sam local start-api將按預期工作,將/hello路由到lambdaHandler並將/hello2路由到lambdaHandler2

這在技術上創建了兩個單獨的 Docker 圖像(每個圖像對應一個不同的DockerTag值)。 然而,除了標簽之外,這兩個圖像將是相同的,並且基於相同的Dockerfile ,因此第二個圖像將使用第一個圖像的 Docker 緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM