我想在我的AWS Lambda中导入jsonschema
库以执行请求验证。而不是将依赖项与我的应用程序捆绑在一起,我希望通过Lambda Layers来实现这一点。我压缩了venv/lib/python3.6/site-packages/
下的所有依赖项。我将其作为Lambda层上传,并分别使用publish-layer-version
和aws lambda update-function-configuration
命令将其添加到我的AWS Lambda中。zip文件夹名为“lambda-dep.zip“,所有文件都在它下面。然而,当我尝试在lambda_function中导入jsonschema时,我看到下面的错误-
from jsonschema import validate
个字符
我是否遗漏了任何步骤,是否有不同的机制来导入lambda层中的任何内容?
5条答案
按热度按时间ifsvaxew1#
您需要确保.zip在解压缩时遵循此文件夹结构
python/lib/python3.6/site-packages/{LibrariesGoHere}.
上传压缩包,确保层被添加到Lambda函数中,你应该可以开始了。
这就是为我工作的结构。
kzmpq1sx2#
下面是我用来上传图层的脚本:
字符串
我将上面的内容添加到一个名为
build_layer.sh
的文件中,然后我将其命名为bash build_layer.sh my_layer
。该脚本需要在同一个文件夹中使用requirements.txt
,并且它使用Docker来拥有与Python3.6 Lambdas相同的运行时。脚本的arg是层名称。将图层上传到AWS后,请确保在Lambda中引用了正确的图层版本。
disho6za3#
更新以前的答案:根据AWS文档,要求已更改为仅放置在/python目录中,而没有目录结构的其余部分。
https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/
确保解压后的目录结构在/python目录下有库。
hvvq6cgz4#
有一个更简单的方法。只需将软件包安装到python文件夹中。然后使用-t(目标)选项安装软件包。注意zip文件中的“.”。这是一个通配符。
字符串
zip文件现在就是您的lambda层。
一步一步的说明,包括视频说明可以在这里找到。
https://geektopia.tech/post.php?blogpost=Create_Lambda_Layer_Python
lymgl2op5#
在我的例子中,这个问题与Python版本有关。在压缩包时,我使用了python\lib*python3.8*\site-packages,而我在lambda运行时设置中使用了Python 3.9。因此,请确保在打包和配置aws lambda运行时使用相同的版本。