Мне нужно использовать свою собственную версию boto3 внутри Lambda (Python 3.7). Версия, включенная в стандартную версию Lambda Python 3.7 (1.9.42), не поддерживает использование Textract по той или иной причине.
Для этого я сделал следующее на основе guide :
- Создайте пользовательский пакет, используя следующие команды:
pip freeze > requirements.txt
, что даст этот файл:
# requirements.txt
boto3==1.9.138
botocore==1.12.138
docutils==0.14
jmespath==0.9.4
python-dateutil==2.8.0
s3transfer==0.2.0
six==1.12.0
urllib3==1.24.2
mkdir build
pip3 install -r requirements.txt -t build/
cd build
zip -r ../boto3_layer.zip .
Затем я использовал графический интерфейс для загрузки нового лямбда-слоя (называемого boto3Layer).
Затем я успешно добавил слой в свою лямбда-функцию.
Проблема в том, что я не могу понять, как импортировать указанный слой в мой код, используя встроенный редактор кода.
У меня есть следующий код:
...
from boto3_layer as boto3
...
log.info(boto3)
Я получаю ошибку "errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'"
Я также попытался импортировать только boto3
, но подтвердил, что это была неправильная версия (это была версия, используемая Lambda), поэтому мой импорт не переопределил ее.
Я бы хотел просто знать, как импортировать мой пользовательский слой в мой код! Спасибо
редактировать: пробовать предложение:
virtualenv python --python=python3.7
source python/bin/activate
, а затем pip3 install boto3
zip -r boto3_layer.zip python/lib/
- Создайте новый лямбда-слой с
boto3_layer.zip
и добавьте слой к лямбда-функции
- Попытался запустить код сохранения выше
Сбой с
"errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'",
В итоге получилось импортировать boto3
вместо моего пользовательского имени.
import boto3
def lambda_handler(event, context):
textract = boto3.client('textract')