[英]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 文件。 例如,如果我创建一个临时目录并在其中解压缩,则顶级目录是python
和OpenSSL
以及其中的所有传递依赖项(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 进行了此操作,并且我在此使用相同的部署代码。
如果我将设置为/opt
的PYTHONPATH
变量添加到 lambda,则加载工作。 看起来默认情况下不搜索“/opt/python”。
不知道它以前是如何工作的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.