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"]
Run Code Online (Sandbox Code Playgroud)
本身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
Run Code Online (Sandbox Code Playgroud)
这假设app.js文件已被修改以提供exports.lambdaHandler和exports.lambdaHandler2。我认为相应的 python 文件应该进行类似的修改。
template.yaml以这种方式更新后,sam local start-api按预期工作,路由/hello到lambdaHandler和。/hello2lambdaHandler2
从技术上讲,这会创建两个单独的 Docker 映像(每个不同的DockerTag值一个)。但是,除了标签之外,这两个映像将是相同的,并且基于相同的Dockerfile,因此第二个映像将利用第一个映像的 Docker 缓存。
| 归档时间: |
|
| 查看次数: |
4276 次 |
| 最近记录: |