python-3.x 在lambda层中导入库

zpgglvta  于 2023-11-20  发布在  Python
关注(0)|答案(5)|浏览(105)

我想在我的AWS Lambda中导入jsonschema库以执行请求验证。而不是将依赖项与我的应用程序捆绑在一起,我希望通过Lambda Layers来实现这一点。我压缩了venv/lib/python3.6/site-packages/下的所有依赖项。我将其作为Lambda层上传,并分别使用publish-layer-versionaws lambda update-function-configuration命令将其添加到我的AWS Lambda中。zip文件夹名为“lambda-dep.zip“,所有文件都在它下面。然而,当我尝试在lambda_function中导入jsonschema时,我看到下面的错误-

from jsonschema import validate

个字符
我是否遗漏了任何步骤,是否有不同的机制来导入lambda层中的任何内容?

ifsvaxew

ifsvaxew1#

您需要确保.zip在解压缩时遵循此文件夹结构
python/lib/python3.6/site-packages/{LibrariesGoHere}.
上传压缩包,确保层被添加到Lambda函数中,你应该可以开始了。
这就是为我工作的结构。

kzmpq1sx

kzmpq1sx2#

下面是我用来上传图层的脚本:

#!/usr/bin/env bash

LAYER_NAME=$1 # input layer, retrived as arg
ZIP_ARTIFACT=${LAYER_NAME}.zip
LAYER_BUILD_DIR="python"

# note: put the libraries in a folder supported by the runtime, means that should by python

rm -rf ${LAYER_BUILD_DIR} && mkdir -p ${LAYER_BUILD_DIR}

docker run --rm -v `pwd`:/var/task:z lambci/lambda:build-python3.6 python3.6 -m pip --isolated install -t ${LAYER_BUILD_DIR} -r requirements.txt

zip -r ${ZIP_ARTIFACT} .

echo "Publishing layer to AWS..."
aws lambda publish-layer-version --layer-name ${LAYER_NAME} --zip-file fileb://${ZIP_ARTIFACT} --compatible-runtimes python3.6

# clean up
rm -rf ${LAYER_BUILD_DIR}
rm -r ${ZIP_ARTIFACT}

字符串
我将上面的内容添加到一个名为build_layer.sh的文件中,然后我将其命名为bash build_layer.sh my_layer。该脚本需要在同一个文件夹中使用requirements.txt,并且它使用Docker来拥有与Python3.6 Lambdas相同的运行时。脚本的arg是层名称。
将图层上传到AWS后,请确保在Lambda中引用了正确的图层版本。

disho6za

disho6za3#

更新以前的答案:根据AWS文档,要求已更改为仅放置在/python目录中,而没有目录结构的其余部分。
https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/
确保解压后的目录结构在/python目录下有库。

hvvq6cgz

hvvq6cgz4#

有一个更简单的方法。只需将软件包安装到python文件夹中。然后使用-t(目标)选项安装软件包。注意zip文件中的“.”。这是一个通配符。

mkdir lambda_function
cd lambda_function
mkdir python
cd python
pip install yourPackages -t ./
cd ..
zip /tmp/labmda_layer.zip .

字符串
zip文件现在就是您的lambda层。
一步一步的说明,包括视频说明可以在这里找到。
https://geektopia.tech/post.php?blogpost=Create_Lambda_Layer_Python

lymgl2op

lymgl2op5#

在我的例子中,这个问题与Python版本有关。在压缩包时,我使用了python\lib*python3.8*\site-packages,而我在lambda运行时设置中使用了Python 3.9。因此,请确保在打包和配置aws lambda运行时使用相同的版本。

相关问题