AWS Lambda 无法从层导入模块
AWS Lambda unable to import module from layer
我正在尝试创建一个具有从层加载的依赖项的 Lambda 函数。我以为我刚才部署的时候能正常工作,但我现在一直收到这个错误,我不知道我在这里做错了什么。
我正在尝试使用 pyopenssl 为 python 3.x 创建一个图层。我的理解是,在为层压缩之前,应该将依赖项安装到“python”顶级目录中。以下是图层的创建方式:
requirements.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 函数,并添加一个导入:
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 运行时函数,但它也失败了。
有没有什么明显的我做错了我错过了?如果将 OpenSSL 添加到 python
就足够了 - 我很确定我不久前就使用了 python 3.8,并且我在这上面使用了相同的部署代码。
如果我将 PYTHONPATH
设置为 /opt
的变量添加到 lambda,则加载有效。看起来默认情况下不搜索“/opt/python”。
不确定它以前是如何工作的
我正在尝试创建一个具有从层加载的依赖项的 Lambda 函数。我以为我刚才部署的时候能正常工作,但我现在一直收到这个错误,我不知道我在这里做错了什么。
我正在尝试使用 pyopenssl 为 python 3.x 创建一个图层。我的理解是,在为层压缩之前,应该将依赖项安装到“python”顶级目录中。以下是图层的创建方式:
requirements.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 函数,并添加一个导入:
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 运行时函数,但它也失败了。
有没有什么明显的我做错了我错过了?如果将 OpenSSL 添加到 python
就足够了 - 我很确定我不久前就使用了 python 3.8,并且我在这上面使用了相同的部署代码。
如果我将 PYTHONPATH
设置为 /opt
的变量添加到 lambda,则加载有效。看起来默认情况下不搜索“/opt/python”。
不确定它以前是如何工作的