python - 使用 SAM 使用自定义 python 函数构建 AWS Lambda 层
问题描述
我正在尝试使用 SAM 构建我的 lambda 函数。我的 lambda 函数依赖于我计划构建为 AWS Lambda 层的自定义 python 函数。我的自定义 python 函数对 PyPI 上公开可用的 python 包具有传递依赖关系,我在该层的 requirements.txt 文件中指定了该包。
这是我的 lambda 函数的文件夹结构:
my-lambda-func
|-- events
|-- event.json
|-- my-func
|-- my_function.py
|-- __init__.py
|-- requirements.txt
|-- my-layer
|-- my_layer.py
|-- requirements.txt
|-- template.yaml
|-- buildspec.yml
这是我的 template.yaml 文件:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
sam-test
Sample SAM Template for sam-test
Globals:
Function:
Timeout: 300
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: my-func/
Handler: app.lambda_handler
Layers:
- !Ref MyLayer
Runtime: python3.8
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
MyLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: MyLayer
Description: My custom Lambda Layer
ContentUri: ./my-layer/
CompatibleRuntimes:
- python3.8
LicenseInfo: MIT
RetentionPolicy: Retain
Metadata:
BuildMethod: python3.8
我的构建规范文件:
version: 0.2
phases:
build:
commands:
- sam package --template-file template.yaml --s3-bucket my-bucket --output-template-file packaged-template.yml
artifacts:
files:
- packaged-template.yml
当我在本地运行sam build
命令时,我看到正确创建了 2 个资源,包括拉取图层的传递依赖项,但是当我使用构建阶段设置 CodePipeline 以从 builspec 文件构建命令和使用 CloudFormation 的部署阶段时,该层不是t 按照我的预期建造。当我从控制台下载层时,它没有显示任何传递依赖。
有没有人做过类似的事情。有人可以帮助我做错什么吗?谢谢!
解决方案
从来没有使用过 Lambda 层,尽管我的 buildspec.yml 吸引了我的眼球的是你sam build
在打包之前没有运行。这是我的构建规范文件,也许它有帮助
phases:
install:
runtime-versions:
python: 3.7
build:
commands:
- pip install --upgrade aws-sam-cli
- sam build
- sam package --output-template-file packaged.yaml --s3-bucket ${FUNCTIONS_BUCKET}
artifacts:
type: zip
files:
- packaged.yaml
推荐阅读
- mysql - mysql按优先级顺序获取记录,无需全文搜索
- react-native - 错误:找不到模块'source-map-support'
- html - 在 HTML 中显示 YAML(Trello 风格的卡片)
- javascript - 为什么当我单击取消按钮时它仍然调用表单事件处理程序?
- android - 如何在 Android Studio Java 中将 JSON 数组显示到表格视图或布局中
- docker - Docker Compose - 如何包含实用程序 Python 脚本?
- javascript - HTMLCanvasElement.toDataURL() 在 Firefox 中提供的结果与在其他所有浏览器中不同
- swift - 快速的 SceneKit 节点转换
- reactjs - 使用 React Native 中 Flatlist 中自定义元素的参数进行导航:错误:无效的钩子调用
- python - 我的硒脚本出现超时异常错误