Pun*_*cky 4 python amazon-web-services python-3.x aws-lambda aws-lambda-layers
我想在我的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
Run Code Online (Sandbox Code Playgroud)
{
"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?
Run Code Online (Sandbox Code Playgroud)
Rya*_*utz 15
之前答案的更新:根据 AWS 文档,要求已更改为仅放置在 /python 目录中,而无需其余目录结构。
https://aws.amazon.com/premiumsupport/knowledge-center/lambda-import-module-error-python/
确保解压缩的目录结构在 /python 目录中包含库。
gui*_*o23 12
您要确保解压缩后的.zip遵循此文件夹结构
python / lib / python3.6 / site-packages / {LibrariesGoHere}。
上载该zip,确保将图层添加到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}
Run Code Online (Sandbox Code Playgroud)
我将上面的内容添加到名为的文件中build_layer.sh,然后将其称为bash build_layer.sh my_layer。该脚本需要requirements.txt在同一文件夹中,并且使用Docker具有与Python3.6 Lambdas相同的运行时。脚本的arg是图层名称。
将图层上传到AWS之后,请确保在Lambda中引用了正确的图层版本。
| 归档时间: |
|
| 查看次数: |
3448 次 |
| 最近记录: |