Невозможно импортировать Pymongo в лямбда-функцию AWS - PullRequest
0 голосов
/ 12 декабря 2018

Как я могу использовать pymongo в лямбда-функции?

После следования инструкциям AWS - https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html#python-package-dependencies, Я обнаружил, что библиотека pymongo имеет значение не распознается моей функцией-обработчиком лямбды , но есть и другие локальные пакеты.

python-dateutil - это локальный пакет, который работает как положено , однакоПакет pymongo не распознается как импорт и не запускается при запуске.

Мое имя файла также правильно указано в функции-обработчике лямбды (hotel-car-rental.lambda_handler), и импорт других локальных пакетов работает нормально.Так я считаю, что это как-то связано с пимонго?Как я могу заставить pymongo работать с AWS Lambda?

Вот структура файла лямбда:

  • BookTrip
    • dateutil
    • pymongo
    • hotel-car-rental.py

Вот код:

import json
import datetime
import dateutil.parser  # <--- Works with local package
import logging

from pymongo import MongoClient   # <--- Does NOT work with local package

# --- Main handler ---

def lambda_handler(event, context):
    """
    Route the incoming request based on intent.
    The JSON body of the request is provided in the event slot.
    """

    logger.debug('event.bot.name={}'.format(event['bot']['name']))

    return dispatch(event)

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы также можете - вместо того, чтобы делать это, так как для этого нужно копировать / переделывать свои собственные вещи - запустить это внутри контейнера докера для упаковки лямбды.

docker run -v <code directory>:/function -it --rm ubuntu
apt-get update
apt-get install python-pip
apt-get install zip

cd function
pip install -t . pymongo
cd ..
zip -r linux-lambda.zip working

Единственная причина, по которой я это делаю сейчас,что при использовании Mac - что я и делаю - он может иногда выдавать ошибку «Invalid ELF Header», и Lambda не будет компилироваться!

0 голосов
/ 13 декабря 2018

Я решил эту проблему путем упаковки всего каталога 'site-packages' в моей виртуальной среде, а не только отдельных местоположений пакетов.Похоже, что pymongo устанавливает дополнительные зависимости, такие как библиотека bson, которые необходимы.

Вот конкретный процесс, который я использовал для упаковки установленных библиотек для использования в aws lambda.

mkdir -p ./package/tmp/lib
cp -a ./lambda/. ./package/tmp/
cp -a venv/lib/python3.7/site-packages/. ./package/tmp/
rm -rf ./package/tmp/wheel* && rm -rf ./package/tmp/pip*
cd ./package/tmp && zip -r ../../hotel-car-rental.zip .
...