微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在AWS Lambda中使用confluent-kafka python库时出错

如何解决在AWS Lambda中使用confluent-kafka python库时出错

我正在尝试使用confluent-kafka python库通过lambda函数管理我的集群,但是该函数失败并显示以下错误

"Unable to import module 'Test': No module named 'confluent_kafka.cimpl'"

我的要求。txt

requests
confluent-kafka

要创建zip文件,我将代码移到了虚拟环境的site-packages位置,并压缩了所有内容

Python代码

import confluent_kafka.admin
import requests
def lambda_handler(event,context):
    print("Hello World")

我正在使用macOS10.X。在Linux上,我注意到pip install创建了一个单独的confluent_kafka.libs,该文件无法在Mac上创建

解决方法

我创建了所需的图层,并且可以确保其正常工作

所使用的技术包括最近的 AWS博客中所述的 docker工具

因此,对于这个问题,我进行了如下验证:

  1. 创建空文件夹,例如mylayer

  2. 转到该文件夹​​并创建内容为{p>的requirements.txt文件

echo requests > requirements.txt
echo confluent-kafka >> requirements.txt
  1. 运行以下docker命令:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
  1. 以zip格式创建图层:
zip -r mylayer.zip python > /dev/null
  1. 在AWS控制台中基于mylayer.zip创建lambda层。不要忘记为Compatible runtimes指定python3.8

  2. 使用以下lambda函数测试lambda中的图层:

import confluent_kafka.admin
import requests

def lambda_handler(event,context):
    print(dir(confluent_kafka.admin))
    print(dir(requests))
    print("Hello World")

该函数正确执行:

['AdminClient','BrokerMetadata','CONFIG_SOURCE_DEFAULT_CONFIG','CONFIG_SOURCE_DYNAMIC_BROKER_CONFIG','CONFIG_SOURCE_DYNAMIC_DEFAULT_BROKER_CONFIG','CONFIG_SOURCE_DYNAMIC_TOPIC_CONFIG','CONFIG_SOURCE_STATIC_BROKER_CONFIG','CONFIG_SOURCE_UNKNOWN_CONFIG','ClusterMetadata','ConfigEntry','ConfigResource','ConfigSource','Enum','KafkaException','NewPartitions','NewTopic','PartitionMetadata','RESOURCE_ANY','RESOURCE_BROKER','RESOURCE_GROUP','RESOURCE_TOPIC','RESOURCE_UNKNOWN','TopicMetadata','_AdminClientImpl','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__path__','__spec__','concurrent','functools']
['ConnectTimeout','ConnectionError','DependencyWarning','FileModeWarning','HTTPError','NullHandler','PreparedRequest','ReadTimeout','Request','RequestException','RequestsDependencyWarning','Response','Session','Timeout','TooManyRedirects','URLRequired','__author__','__author_email__','__build__','__cake__','__copyright__','__description__','__license__','__title__','__url__','__version__','_check_cryptography','_internal_utils','adapters','api','auth','certs','chardet','check_compatibility','codes','compat','cookies','delete','exceptions','get','head','hooks','logging','models','options','packages','patch','post','put','request','session','sessions','ssl','status_codes','structures','urllib3','utils','warnings']
Hello World

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。