トピック - AWS IoT

トピック

トピックでは、AWS IoT メッセージを識別します。AWS IoT クライアントは、メッセージのトピック名を指定してパブリッシュするメッセージを識別します。クライアントは、トピックフィルターを AWS IoT Core に登録して、サブスクライブ (受信) するメッセージを識別します。メッセージブローカーはトピック名とトピックフィルターを使用して、パブリッシュするクライアントからサブスクライブするクライアントに、AWS IoT メッセージを振り分けます。

AWS IoT は一部の予約されたシステムトピックをサポートしていますが、ほとんどの MQTT トピックはシステムデザイナーによって作成および管理されます。AWS IoT は、次のセクションで説明するように、トピックを使用して、パブリッシュ側クライアントから受信したメッセージを識別し、サブスクライブ側クライアントに送信するメッセージを選択します。システムのトピック名前空間を作成する前に、MQTT トピックの特性を確認して、IoT システムに最適なトピック名の階層を作成します。

トピック名

トピック名とトピックフィルターは、UTF-8 エンコードされた文字列です。スラッシュ (/) 文字を使用して階層のレベルを区切ることにより、情報の階層を表すことができます。たとえば、このトピック名は、部屋 1 の温度センサーを表すことができます。

  • sensor/temperature/room1

この例では、次のようなトピック名を持つ他の種類のセンサーが他の部屋にある場合もあります。

  • sensor/temperature/room2

  • sensor/humidity/room1

  • sensor/humidity/room2

注記

システム内のメッセージのトピック名を考慮する場合は、次の点に注意してください。

  • トピック名とトピックフィルターでは、大文字と小文字が区別されます。

  • トピック名に個人を特定できる情報を含めることはできません。

  • $ で始まるトピック名は、AWS IoT Core によってのみ使用される 予約済みトピックです。

  • AWS IoT Core は、AWS アカウントまたはリージョン間でメッセージを送受信することはできません。

トピック名前空間は、AWS アカウントとリージョンに制限されます。たとえば、あるリージョンの AWS アカウントで使用される sensor/temp/room1 トピックは、別のリージョンの同じ AWS アカウントで使用されるか、任意のリージョンの他の AWS アカウントで使用される sensor/temp/room1 トピックとは異なります。

トピックフィルター

サブスクライブするクライアントは、AWS IoT メッセージブローカーにトピックフィルターを登録して、メッセージブローカーがそのトピックフィルターに送信するメッセージトピックを指定します。トピックフィルターは、単一のトピック名にサブスクライブする単一のトピック名にすることも、ワイルドカード文字を使用して複数のトピック名に一度にサブスクライブすることもできます。

パブリッシュするクライアントは、パブリッシュするトピック名にワイルドカード文字を使用できません。

次の表は、トピックフィルターで使用できるワイルドカード文字の一覧です。

トピックのワイルドカード
ワイルドカード文字 マッチ コメント
# トピック階層内のそのレベル以下のすべての文字列。

トピックフィルターの最後の文字にする必要があります。

トピック階層のレベルで唯一の文字である必要があります。

+ ワイルドカード文字を含むトピックフィルターで使用できます。

+ 文字を含むレベル内の任意の文字列。

トピック階層のレベルで唯一の文字である必要があります。

トピックフィルターの複数のレベルで使用できます。

前述のセンサートピック名でのワイルドカードの使用例:

  • sensor/# へのサブスクリプションでは sensor/sensor/temperaturesensor/temperature/room1 にパブリッシュされたメッセージを受信しますが、Sensor にパブリッシュされたメッセージは受信しません。

  • sensor/+/room1 のサブスクリプションでは、sensor/temperature/room1 および sensor/humidity/room1 にパブリッシュされたメッセージを受信しますが、sensor/temperature/room2 または sensor/humidity/room2 に送信されたメッセージは受信しません。