【アップデート】AWS IoT Core で MQTT Version 5 がサポートされました

【アップデート】AWS IoT Core で MQTT Version 5 がサポートされました

Clock Icon2022.11.28

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

下記のリリースで発表されたように、遂に AWS IoT Core でも MQTT Version 5 がサポートされる事になりました!

公式ドキュメントにも MQTT 5 関連の記載が増えていました。下記ページの「MQTT 5 supported features」以下に多くのコンテンツが追加されています。

MQTT Version 5 は、2019年3月に 標準化団体である「OASIS」によりリリースされましたが、これまで AWS IoT Core では Version 3.1.1 までがサポートされている状況でした。
(ちなみに、MQTT Version 4 というものは存在しておらず、3.1.1 が Version 4 に相当します)

MQTT Version 5 でサポートされる新しい機能

今回のリリースにより AWS IoT Core でサポートされる機能のうち、主立ったものを抜き出してみました。

本記事の内容だけでは過不足あると思いますので、詳細はドキュメントの参照をお願いいたします。

  • リーズンコード(Reason Code)
  • メッセージ/セッションの有効期限
  • クリーンスタート
  • トピックエイリアス
  • リクエスト・レスポンスパターン
  • ペイロードフォーマット
  • ユーザープロパティ

下記に概要を記載してみましたので、参考にしてみて下さい。

リーズンコード(Reason Code)

従来は「リターンコード(Return Code)」と呼ばれていたものです。名称の変更と共に、多くのコードを返すように拡張されました。

クリーンスタートとメッセージ/セッションの有効期限

MQTT Version 3.1.1 では保持しているセッションを終了させるタイミングについては特に定めはありませんでしたが(クリーンセッションしないとセッション状態が無期限に保存された)、Version 5.0 では、セッションの有効期限(Session Expiry Interval)を設定することができるようになりました。

同様に、メッセージについても有効期限を設けることができるようになりました。

トピックエイリアス

メッセージを送る際に対象のトピック名が長いと、パケットサイズの観点でネットワーク帯域を浪費しますが、MQTT Version 5 では、特定のトピックに対して整数値のエイリアスを設定できるようになりました。

なお、エイリアスの上限は無限ではなく、Topic Alias Maximum によって決まります。

リクエスト・レスポンスパターン

下記の記事で「リクエスト・レスポンスパターン」について説明しています。
この記事は AWS IoT Core を使っていませんが、リクエスト・レスポンスパターンを実際に試した内容になっているので、参考にしていただけると思います。

MQTT Version 5 では、リクエスト( Publish )時に予めレスポンス先のトピックを指定することで、特定のメッセージを受け取った際に指定されたトピックにレスポンスを返す事ができます。

ペイロードフォーマット

MQTT における Publish 時のペイロードのフォーマットをメタデータとして指定することができるようになりました。
これにより、メッセージの解釈を事前に Publisher と Subscriber 間で事前に取り決めておく必要がなくなります。

具体的には、次の2つを指定します。

  • PayloadFormatIndicator: 1 or 0
    • 1: UTF-8 でエンコードされたペイロード
    • 0: 未指定のバイトストリーム
  • contentType: PayloadFormatIndicator1 だった時に指定
    • 任意の UTF-8 文字列
    • MIME Type が使われるケースが多くなると思われる

ユーザープロパティ

UTF-8 の任意の名前と値のペアで構成されるプロパティが追加されました。
用途は特に規程されていないので、それぞれのユースケースの要件に応じて利用することができます。

一例としては、プロパティの内容に応じてメッセージの転送先を指定する「メッセージルーティング」に使う事ができます。

例えば、2つのデータのそれぞれのユーザープロパティに次のプロパティがセットされている時、ブローカー側で値に応じてリアルタイム処理するシステム、バッチ処理するシステムにデータをそれぞれルーティングする、といった形で利用することができます。

  • routing: realtime
  • routing: batch

利用可能リージョン

以下のリージョンですぐに利用可能です。なんと今日から東京リージョンでも利用できます!!

  • 米国東部 (バージニア北部)
  • 米国西部 (オレゴン)
  • アジアパシフィック (東京)
  • 欧州 (アイルランド)

最後に

Greengrass に続いて、ついに AWS IoT Core でも MQTT Version 5 がサポートされました。

ドキュメントをざっと確認した限りでは、AWS IoT Core 特有の制限はなさそうなので、今回紹介した標準的な Version 5 の仕様で利用できるかと思いますが、各機能については、今後検証していきたいと思います。

取り急ぎ今回は以上です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.