繁体   English   中英

AWS Lambda 无法从层导入模块

[英]AWS Lambda unable to import module from layer

我正在尝试创建一个 Lambda function 依赖于从层加载。 我以为我在不久前部署它时可以正常工作,但是现在我不断收到此错误,我无法弄清楚我在这里做错了什么。

我正在尝试使用 pyopenssl 为 python 3.x 创建一个层。 我的理解是,在压缩图层之前,应该将依赖项安装到“python”顶级目录中。 以下是图层的创建方式:

要求.txt:

$ echo "pyopenssl" > requirements.txt
pip install -t python -r requirements.txt
python -c "import shutil;shutil.make_archive('layer-openssl','zip','python')"

python 命令等效于从python目录创建 zip 文件。 例如,如果我创建一个临时目录并在其中解压缩,则顶级目录是pythonOpenSSL以及其中的所有传递依赖项(cffi、密码学等)。

Python 版本是 3.8,pip 从 python 3.8 也是 20.0。

然后我创建层(例如,目前为了测试,我在 web 控制台中手动执行此操作) - 已将该层标记为与 3.6、3.7 和 3.8 版本兼容。

然后我创建一个 Python 3.8 function,并添加一个导入:

from OpenSSL.crypto import load_certificate

def lambda_handler(event, context):
  return true

这给了我一个错误: Unable to import module 'lambda_function': No module named OpenSSL.crypto

我尝试发布标记为与 Python 2.7 兼容的层的第二个版本,然后使用相同的导入创建了 2.7 运行时 function,但它也失败了。

有什么明显的我做错了我错过了吗? 应该将 OpenSSL 添加到python就足够了 - 我很确定我不久前已经使用 python 3.8 进行了此操作,并且我在此使用相同的部署代码。

如果我将设置为/optPYTHONPATH变量添加到 lambda,则加载工作。 看起来默认情况下不搜索“/opt/python”。

不知道它以前是如何工作的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM