MQTT - AWS(AWS) IoT コア

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

MQTT

MQTT(MQTT) は、制約のあるデバイス向けに設計された軽量で広く採用されているメッセージングプロトコルです。 AWS IoT MQTTのサポートは、 MQTT v3.1.1仕様、一部違いがあります。以下に関する情報は、 AWS IoT MQTT v3.1.1の仕様とは異なります。 AWS IoT MQTTバージョン3.1.1仕様との相違点.

AWS IoT Core は、MQTTプロトコルとMQTT over WSSプロトコルを使用するデバイス接続をサポートします。[ AWS IoT 装置 SDKs は両方のプロトコルをサポートしており、デバイスを に接続する推奨方法です。 AWS IoT. [ AWS IoT 装置 SDKs デバイスとクライアントが接続してアクセスするために必要な機能をサポート AWS IoT Core サポートしており、 AWS IoT サービスが必要です。接続方法に関する情報は、 AWS IoT 使用 AWS 装置 SDKs および の例へのリンク AWS IoT サポートされている言語で、以下を参照してください。 を使用してMQTTに接続する AWS IoT 装置 SDKs. MQTTメッセージの認証方法とポートマッピングの詳細については、以下を参照してください。 プロトコル、ポートマッピング、認証.

では、 AWS IoT 装置 SDKs 接続先 AWS IoTは必須ではありません。_を使用しない場合 AWS IoT 装置 SDKsただし、必要な接続および通信セキュリティを提供する必要があります。クライアントは サーバー名表示(SNI)TLS拡張 接続リクエスト内。SNIを含まない接続の試みは拒否されます。詳細については、「AWS IoT のトランスポートセキュリティ」を参照してください。IAMユーザーとAWS認証情報を使用してクライアントを認証するクライアントは、 署名バージョン4 認証。

を使用してMQTTに接続する AWS IoT 装置 SDKs

このセクションには、 AWS IoT 装置 SDKs また、デバイスの接続方法を示すサンプル プログラムのソース コードにも AWS IoT. ここにリンクされているサンプルアプリは、 AWS IoT MQTTプロトコルとMQTT over WSSを使用します。

C++

[ AWS IoT デバイスを接続するための C++ デバイス SDK

Python

[ AWS IoT Python接続用デバイスSDK

JavaScript

[ AWS IoT のデバイスSDK JavaScript デバイスを接続

Java

[ AWS IoT デバイス接続用の Java 用デバイス SDK

Embedded C

[ AWS IoT デバイスを接続する組み込み C 用デバイス SDK

重要

この SDK は、経験豊富なエンベデッド・ソフトウェア開発者を対象としています。

MQTTサービス品質(QoS)オプション

AWS IoT そして AWS IoT 装置 SDKs サポート MQTTサービス品質(QoS)レベル 0 および 1. MQTTプロトコルは、 QoS、レベル 2ですが、 AWS IoT はサポートしていません。MQTTプロトコルのみが QoS 機能。HTTPSはサポートしていません QoS.

この表は、各 QoS レベルは、メッセージ ブローカーに発行されたメッセージおよびメッセージ ブローカーによって発行されたメッセージに影響します。

と QoS レベル...

メッセージは...

コメント

QoSレベル0

0回以上送信

このレベルは、信頼できる通信リンクを介して送信されるメッセージや、問題なく見落とす可能性のあるメッセージに使用します。

QoSレベル1

少なくとも1回は送信し、その後は PUBACK 応答を受信しました

送信者が PUBACK 応答は、配信が成功したことを示します。

MQTT持続セッションの使用

パーシステント セッションは、クライアントによって確認されていないクライアント サブスクリプションとメッセージを、QoS(サービス品質)1で保存します。切断されたデバイスが永続的セッションに再接続されると、セッションが再開され、その購読が再開され、再接続前に受信され、クライアントによって確認されていない購読メッセージがクライアントに送信されます。

永続セッションの作成

MQTT持続セッションを作成するには、 CONNECT メッセージと設定 cleanSession フラグ 0. 送信するクライアントに対してセッションが存在しない場合は、 CONNECT メッセージが表示されたら、新しい持続セッションが作成されます。クライアントにセッションがすでに存在する場合、クライアントは既存のセッションを再開します。

持続セッション中の操作

クライアントは sessionPresent 属性(接続確認済)(CONNACK)メッセージを使用して、持続セッションが存在するかどうかを判断します。次の場合: sessionPresent1、パーシステント セッションが存在し、クライアントに対して保存されたメッセージは、クライアントが CONNACK」を参照してください。 持続セッションへの再接続後のメッセージトラフィック. 次の場合: sessionPresent1、クライアントが再購読する必要はありません。ただし、 sessionPresent0、持続セッションが存在しないため、クライアントはトピックフィルタを再登録する必要があります。

クライアントが持続セッションに参加すると、各操作にフラグを追加することなく、メッセージを公開し、トピック フィルタをサブスクライブできます。

持続セッションへの再接続後のメッセージトラフィック

持続セッションは、クライアントとMQTTメッセージ・ブローカー間の継続的な接続を表します。クライアントがパーシステント セッションを使用してメッセージ ブローカーに接続すると、メッセージ ブローカーは接続中にクライアントが行ったすべての購読を保存します。クライアントが切断されると、メッセージ ブローカーは未確認を保存します QoS 1件のメッセージと新規 QoS クライアントが購読しているトピックに公開された1つのメッセージ。クライアントが永続セッションに再接続すると、すべての購読が再開され、保存されたすべてのメッセージが最大 10 メッセージ/秒の速度でクライアントに送信されます。

再接続後、保存されたメッセージは、 Publish requests per second per connection 制限に達しました。保存されたメッセージの配信速度は制限されているため、セッションに再接続後に配信する10以上の保存されたメッセージがある場合、すべての保存されたメッセージを配信するには数秒かかります。

パーシステント セッションの終了

次の条件は、持続セッションの終了方法を示します。

  • 持続セッションの有効期限が経過するとき。永続的セッションの有効期限タイマーは、クライアントが切断しているか、接続がタイムアウトしていることがメッセージ・ブローカーによって検出されたときに開始します。

  • クライアントが CONNECT メッセージを cleanSession フラグ 1.

注記

セッション終了時にクライアントに送信されるのを待っている保存されたメッセージは破棄されますが、送信できなかったとしても、標準のメッセージ料金が請求されます。メッセージ価格の詳細については、以下を参照してください。 AWS IoT Core 価格. 有効期限の時間間隔を設定できます。

パーシステント セッションが期限切れになった後の再接続

クライアントが期限切れになる前に永続セッションに再接続しない場合、セッションは終了し、保存されたメッセージは破棄されます。セッションの期限が切れた後、クライアントが cleanSession フラグ 0サービスによって新しい持続セッションが作成されます。前のセッションの購読またはメッセージは、前のセッションの期限が切れたときに破棄されたため、このセッションでは使用できません。

持続セッションメッセージ料金

メッセージブローカーがクライアントからメッセージを受信し、クライアントにメッセージを送信すると、メッセージはAWSアカウントに課金されます。持続セッションを持つデバイスが接続されていない場合、クライアント再接続時に送信されるメッセージはアカウントに課金されます。持続セッションが期限切れになると、このセッションで保存されたメッセージは破棄されます。ただし、アカウントには、引き続きそのストレージに対する課金が行われます。メッセージ価格の詳細については、以下を参照してください。 AWS(AWS) IoT コア価格 - メッセージング.

デフォルトの持続セッションの有効期限である1時間は、標準の制限増加プロセスを使用して延長できます。セッションの有効期限を長くすると、メッセージ料金が大きくなる場合があります。追加時間によって、切断されたデバイスに対してより多くのメッセージが保存されるようになり、追加のメッセージがアカウントに課金されます。セッションの有効期限は概算で、セッションはアカウント制限より最大30分長く維持されます。ただし、セッションはアカウント制限より短くはなりません。セッション制限の詳細については、以下を参照してください。 AWSサービス クォータ.

使用 connectAttributes

ConnectAttributes では、次のようなIAMポリシーで接続メッセージで使用する属性を指定できます。 PersistentConnect および LastWill. 付 ConnectAttributesでは、デフォルトでは新しい機能へのアクセスをデバイスに許可しないポリシーを作成できます。これは、デバイスが侵害された場合に役立ちます。

connectAttributes でサポートされる機能は以下のとおりです。

PersistentConnect

[ PersistentConnect クライアントとブローカー間の接続が中断されたときに、接続中にクライアントが行うすべての購読を保存する機能。

LastWill

[ LastWill 機能: LastWillTopic クライアントが突然切断された場合。

既定では、ポリシーには非永続接続があり、この接続に対して渡された属性はありません。IAMポリシーを使用する場合は、IAMポリシーで持続的な接続を指定する必要があります。

対象 ConnectAttributes 例、参照 Connectポリシーの例.

AWS IoT MQTTバージョン3.1.1仕様との相違点

メッセージ ブローカーの実装は、 MQTT v3.1.1仕様ただし、仕様とは以下の点で異なります。

  • AWS IoT MQTT QoS(サービス品質)レベル0および1のみをサポートします。 AWS IoT は、 の公開または購読をサポートしていません。 QoS レベル2。いつ QoS レベル2がリクエストされた場合、メッセージブローカーはPUBACKまたはSUBACKを送信しません。

  • イン AWS IoT、トピックの購読 QoS レベル0は、メッセージが0回以上配信されることを意味します。メッセージは複数回配信される場合があります。複数回配信されるメッセージは、異なるパケット ID を使用して送信される場合があります。これらの場合、DUP フラグは設定されません。

  • 接続リクエストに応答するとき、メッセージブローカーは CONNACK メッセージを送信します。このメッセージには、接続で前のセッションを再開するかどうかを示すフラグが含まれます。

  • クライアントがトピックにサブスクライブすると、メッセージブローカーは SUBACK を送信してから、クライアントが新しい一致するメッセージの受信を開始するまでに、遅延が生じる場合があります。

  • MQTT仕様は、ブローカーがトピックに送信された最後のメッセージを保持し、今後のすべてのトピック購読者に送信するよう、パブリッシャーに要求するための条項を提供します。 AWS IoT は保持メッセージをサポートしていません。ブローカーがメッセージを保持するようにリクエストされた場合、接続は切断されます。

  • メッセージブローカーは、クライアント ID を使用して、各クライアントを識別します。クライアント ID は MQTT ペイロードの一部としてクライアントからメッセージブローカーに渡されます。同じクライアントIDを持つ2つのクライアントをメッセージブローカーに同時に接続することはできません。あるクライアントが別のクライアントのクライアント ID を使用してメッセージブローカーに接続すると、新しいクライアント接続が受け入れられ、以前に接続されたクライアントは切断されます。

  • まれに、メッセージブローカーは、パケット ID が異なる同じ論理 PUBLISH メッセージを再送信する場合があります。

  • メッセージブローカーは、メッセージとACKを受信する順序を保証しません。