使用二进制负载的IoT Core

0

【以下的问题经过翻译处理】 我们计划使用IoT Core通过MQTT接收消息,其中负载将为二进制数据(更具体地说,是 protobuf格式)。将使用规则将数据转发到 Kinesis,在规则中,我们还希望向消息添加principal(),消息是否仍然是二进制数据并不重要。

我们首先研究了使用decode函数解码protobuf消息的方法,如此处所述:https://docs.aws.amazon.com/iot/latest/developerguide/binary-payloads.html#binary-payloads-protobuf。但是,这需要将protobuf .desc文件存储在S3中,并且通过CloudTrail发现它会频繁请求(可能是每个请求,这里不确定)到S3,这将产生高昂的成本。

接下来,我们决定将其作为二进制数据通过Kinesis传递,并在Kinesis消费者端进行解码。但是,在文档中(https://docs.aws.amazon.com/iot/latest/developerguide/binary-payloads.html#binary-payloads-examples)中提到:“如果您发送原始的二进制负载,IoT Core将通过S3操作将其下游路由到Amazon S3存储桶。原始的二进制负载然后被编码为base64并附加到JSON中。”我是否可以理解,如果我们发送二进制负载,则无法避免产生S3费用?唯一的选择是在从传感器设备发送之前对负载进行base64编码(或类似的操作)吗?

profile picture
专家
已提问 5 个月前43 查看次数
1 回答
0

【以下的回答经过翻译处理】 如果想在发送消息到Kinesis Data Streams之前添加附加数据,则需要将其作为JSON有效负载发送。因此,您的规则SQL将类似于:

SELECT encode(*, 'base64') AS data, principal() AS principal FROM 'topic/subtopic'

在处理流的Lambda函数中,您需要对“data”字段进行base64解码以恢复二进制有效负载,然后再解码protobuf。

除非Lambda函数使用它检索protobuf模式,否则Amazon S3不涉及该流程。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则