Невозможно отправлять сообщения на kafka на AWS EC2 от производителя, написанного в функции AWS Lambda - PullRequest
0 голосов
/ 11 октября 2018

Conflunet Kafka 5.0.0 была установлена ​​на AWS EC2 с публичным IP-адресом, скажем, 54.XX.XX.XX Открыт порт 9092 на машине EC2 с 0.0.0.0

В / etc / kafka / server.properties Я объявил.listeners = PLAINTEXT: //54.XX.XX.XX: 9092, а также слушателей = PLAINTEXT: //0.0.0.0: 9092 В /etc/kafka/producer.properties У меня есть bootstrap.servers = 0.0.0.0: 9092

Локальный файл iotstatesboto.py был написан так, как показано ниже, и содержит код производителя:

from confluent_kafka import Producer
import json

broker = '54.XX.XX.XX'
topic = 'mytopic'

def delivery_report(err, msg):
    if err is not None:
        print('Message delivery failed: {}'.format(err))
    else:
        print('Message delivered to {}'.format(msg.topic()))

def lambda_handler(event, context): 
    p = Producer({'bootstrap.servers': broker})
    message = json.dumps(event)
    print(message)
    p.produce(topic, message.encode('utf-8'), callback=delivery_report)
    return { 
        'message' : message
    }  

zip-пакет сделан локально, как показано ниже:

pip install confluent_kafka has been done in the same directory
zip -r iotstatesboto.zip iotstatesboto.py confluent*

Этот zip-файл загружен в функцию Lambda.Затем, когда функция «Тест» отправляет фиктивное сообщение, сначала появляется следующая ошибка:

:

{
  "errorMessage": "Unable to import module 'iotstatesboto'"
}

и еще одна:

Unable to import module 'iotstatesboto': No module named 'confluent_kafka.cimpl'

Я установил имя обработчикаas "iotstatesboto.lambda_handler"

Любая подсказка о том, что может отсутствовать в шагах, чтобы заставить производителя из лямбда-функции записать в поток kakfa на EC2?

1 Ответ

0 голосов
/ 11 октября 2018

При использовании AWS Lambda вы должны предоставить все библиотеки вручную, то есть добавить их в zip-файл, который вы используете для кода функции лямбды.Вы также должны добавить все библиотеки совместно используемых объектов, если они есть.

AWS Lambda предоставляет вам, в данном случае, среду Python, которая состоит из стандартной библиотеки Python + Boto3, поэтому других библиотек там нет.

...