【问题标题】:Python AWS Lambda Module Not Found未找到 Python AWS Lambda 模块
【发布时间】:2020-06-16 19:35:30
【问题描述】:

我有一个用 Python 3.7 实现的 AWS Lambda,并部署在一个包中,如下所示:

universe-UIFunctionCelestial-XXXX
|--universe-0-0-1-SNAPSHOT
| |--src
| | |--lambdas
| | | |--__init__.py
| | | |--celestial_persist_function.py
| | |--__init__.py

下图显示了在 AWS 控制台中部署的此程序包:

可通过 API Gateway 访问 Lambda。它的 GET 方法成功调用了 Lambda,但是 Lambda 返回以下错误:

2020 年 3 月 4 日星期三 09:49:35 UTC:转换前的端点响应正文:{“errorMessage”:“无法导入模块‘universe-0-0-1-SNAPSHOT/src/lambdas/celestial_persist_function’:没有模块命名为 'src'", "errorType": "Runtime.ImportModuleError"}

2020 年 3 月 4 日星期三 09:49:35 UTC:由于客户函数错误,Lambda 执行失败,状态为 200:无法导入模块“universe-0-0-1-SNAPSHOT/src/lambdas/celestial_persist_function”:没有模块命名为'src'。 Lambda 请求 ID:381990d0-f193-4e49-b0fa-2c6d736552bd

2020 年 3 月 4 日星期三 09:49:35 UTC:方法已完成,状态为:502

我的印象是 Python Lambda 执行会将 lambda 作为模块导入,因此我在每个级别添加了 __init__.py 文件。这些可能有助于 lambda 导入以及 lambda 中的导入,例如:

from src.persistence.persistence_service import PersistenceService

无论如何,我已经尝试了许多不同的安排和文件结构。我可能做错了什么?

顺便说一句,所有代码都在本地执行,没有任何问题。

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda


    【解决方案1】:

    我没有使用 Python 的经验,但看起来您应该使用另一个根文件夹上传您的代码。请尝试将 ..../src/ 移动到 /

    附:我建议使用 serverless.com 框架来构建你的 lambdas - 它更容易开始

    【讨论】:

    • 正如我所提到的,我尝试了许多安排,其中包括更改名称和移动目录
    • 嗯。是的,无服务器框架,我大约一年前去过那里。实际上我使用了 CloudFormation,这是 AWS 自己的部署方法,但是,如果部署框架的选择对内部 python 错误有任何影响,我会感到相当惊讶。
    • 无服务器框架 (serverless.com) 和 CloudFormation 相关但不同。我建议看看前者。使将无服务器应用程序部署到 AWS 变得更加简单。
    • @MichaelCoxon 实际上,SF 在 CloudFormation 之上工作。请在此处查看示例serverless.com/framework/docs/providers/aws/examples/… 如果您仍想自己做:尝试将您的函数移动到 / 和 /lib 目录下的包中。 Python 只是在 lambdas 目录下找不到目标命名空间,我想
    • 看,谢谢你们对 SF 的所有吹捧,但我真的很想解决这个问题
    【解决方案2】:

    这个问题被问到已经有一段时间了,但我还是会回答它——也许它会帮助别人。

    我遇到了同样的问题 - Lambda 的问题是它在 src 文件夹中运行,并且它不理解您的导入。你需要的是:

        from [folder inside src] import [filename]
    

    因此您的导入应如下所示:

        from persistence import persistence_service
    

    在此之后,您将能够调用 PersistenceService。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 2021-09-13
      • 2021-11-20
      • 2021-04-20
      • 2016-11-01
      相关资源
      最近更新 更多