Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

AWS IoT Device Client でメッセージのサブスクリプションをデモンストレーションする

フォーカスモード
AWS IoT Device Client でメッセージのサブスクリプションをデモンストレーションする - AWS IoT Core

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

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

このセクションでは、次の 2 種類のメッセージサブスクリプションについて説明します。

  • 単一トピックのサブスクリプション

  • ワイルドカードトピックのサブスクリプション

これらの演習用に作成したポリシー内のポリシーステートメントでは、以下のアクションを実行するアクセス許可が Raspberry Pi に付与されます。

  • iot:Receive

    Resource オブジェクトで指定されたものと一致する MQTT トピックを受信するアクセス許可を AWS IoT Device Client に付与します。

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
  • iot:Subscribe

    Resource オブジェクトで指定されたものと一致する MQTT トピックフィルターをサブスクライブするアクセス許可を AWS IoT Device Client に付与します。

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }

単一の MQTT メッセージトピックをサブスクライブする

この手順では、AWS IoT Device Client が MQTT メッセージをサブスクライブしてログに記録する方法をデモンストレーションします。

Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、~/dc-configs/dc-pubsub-custom-config.json の内容を一覧表示するか、ファイルをテキストエディタで開き、その内容を確認します。samples オブジェクトを見つけます。これは次のように表示されています。

"samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/subtopic", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

subscribe-topic の値は AWS IoT Device Client が実行時にサブスクライブする MQTT トピックであることに注意します。AWS IoT Device Client は、このサブスクリプションから受信したメッセージペイロードを、subscribe-file の値で指定したファイル書き込みます。

