xtr*_*ori 7 aws-lambda aws-sam-cli aws-sam
dockerfile在 中声明多个函数/应用程序时,通过 aws-sam 使用 docker 镜像的 aws lambda 看起来怎么样templates.yaml?
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值更新为唯一,尽管这可能是一个错误。
以下是 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和。/hello2lambdaHandler2
从技术上讲,这会创建两个单独的 Docker 映像(每个不同的DockerTag值一个)。但是,除了标签之外,这两个映像将是相同的,并且基于相同的Dockerfile,因此第二个映像将利用第一个映像的 Docker 缓存。
| 归档时间: | 
 | 
| 查看次数: | 4276 次 | 
| 最近记录: |