在lambda层中导入库

2024-05-19 22:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在AWS Lambda中导入jsonschema库,以便执行请求验证。我希望通过Lambda层来实现这一点,而不是将依赖项与我的应用捆绑在一起。我压缩了venv/lib/python3.6/site-packages/下的所有依赖项。我将其作为lambda层上传,并分别使用publish-layer-versionaws lambda update-function-configuration命令将其添加到我的aws lambda中。zip文件夹名为“lambda-dep.zip”,所有文件都在它下面。但是,当我尝试在lambda_函数中导入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?

Tags: tolambdaimportawslayervenvlibpackages
3条回答

您要确保解压缩时.zip遵循此文件夹结构

python/lib/python3.6/site packages/{LibrariesGoHere}。

上传那个压缩文件,确保图层被添加到Lambda函数中,你应该可以很好地运行。

这就是对我起作用的结构。

这里是我用来上传图层的脚本:

#!/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.6lambdas具有相同的运行时。 脚本的参数是层名称。

将层上载到AWS后,请确保在Lambda中引用了正确的层版本。

有一种更简单的方法。只需将包安装到python文件夹中。然后使用-t(Target)选项安装软件包。注意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

相关问题 更多 >