无法使用AWS Lambda函数编写的生产者向AWS EC2上的kafka发送消息

时间:2018-10-11 07:24:33

标签: python apache-kafka aws-lambda confluent-kafka

Conflunet Kafka 5.0.0已安装在公共IP为54.XX.XX.XX的AWS EC2上 在EC2机器上使用0.0.0.0打开端口9092

在/etc/kafka/server.properties中,我已经做广告了。listeners= PLAINTEXT://54.XX.XX.XX:9092以及listeners = 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'

我已将处理程序名称设置为“ iotstatesboto.lambda_handler”

有什么线索可以使步骤从lambda函数中获得生产者以在EC2上写入kakfa流吗?

1 个答案:

答案 0 :(得分:0)

使用AWS Lambda时,您必须手动提供所有库,即将它们添加到用于lambda函数代码的zip中。您还必须添加所有共享库(如果有)。

在这种情况下,AWS Lambda为您提供了python环境,该环境由Python标准库+ Boto3组成,因此那里没有其他库。