【问题标题】:How to organize Python code for AWS Lambda Layers如何为 AWS Lambda 层组织 Python 代码
【发布时间】:2021-06-03 21:25:53
【问题描述】:
我在 PyCharm 中使用 AWS SAM 和 AWS SAM CLI 模块。我正在尝试设置一个简单的程序:
- “ROCFacade”的 Amazon Lambda 层
- ROCFacade 将导入 Python 的标准请求模块。使用 PIP 安装后,我将其从 External Libraries/python3.8/site-packages 文件夹(第三个框)复制到第二个框的 lambda-layers 子文件夹中。
- 我正在尝试从 hello-world/app.py 调用它,到目前为止,它只不过是 AWS SAM 安装的样板
当我尝试运行它时,PyCharm 报告找不到 ROCFacade 模块。
Folder structure
如果我使用以下“应用程序”配置或 Lambda 配置运行它,则会出现错误消息。
我有另一个项目,它使用相同的 ROCFacade 和一个简单的 main.py 控制台应用程序,因此代码可以正常工作。我不确定我的问题是环境变量(即 Python 不知道查看 lambda-layers 文件夹)还是 Pythong 应用程序/Lambda 配置。我是 Python 和 Lambda/AWS 开发的新手。
谢谢
Lambda error message
Lambda configuration
【问题讨论】:
标签:
python
amazon-web-services
aws-lambda
【解决方案1】:
我发现了我的疏忽。在 template.yaml 中,开发者需要在函数描述符中添加对层的引用并定义层。
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.8
Layers: !Ref ROCFacadeLayer
Events:
HelloWorld:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /hello
Method: get
ROCFacadeLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: ROCFacadeLayer
ContentUri: lambda-layers/roc-facade-layer.zip
CompatibleRuntimes:
- python3.7
- python3.8