MQTT トピック - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

MQTT トピック

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

メッセージブローカーはトピックを使用して、MQTT を使用して送信されたメッセージと、HTTP を使用してHTTPS メッセージ URL

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 IoT Core 用の MQTT トピックの設計

アプリがメッセージを発行および購読する方法の例については、AWS IoT Core の開始方法およびAWS IoT デバイス SDK、モバイル SDK、および AWS IoT デバイスクライアント

重要

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

トピック ARN

すべてのトピック ARN(Amazon リソースネーム)には、次の形式があります。

arn:aws:iot:aws-region:AWS-account-ID:topic/Topic

例:arn:aws:iot:us-west-2:123EXAMPLE456:topic/application/topic/device/sensorは、トピックの ARN です。 application/topic/device/sensor

トピックフィルター

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

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

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

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

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

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

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

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

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

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

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

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

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

トピックフィルターの ARN

すべてのトピックフィルタ ARN(Amazon リソースネーム)には、次の形式があります。

arn:aws:iot:aws-region:AWS-account-ID:topicfilter/TopicFilter

例:arn:aws:iot:us-west-2:123EXAMPLE456:topicfilter/application/topic/#/sensorトピックフィルターの ARN application/topic/#/sensor