繁体   English   中英

无法使用用 Python 编写的 AWS Lambda 解码 kinesis 事件

[英]Unable to decode kinesis event using a AWS Lambda written in Python

我正在使用 spring-cloud-stream-binder-kinesis 库推送一个简单的 JSON 有效负载。 该事件 100% 有效,我可以从另一个微服务中使用它。

我现在正在尝试使用 Python 3.7 启动并运行一个简单的 lambda。 我已经从流中创建了一个触发器并成功接收了事件(我可以在云监视日志中看到如下所示的输出),但是,当尝试解码有效负载以便我可以访问 JSON 属性时,它附加了一些奇怪的阻止我继续的角色。

以下是对 kinesis 流中的 base64 项进行解码后的日志输出:

b'\xff\x01\x0bcontentType\x00\x00\x00\x12"application/json"
{
    "responseCode": 0,
    "responseMessage": null,
    "userId": 0,
    "emailAddress": "ewqssdfdadasaewq@.com",
    "name": "James",
    "dateRegistered": null,
    "socialNetwork": "Facebook"
}

这是简单的 Python 处理程序:

def lambda_handler(event, context):
    
    for record in event['Records']:
       #Kinesis data is base64 encoded so decode here
       payload=base64.b64decode(record["kinesis"]["data"],validate=False)
       print("Payload" + str(payload))
    
   json_properties = json.loads(payload) <-- error here

错误:


[ERROR] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Traceback (most recent call last):
  File "/var/task/Index.py", line 20, in lambda_handler
    json_properties = json.loads(payload)
  File "/var/lang/lib/python3.7/json/__init__.py", line 343, in loads
    s = s.decode(detect_encoding(s), 'surrogatepass')

任何帮助,将不胜感激。

您可以尝试以下操作吗,这是在我正在使用的 python lambda 中工作的。 我假设您缺少 utf-8 转换:

from aws_kinesis_agg.deaggregator import deaggregate_records

def lambda_handler(event, context):
    
    raw_kinesis_records = event['Records']

    records = deaggregate_records(raw_kinesis_records)

    for record in records:
       #Kinesis data is base64 encoded so decode here
       payload=base64.b64decode(record["kinesis"]["data"],validate=False)
       payload_utf8=str(payload, 'utf-8')
       print("Payload" + payload_utf8)
    
   json_properties = json.loads(payload_utf8)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM