amazon-web-services - Firehose 转换输出的格式

标签 amazon-web-services amazon-kinesis amazon-kinesis-firehose

我将 AWS Kinesis Firehose 与自定义数据转换结合使用。 Lambda 用 Python 3.6 编写并返回如下所示的字符串:

{
    "records": [
        {
            "recordId": "...",
            "result": "Ok",
            "data": "..."
        },
        {
            "recordId": "...",
            "result": "Ok",
            "data": "..."
        },
        {
            "recordId": "...",
            "result": "Ok",
            "data": "..."
        }
    ]
}

这个 Lambda 非常满意,并且在将它们返回到 Firehose 之前记录类似于上面的输出。但是,Firehose 的 S3 日志随后显示错误:
Invalid output structure: Please check your function and make sure the processed records contain valid result status of Dropped, Ok, or ProcessingFailed.
看看这个在 JS 和 Java 中传播到网络上的例子,我不清楚我需要做些什么不同的事情;我很困惑。

最佳答案

如果你的数据是一个json对象,你可以尝试以下

import base64
import json
def lambda_handler(event, context):
    output = []
    for record in event['records']:
        # your own business logic.
        json_object = {...} 
        output_record = {
            'recordId': record['recordId'],
            'result': 'Ok',
            'data': base64.b64encode(json.dumps(json_object).encode('utf-8')).decode('utf-8')
        }
        output.append(output_record)
    return {'records': output}

base64.b64encode 函数只适用于 b'xxx' 字符串,而 output_record 的 'data' 属性需要一个普通的 'xxx' 字符串。

关于amazon-web-services - Firehose 转换输出的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946107/

相关文章:

elasticsearch - 如何正确删除AWS ElasticSearch索引以释放磁盘空间

amazon-web-services - 如何识别公司内未使用的EC2服务器并停止使用

javascript - 访问被拒绝 CloudFormation 跨帐户 s3 副本

amazon-web-services - 使用 Kinesis Firehose 时 VPC 内的 Elasticsearch 持续出现 503 错误

amazon-web-services - 我在执行 aws cloudformation 模板时遇到错误,抛出错误 ROLLBACK_COMPLETE

python - Kinesis 消费者返回空记录(boto、python)

amazon-web-services - 自动电线运动流到运动消防水管?

java - 由于内部错误 : PASSWORD_VERIFIER challenge encountered not at the start of authentication flow,身份验证失败

bash - 从名称获取 AWS EMR 集群 ID

amazon-web-services - 有没有办法将数据从 AWS Kinesis 发送到 Azure 事件中心?