我想在我的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
{
"errorMessage": "Unable to import module 'lambda_api': No module named 'jsonschema'",
"errorType": "Runtime.ImportModuleError"
}```
Am I missing any steps are is there a different mechanism to import anything within lambda layers?
答案 0 :(得分:2)
您要确保解压缩后的.zip遵循此文件夹结构
python / lib / python3.6 / site-packages / {LibrariesGoHere}。
上传该zip文件,确保将图层添加到Lambda函数中,您应该一切顺利。
这是对我有用的结构。
答案 1 :(得分:2)
这是我用来上传图层的脚本:
#!/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中引用了正确的图层版本。
答案 2 :(得分:0)
有一个更简单的方法。只需将软件包安装到python文件夹中即可。然后使用-t(目标)选项安装软件包。注意“。”在zip文件中。这是一张通配符。
mkdir lambda_function cd lambda_function mkdir python cd python pip install yoruPackages -t ./ cd .. zip /tmp/labmda_layer.zip .
zip文件现在是您的lambda层。
包含视频说明的分步说明可以在这里找到。
https://geektopia.tech/post.php?blogpost=Create_Lambda_Layer_Python