python - 如何访问来自 AWS Kinesis Data Stream 事件的数据?

标签 python python-3.x amazon-web-services aws-lambda amazon-kinesis

我正在开发一个使用 AWS Kinesis Data Stream 的 Python lambda。但我正在努力了解运动记录事件的形状。例如:

{
    "Records": [
        {
            "kinesis": {
                "kinesisSchemaVersion": "1.0",
                "partitionKey": "1",
                "sequenceNumber": "49590338271490256608559692538361571095921575989136588898",
                "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
                "approximateArrivalTimestamp": 1545084650.987
            },
            "eventSource": "aws:kinesis",
            "eventVersion": "1.0",
            "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898",
            "eventName": "aws:kinesis:record",
            "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role",
            "awsRegion": "us-east-2",
            "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream"
        },
        {
            "kinesis": {
                "kinesisSchemaVersion": "1.0",
                "partitionKey": "1",
                "sequenceNumber": "49590338271490256608559692540925702759324208523137515618",
                "data": "VGhpcyBpcyBvbmx5IGEgdGVzdC4=",
                "approximateArrivalTimestamp": 1545084711.166
            },
            "eventSource": "aws:kinesis",
            "eventVersion": "1.0",
            "eventID": "shardId-000000000006:49590338271490256608559692540925702759324208523137515618",
            "eventName": "aws:kinesis:record",
            "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role",
            "awsRegion": "us-east-2",
            "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream"
        }
    ]
}

来源: Using AWS Lambda with Amazon Kinesis

我最初放在该对象表示的运动流中的数据在哪里?我如何访问这些数据?

最佳答案

您放入流中的数据在每条记录的 kinesis.data 键上表示为 Base64 编码字符串。例如(截断):

{
    "Records": [
        {
            "kinesis": {
                ...
                "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
                ...
            },
            ...
        },
        {
            "kinesis": {
                ...
                "data": "VGhpcyBpcyBvbmx5IGEgdGVzdC4=",
                ...
            },
            ...
        }
    ]
}

要访问数据,循环遍历每个 Records 对象并使用 Base64 解码 kinesis.data 值。

import base64


for record in event["Records"]:
    decoded_data = base64.b64decode(record["kinesis"]["data"]).decode("utf-8")

    print(decoded_data)
    # Record 1: Hello, this is a test.
    # Record 2: This is only a test.

注意:此示例假定发送到运动流的数据最初是 utf-8 编码,然后运动 b64 对其进行编码。

关于python - 如何访问来自 AWS Kinesis Data Stream 事件的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57700238/

相关文章:

python - 检查列表中的所有元素是否相同

python - 使用另一个分类变量 'share' 绘制 'Day' 列的箱线图

java - 如何在jython中使用java反射?

node.js - 从 react 记录到 aws cloudwatch

python - 如何修复 Snowflake 数据库写入错误 : snowflake. Connector.errors.ProgrammingError) 001003 (42000)

python - 在 Python 中部分应用的高效方法?

python - 开始/停止 while 循环?

python - 为什么 2to3 将 mydict.keys() 更改为 list(mydict.keys())?

amazon-web-services - S3 IAM 策略在模拟器中有效,但在现实生活中无效

amazon-web-services - 如何使用 Go 跟踪分段上传到 s3 的进度?