Импорт библиотек в лямбда-слоях - PullRequest
1 голос
/ 15 апреля 2019

Я хотел импортировать библиотеку jsonschema в свою AWS Lambda, чтобы выполнить проверку запроса. Вместо того, чтобы связывать зависимости с моим приложением, я собираюсь сделать это через Lambda Layers. Я заархивировал все зависимости под venv/lib/python3.6/site-packages/. Я загрузил его как лямбда-слой и добавил его в свою aws-лямбду, используя команды publish-layer-version и aws lambda update-function-configuration соответственно. Папка zip называется lambda-dep.zip, и все файлы находятся под ней. Однако, когда я пытаюсь импортировать jsonschema в мою функцию lambda_function, я вижу ошибку ниже -

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?

Ответы [ 3 ]

3 голосов
/ 15 апреля 2019

Вот скрипт, который я использую для загрузки слоя:

#!/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 ссылается версия нужного слоя.

3 голосов
/ 15 апреля 2019

Вы хотите, чтобы ваш .zip следовал этой структуре папок при распаковке

питон / Библиотека / python3.6 / сайт-пакеты / {LibrariesGoHere}.

Загрузите этот zip, убедитесь, что слой добавлен в функцию Lambda, и вы должны быть готовы.

Это структура, которая сработала для меня.

1 голос
/ 21 апреля 2019

Есть более простой способ.Просто установите пакеты в папку Python.Затем установите пакеты, используя опцию -t (Target).Обратите внимание "."в почтовом файле.это джокер.

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

Файл zip теперь является вашим лямбда-слоем.

Пошаговые инструкции с видеоинструкцией можно найти здесь.

https://geektopia.tech/post.php?blogpost=Create_Lambda_Layer_Python

...