AWS-серверная лямбда-функция: нет модуля по имениasticsearch error - PullRequest
0 голосов
/ 16 декабря 2018

Я новичок в использовании Lambda в AWS и в настоящее время пытаюсь выполнить некоторые из примеров сценариев, приведенных в разных блогах, чтобы проверить, как все это работает в среде без сервера.Один из примеров, над которым я пытаюсь работать, - это создание лямбда-функции, которая запускается всякий раз, когда объект добавляется в корзину s3, и сохраняет метаданные объекта вasticsearch.

Для этой цели я создал доменasticsearch, s3 bucket и начал писать лямбда-функцию.

Я использую встроенный редактор кода, указанный в лямбда-консоли, и выбрал python3.6 как мое время выполнения.Ниже приведен код:

from __future__ import print_function
from pprint import pprint
import boto3
import json
from elasticsearch import Elasticsearch, RequestsHttpConnection


def lambda_handler(event, context):
    imageid =  event['Records'][0]['s3']['object']['key']
    print(imageid)

Этот код еще не подтолкнул данные к упругому поиску, который я напишу позже.Тем не менее, я получаю сообщение об ошибке «модуль не найден» для импортаasticsearch.
Ниже приведен журнал ошибок при тестировании приведенного выше кода.

Response:
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"a26249c3-00e2-11e9-83b0-ffc7719455cf"

Function Logs:
START RequestId: a26249c3-00e2-11e9-83b0-ffc7719455cf Version: $LATEST
Unable to import module 'lambda_function': No module named elasticsearch

END RequestId: a26249c3-00e2-11e9-83b0-ffc7719455cf
REPORT RequestId: a26249c3-00e2-11e9-83b0-ffc7719455cf  Duration: 0.42 ms   Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 25 MB  

У меня сложилось впечатление, что сервер меньше средыпо умолчанию загружают все необходимые библиотеки по мере их вызова.Однако, когда я искал дополнительную информацию об этой ошибке, я обнаружил, что некоторые из них указали, что источник должен быть указан в zip-файле, в то время как другие указывают, что zip-файл - When you use the ZipFile property to specify your function's source code and that function interacts.

Меня это смущает.Нужно ли устанавливать модульasticsearch в безсерверной среде или загружать его в виде zip-файла?Как мне получить лямбда-функцию, поговорим об упругом поиске.

1 Ответ

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

Да, среда AWS Lambda по умолчанию включает в себя только boto3 библиотеку python, для всего остального вам потребуется создать zip-файл со всеми зависимостями и загрузить его в функцию Lambda.

Есть (как минимум) 3 способа сделать это:

  1. Использовать AWS Cloud9 - IDE в облаке
  2. Написать код на своем компьютере и настроить конвейер CI / CD , который создаст zip для вас при внесении изменений
  3. Напишите код на своем компьютере и создайте / загрузите zip вручную - используя SAM подход , вероятно, является самым пуленепробиваемым способом достижения этого

Надеюсь, это поможет!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...