Как загрузить код Python с библиотеками в лямбда-AWS с локальной машины Windows с помощью консоли AWS - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно использовать AWS Lambda, запускаемый через шлюз API.У меня есть скрипт Python, который загружает модель машинного обучения из S3bucket и получает входные данные от вызова API и прогнозирует результат.Я могу успешно запустить лямбда-функцию, написанную на языке Python.Но я хочу использовать пакеты машинного обучения для прогнозирования в лямбда-функции.Итак, я узнал, что мне нужно загрузить код с пакетами, установленными в виртуальной среде, и я сделал это. Но лямбда при запуске выдает ошибку «Невозможно импортировать модель lambda_function».У меня есть lambda_function.py с методом «обработчик».Пожалуйста, дайте мне знать, правильно ли я делаю это (создаю виртуальную среду, устанавливаю и загружаю пакеты) и почему это ошибка.Также, дайте мне знать решения для Windows и консоли AWS.Я видел много ответов с командами Linux и использованием aws cli.

папка zip

lambda_function

lamndaНастройки функций

Настройки лямбда-функций

Обновление:

Это сводит меня с ума !.Я перепробовал все методы, найденные в ответах, и ни один из них не работает для меня.И он выдает ту же ошибку: «Невозможно импортировать модуль: lambda_function», поэтому я не могу понять, где находится ошибка.Пожалуйста, помогите мне, если у вас есть какие-либо предложения.Прежде чем сказать имена функций: у меня есть правильные имена: lambda_function.lambda_handler.Я архивировал содержимое, а не каталог.Пожалуйста, смотрите мой лямбда-код и лямбда-настройки ниже лямбда-json-файл лямбда-код функции: импорт boto3 импорт os импорт uuid импорт sklearn import pickle

def lambda_handler(event, context):
s3_client = boto3.client('s3')
s_desc=event['params']['querystring']['token']
X_test1=[]
X_test1.append(s_desc)
#load model
bucket = 'harshini-snow-bucket'
key = 'model.pkl'
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
s3_client.download_file(bucket, key, download_path)

f = open(download_path, 'rb')
model = pickle.load(f)
f.close()
#class_predicted = model.predict(X_test1)

return X_test1

Пожалуйста, сообщите мне, если есть какие-либо другие способы.. Я попробую что-нибудь, чтобы это работало.

Обновление 2:

Ошибка

Код

Ответы [ 4 ]

0 голосов
/ 23 мая 2019

Я знаю, что немного опоздал, чтобы ответить на этот вопрос, но я столкнулся с той же проблемой с библиотекой панд для python.

Это была ссылка, которая помогла мне решить эту проблему ЗДЕСЬ

поэтому ответ в двух словах:

1.go to здесь

2. поиск библиотеки, которую вы хотите использовать

3. , затем перейдите к опции загрузки

4. скачать файл с опцией Linux

5.Распакуйте файл в папку вашего проекта (для этого я использую 7-zip)

6. Теперь создайте новый zip-файл вашего проекта и загрузите его на lambda

0 голосов
/ 07 июня 2018

Вы должны сделать собственный пакет развертывания для лямбды, используя docker или EC2 .Он не будет работать, если вы создадите пакет на локальном компьютере, так как он не скомпилирует необходимые библиотеки.

Вот полный пример того, как вы будете создавать пользовательский пакет, в этом примере пакеты PILLOW библиотека обработки изображений Python вместе с лямбда-кодом, вы можете упаковать все остальные библиотеки, необходимые для вашей модели, таким же образом в тот же пакет вместе с PIL

ссылка на пример

Запомните одну вещь, в примере имя файла CreateThumbnail.py , вы можете дать ему любое имя, но всегда настраивайте свой обработчик таким образом, filename.handler-function, например, disco.lambda_handler , где disco.py - это имя файла, а lambda_handler - это модуль обработчика кода для лямбды

0 голосов
/ 15 июня 2018

Ответы здесь технически правильные, но если вы работаете на компьютере с Windows (или чем-то еще, кроме Amazon Linux), у вас может возникнуть множество проблем с размещением пользовательских пакетов в вашем приложении Python.Лямбда-приложения работают на Amazon Linux, поэтому вам нужно установить пакеты с этой ОС или чем-то максимально близким.

Вот один из моих ответов, который описывает, как я собираю пакеты для моего лямбда-приложения:

https://stackoverflow.com/a/50767639/3023353

0 голосов
/ 06 июня 2018

Сначала установите все необходимые пакеты в папке на локальном компьютере.Также включите основной файл lambda_function.py в эту папку.Теперь выберите все пакеты и файл python внутри папки и сожмите их в файл .zip.Здесь вы должны убедиться, что вы сжимаете содержимое папки, а не саму папку. Затем вы можете загрузить zip-файл в lambda напрямую или через s3.Еще один момент, на который следует обратить внимание, если файл python называется « lambda_function.py » или нет.По умолчанию лямбда предполагает, что основной файл python имеет имя «lambda_function.py».Если вы использовали любое другое имя, вы можете изменить имя файла из лямбда-консоли в разделе Код функции в разделе Обработчик ... Надеюсь, это поможет.

...