微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS SAM:嵌套堆栈中的 Lambda 不会获取 requirements.txt

如何解决AWS SAM:嵌套堆栈中的 Lambda 不会获取 requirements.txt

我正在构建一个使用嵌套堆栈的 SAM 模板。我的顶层 template.yaml 有两个嵌套的堆栈资源:base_layer 和 eventHandler。 base_layer 堆栈创建了一个 lambda 堆栈集,该堆栈集具有其他函数将依赖的较低级别的功能(日志记录等)。这些似乎都按预期工作。

eventHandler 堆栈有一个 SNS 主题一个 SQS 队列以及一个 lambda 函数,该函数应该从 SQS 队列中获取事件并将它们插入到 RDS 数据库(存在于 SAM 堆栈之外)。

eventHandler python 执行 importMysqL.connector。有一个 requirements.txt 文件,其中列出了 MysqLmysql-connector。

当我在 AWS Lambda 控制台中测试 eventHandler lambda 函数时,我得到:

{
  "errorMessage": "Unable to import module 'eventHandler': No module named 'MysqL'","errorType": "Runtime.ImportModuleError"
}

我的文件结构如下:

+template.yaml
+samconfig.toml
+cloudformation_stacks
| +base_layer.yaml
| +eventHandler.yaml
+code
  +base_layer
  | +python
  |   +lib
  |     +python3.8
  |       +site-packages
  |         +loggingfunctions.py
  |         +otherlowlevelfunctions.py
  |         +moremiscellaneousfunctions.py
  +eventHandler
    +eventHandler.py
    +requirements.txt

Requirements.txt 具有:

mysql-connector==2.2.9
MysqL==0.0.2

我尝试将 requirements.txt 文件移动到目录树中的几个不同位置,但始终得到相同的结果。为什么 SAM/Cloudformation 不构建带有 MysqL 依赖项的 Python 环境?我该如何解决这个问题?

编辑:当我按照 https://docs.aws.amazon.com/lambda/latest/dg/python-package-create.html 处的说明操作并在包含 python 文件文件夹的子文件夹中使用目标文件夹执行 pip install 时,我看到 sam build 实际上确实打包了这些文件在它上传到 S3 的 .zip 文件中。我想我需要阅读如何告诉 Python 在哪里搜索导入文件。 (而且我仍然不相信这是正确方法,但看起来确实很有希望。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。