AWS IoT Device Client からの MQTT メッセージトピックをサブスクライブするには
  1. この手順を実行する際に、ターミナルウィンドウと、[MQTT test client] (MQTT テストクライアント) のウィンドウが両方とも表示できることを確認します。また、[MQTT test client] (MQTT テストクライアント) のサブスクリプションが、引き続き[#] トピックフィルターであることを確認してください。そうでない場合は、[#] トピックフィルターのサブスクリプションに戻します。

  2. ターミナルウィンドウで次のコマンドを入力して、設定ファイルを作成する で作成した設定ファイルを使用する AWS IoT Device Client を実行します。

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json

    ターミナルウィンドウで、AWS IoT Device Client は、情報メッセージと、実行時に発生するエラーを表示します。

    ターミナルウィンドウにエラーが表示されない場合は、AWS IoT で操作を続行します。

  3. AWS IoT コンソールの [MQTT test client] (MQTT テストクライアント) で、[Publish to a topic] (トピックに公開する) タブを選択します。

  4. [Topic name] (トピック名) に test/dc/subtopic と入力します。

  5. [Message payload] (メッセージペイロード) で、メッセージの内容を確認します。

  6. MQTT メッセージを発行するには、[Publish] (発行) をクリックします。

  7. ターミナルウィンドウで、AWS IoT Device Client からの次のような message received (受信したメッセージ) エントリを確認します。

    2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
  8. メッセージが受信されたことを示す message received (受信したメッセージ) エントリが表示されたら、^C (Ctrl-C) を入力して AWS IoT Device Client を停止します。

  9. 次のコマンドを入力して、メッセージログファイルの末尾を表示し、[MQTT test client] (MQTT テストクライアント) から発行したメッセージを表示します。

    tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log

ログファイル内のメッセージを表示することで、MQTT テストクライアントから公開したメッセージを AWS IoT Device Client が受信したことを実証しました。

ワイルドカード文字を使用して複数の MQTT メッセージトピックをサブスクライブする

これらの手順では、AWS IoT Device Client がワイルドカード文字を使用して MQTT メッセージをサブスクライブしてログに記録する方法をデモンストレーションします。これを行うには、次の操作を行います。

  1. AWS IoT Device Client が MQTT トピックをサブスクライブするのに使用するトピックフィルターを更新します。

  2. デバイスが使用するポリシーを更新して、新しいサブスクリプションができるようにします。

  3. AWS IoT Device Client を実行して MQTT テストコンソールからメッセージを発行します。

ワイルドカード MQTT トピックフィルターを使用して複数の MQTT メッセージトピックをサブスクライブする設定ファイルを作成するには
  1. Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、~/dc-configs/dc-pubsub-custom-config.json を開いて編集し、samples オブジェクトを見つけます。

  2. テキストエディタで、samples オブジェクトを見つけ、subscribe-topic の値を次のように更新します。

    "samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "test/dc/#", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"

    新しい subscribe-topic の値は、最後に MQTT ワイルドカード文字が付いた MQTT トピックフィルターです。これは、test/dc/ で始まるすべての MQTT トピックへのサブスクリプション示しています。AWS IoT Device Client は、このサブスクリプションから受信したメッセージペイロードを、subscribe-file に指定されたファイルに書き込みます。

  3. 変更された設定ファイルを ~/dc-configs/dc-pubsub-wild-config.json として保存し、エディタを終了します。

複数の MQTT メッセージトピックをサブスクライブして受信できるように Raspberry Pi が使用するポリシーを変更するには
  1. Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、任意のテキストエディタで ~/policies/pubsub_test_thing_policy.json を編集するために開き、ファイル内のポリシーステートメント iot::Subscribeiot::Receive を見つけます。

  2. iot::Subscribe ポリシーステートメントで、Resource オブジェクトの文字列を更新して、次のように subtopic* に置き換えます。

    { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*" ] }
    注記

    MQTT トピックフィルターワイルドカード文字+」(プラス記号) と「#」(# 記号) です。末尾に # が付いたサブスクリプションリクエストは、# 文字の前にある文字列 (例えば、この場合「test/dc/」) で始まるすべてのトピックをサブスクライブします。

    ただし、このサブスクリプションを承認するポリシーステートメントのリソース値には、トピックフィルター ARN では # (# 記号) の代わりに * (アスタリスク) を使用する必要があります。これは、ポリシープロセッサが MQTT が使用するとは別のワイルドカード文字を使用するためです。

    ポリシーでトピックおよびトピックフィルターにワイルドカード文字を使用する方法の詳細については、「MQTT と AWS IoT Core ポリシーでのワイルドカード文字の使用」を参照してください。

  3. iot::Receive ポリシーステートメントで、Resource オブジェクトの文字列を更新して、次のように subtopic* に置き換えます。

    { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*" ] }
  4. 更新されたポリシードキュメントを ~/policies/pubsub_wild_test_thing_policy.json として保存し、エディタを終了します。

  5. 次のコマンドを入力して、このチュートリアルのポリシーを更新して、新しいリソース定義を使用します。

    aws iot create-policy-version \ --set-as-default \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"

    コマンドが成功すると、次のようなレスポンスが返されます。policyVersionId2 になったことに注意してください。これがこのポリシーの 2 番目のバージョンであることを示しています。

    ポリシーを正常に更新した場合は、次の手順に進むことができます。

    { "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Publish\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Subscribe\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Receive\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n ]\n }\n ]\n}\n", "policyVersionId": "2", "isDefaultVersion": true }

    ポリシーバージョンが多すぎて新しいバージョンを保存できないというエラーが表示された場合は、次のコマンドを入力して、ポリシーの現在のバージョンを一覧表示します。このコマンドが返すリストを確認して、削除できるポリシーバージョンを探します。

    aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"

    不要になったバージョンを削除するには、次のコマンドを入力します。デフォルトのポリシーバージョンを削除することはできません。デフォルトのポリシーバージョンは、isDefaultVersion の値が true であるものです。

    aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id policyId

    ポリシーバージョンを削除したら、このステップを再試行してください。

設定ファイルとポリシーを更新したら、AWS IoT Device Client のワイルドカードサブスクリプションをデモンストレーションする準備が整います。

AWS IoT Device Client が複数の MQTT メッセージトピックをサブスクライブして受信する方法をデモンストレーションするには
  1. [MQTT test client] (MQTT テストクライアント) で、サブスクリプションを確認します。[MQTT test client] (MQTT テストクライアント) で「#」トピックフィルターがサブスクライブされていれば、次のステップに進みます。そうでない場合は、[MQTT test client] (MQTT テストクライアント) の [Subscribe to a topic] (トピックをサブスクライブする) タブで、[Topic filter] (トピックのフィルター) に# (# 記号) を入力し、[Subscribe] (サブスクライブ) をクリックします。

  2. Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次のコマンドを入力して AWS IoT Device Client を起動します。

    cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
  3. ローカルホストコンピュータのターミナルウィンドウで AWS IoT Device Client の出力を確認しながら、[MQTT test client] (MQTT テストクライアント) に戻ります。[Publish to a topic] (トピックに公開する) タブで、[Topic name] (トピック名) に「test/dc/subtopic」と入力し、[Publish] (発行) をクリックします。

  4. ターミナルウィンドウで、次のようなメッセージを検索して、メッセージが受信されたことを確認します。

    2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
  5. ローカルホストコンピュータのターミナルウィンドウで AWS IoT Device Client の出力を確認しながら、[MQTT test client] (MQTT テストクライアント) に戻ります。[Publish to a topic] (トピックに公開する) タブで、[Topic name] (トピック名) に「test/dc/subtopic2」と入力し、[Publish] (発行) をクリックします。

  6. ターミナルウィンドウで、次のようなメッセージを検索して、メッセージが受信されたことを確認します。

    2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
  7. 両方のメッセージが受信されたことを確認するメッセージが表示されたら、^C (Ctrl-C) 入力して AWS IoT Device Client を停止します。

  8. 次のコマンドを入力して、メッセージログファイルの末尾を表示し、[MQTT test client] (MQTT テストクライアント) から発行したメッセージを表示します。

    tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
    注記

    ログファイルには、メッセージペイロードのみが含まれます。メッセージトピックは、受信したメッセージログファイルに記録されません。

    受信したログには AWS IoT Device Client によって発行されたメッセージが表示されることもあります。これは、ワイルドカードトピックフィルターにそのメッセージトピックが含まれており、発行されたメッセージがサブスクライバーに送信される前にメッセージブローカーがサブスクリプションリクエストを処理することがあるためです。

ログファイルのエントリは、メッセージが受信されたことを示しています。この手順は、他のトピック名を使用して繰り返すことができます。test/dc/ で始まるトピック名を持つメッセージはすべて受信されてログ記録されます。他の文字列で始まるトピック名のメッセージは無視されます。

AWS IoT Device Client が MQTT メッセージを発行してサブスクライブする方法をデモンストレーションしたら、チュートリアル: AWS IoT Device Client でのリモートアクション (ジョブ) をデモンストレーションする に進みます。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.