使用二进制负载的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
EXPERTE
gefragt vor 6 Monaten50 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen