[AWS IoT Core] MQTT v5 で新たに追加されたプロパティ値を Republish で追加してみました

2022.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

CX 事業本部のデリバリー部の平内(SIN)です。

re:Invent 2022 で AWS IoT Core の MQTT v5 対応が発表されたが、 これにより、新しく拡張されたプロパティによって、MQTT v3.1 では、比較的複雑になってしまう作業を、簡潔に実装することが可能になりました。

AWS IoT announces general availability for version 5 of MQTT message broker (MQTT5)

AWS IoT Code では、元々、ルールのアクションにRepublishを設定すると、簡単にメッセージブローカーに到着したメッセージを、別トピックに Publish しなおすことが可能ですが、今回、Republish 時に、MQTT v5 で拡張されたプロパティが設定可能になりました。

今回は、この動作について、確認してみました。

2 Republish

Republish のドキュメンントには、Parametersのところに新たにheadersが追加されています。


https://docs.aws.amazon.com/iot/latest/developerguide/republish-rule-action.html

そして、そこで説明されているMqttHeadersを見ると、各種プロパティは、MQTT v5 のそれ、そのものになっています。


https://docs.aws.amazon.com/iot/latest/apireference/API_MqttHeaders.html

3 試してみました

最初に SQL ステートメントでルールを追加します。

続いて、アクションにRepublishを設定し、MQTT 5 のプロパティのところで、いくつかの値を設定してみました。

あとは、普通に MQTT テストクライアントで「#」をサブスクライブし、トピックを送信すると、送信したメッセージと Republish で再送されたメッセージを確認することができます。

送信されたメッセージは、Payload の他に、特に情報はないのですが、

Republish されたメッセージは、拡張プロパティがセットされていることを確認できます。

4 最後に

今回は、AWS IoT Code のルールによる Republish で、拡張プロパティを追加する要領を確認してみました。

こちらの機能を利用すると、既に MQTT v3.1 で実装されているクライアントを変更することなく、MQTT v5 で機能強化されたサブスクライバーを実装することも可能かも知れません。

5 参考リンク


[AWS IoT Core] MQTT v5 を使用してリクエスト・レスポンス パターンを実装して見ました
[AWS IoT Core] MQTT v5 を使用してユーザープロパティを実装して見ました
[AWS IoT Core] MQTT v5 を使用してトピック・エイリアスを実装して見ました
[AWS IoT Core] MQTT v5 を使用してメッセージ及び、セッション有効期限とクリーンスタートを実装して見ました
[AWS IoT Core] MQTT v5 を使用してレスポンスコードの確認を実装して見ました
[AWS IoT Core] MQTT v5 を使用してフォーマット識別要素で判別する Payload のパースを実装して見ました
[AWS IoT Core] MQTT v5 に対応した 「MQTT テストクライアント」の動作を確認して見ました
[AWS IoT Core] MQTT v5 で追加されたユーザープロパティを ルール で取得して Lambda で使用してみました
[AWS IoT Core] AWS IoT Device SDK v2 for Python で MQTT5 のサポートが始まりました (Developer Preview)