【问题标题】:Serverless Framework / Python - Deploying multiple functions in a service无服务器框架/Python - 在服务中部署多个功能
【发布时间】:2022-03-17 18:42:17
【问题描述】:

我正在使用 Serverless 框架AWS Lambda 来部署多个函数,其中一个是用 Python3 编写的,并与我正在使用的几个外部库(redis、elasticsearch、dateutil)。 当使用 serverless invoke local --function function-name 在本地运行 lambda 时,它工作正常。当使用python3 function.py 在本地运行时,我收到错误ImportError: attempted relative import with no known parent package,因为我正在使用点前缀导入本地python 文件,即from .imported_file import one, two, three。在云上运行时,即serverless invoke --function function-name,我收到错误Unable to import module 'function-name/function': No module named 'redis'

由于我在同一个 yaml 文件下部署多个函数,每个函数都有自己的文件夹,并且我使用以下设置进行部署:

package:
  individually: true
  exclude:
    - "*/**"
    - "*"

在每个函数中:

package:
      include:
        - function-name/**

文件结构如下:

service-name/
├─ function-name/
│  ├─ packages/
│  │  ├─ dateutil/
│  │  ├─ elasticsearch/
│  │  ├─ redis/
│  ├─ function.py
│  ├─ imported_file.py
├─ function-name-2/
├─ serverless.yaml

我已经尝试了很多方法来克服这个问题,但似乎主要是在 lambda 的根文件夹中拥有所有文件和文件夹。问题是我无法做到这一点,因为使用上面的方法来打包函数会强制文件结构看起来像这样:

./
├─ function-name/
│  ├─ packages/
│  ├─ function.py

而不是这个:

./
├─ packages/
├─ function.py

如果有人可以向我解释发生了什么以及如何使其在云中运行,将不胜感激。

【问题讨论】:

    标签: python aws-lambda serverless serverless-framework aws-serverless


    【解决方案1】:

    通过将PYTHONPATH 设置为指向本地packages/ 文件夹的环境变量来解决它。

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 1970-01-01
      • 2018-02-05
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多