在 lambda 层中导入库

新手上路,请多包涵

我想在我的 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_function 中导入 jsonschema 时,我看到以下错误 -

 from jsonschema import validate

 {
  "errorMessage": "Unable to import module 'lambda_api': No module named 'jsonschema'",
  "errorType": "Runtime.ImportModuleError"
}

我是否遗漏了任何步骤,是否有不同的机制可以在 lambda 层中导入任何内容?

原文由 Punter Vicky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 852
2 个回答

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

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

上传该 zip,确保该层已添加到 Lambda 函数,您应该可以开始了。

这是对我有用的结构。

原文由 guitarhero23 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

原文由 nicor88 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题