【发布时间】:2020-02-12 14:11:34
【问题描述】:
我对 lambda 和 SAM 都是新手 - 所以如果我搞砸了任何简单的事情,请不要大喊:D。
总结:我无法让sam build构建template.yaml中指定的层,它只构建了lambda函数。
背景:我正在尝试在 python3.7 中构建一个使用 skimage (scikit-image) 模块的 lambda 函数。为此,我正在尝试使用 SAM 来构建和部署它。 ...这是有效的
我正在尝试将 scikit-image 模块部署为一个层(并且还使用 SAM 构建),而不是将其包含在 lambda 函数方向中...这不起作用
首先,我只是扩展标准 SAM Hello World 应用程序。
我只需将 skimage 添加到 requirements.txt ,然后使用 sam build -u,然后从构建的包目录中手动删除 numpy/scipy 依赖项(我已经包含 AWS scipy/numpy 层)就可以工作了.
(我将 import numpy、scipy.ndimage 和 skimage.draw 添加到标准的 hello world 应用程序中,并为每个应用程序添加了一些测试函数调用)
requirements.txt:
requests
scikit-image
之后,一切正常(在本地和/或 AWS 上运行)。
但是,我现在想将 skimage 模块从我的应用程序中移出并移到一个新的自定义层中(我想将 skimage 放在一个层中以重复用于一些功能)
为了设置它,我创建了一个依赖项目录并将 requirements.txt 移到那里(在 app 目录中留下空的 requirements.txt)。 然后我更新了 template.yaml 以指定新层:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
sam-app
Sample SAM Template for sam-app
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.7
Layers:
- arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python37-SciPy1x:2
- !Ref SkimageLayer
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
SkimageLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: Skimage
Description: Skimage module layer
ContentUri: dependencies/
CompatibleRuntimes:
- python3.7
RetentionPolicy: Retain
DependsOn:
- Skimage
目录结构:
▾ dependencies/
requirements.txt (responses and scikit-image)
▸ events/
▾ hello_world/
__init__.py
app.py
requirements.txt (now empty)
▸ tests/
README.md
template.yaml
但是,当我使用该模板文件运行 sam build -u 时,没有为 template.yml 文件中 ./dependencies: SkimageLayer 中指定的层构建任何内容。但是HelloWorldFunction 仍然可以正确构建(当然现在没有任何包含的模块)
【问题讨论】:
-
我正在基于此工作一点:noise.getoto.net/2019/02/06/…。大约一半时,他暗示 SAM build 不会自己构建层,因为他在节点依赖项目录中手动运行 npm install 来安装节点依赖项
标签: aws-lambda aws-lambda-layers