Device Shadow MQTT トピック - AWS IoT Core

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

Device Shadow MQTT トピック

Device Shadow サービスでは、予約された MQTT トピックを使用することで、アプリケーションやデバイスがデバイスの状態情報 (シャドウ) を取得、更新、削除できるようにします。

Shadow トピックへのパブリッシュとサブスクライブにはトピックベースの権限付与が必要です。 AWS IoT には、既存のトピック構造に新しいトピックを追加する権限があります。この理由から、Shadow トピックへのサブスクリプションにワイルドカードを使用しないことをお勧めします。例えば、 のようなトピックフィルターへのサブスクライブは避けてください。 が新しいシャドウトピック AWS IoT を導入すると、このトピックフィルターに一致するトピック$aws/things/thingName/shadow/#の数が増える可能性があるためです。これらのトピックでパブリッシュされたメッセージの例については、「シャドウとの相互作用」を参照してください。

シャドウは、名前付き、または名前のないもの (クラシック) にすることができます。それぞれで使用されるトピックは、トピックのプレフィックスでのみ異なります。この表は、各シャドウタイプで使用されるトピックのプレフィックスを示しています。

ShadowTopicPrefix シャドウタイプ
$aws/things/thingName/shadow 名前のない (クラシック) シャドウ
$aws/things/thingName/shadow/name/shadowName 名前付きシャドウ

完全なトピックを作成するには、次のセクションに示すように、参照するシャドウのタイプの ShadowTopicPrefix を選択し、thingName と、shadowName (該当する場合) を対応する値に置き換え、トピックスタブにそれを追加します。

以下に示しているのは、Shadow とのやり取りに使用される MQTT トピックです。

/get

デバイスのシャドウを取得するには、このトピックに空のメッセージをパブリッシュします。

ShadowTopicPrefix/get

AWS IoT は、 /get/acceptedまたは のいずれかに発行することで応答します/get/rejected

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get" ] } ] }

/get/accepted

AWS IoT は、デバイスのシャドウを返すときに、このトピックにレスポンスシャドウドキュメントを発行します。

ShadowTopicPrefix/get/accepted

詳細については、「レスポンス状態ドキュメント」を参照してください。

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/get/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get/accepted" ] } ] }

/get/rejected

AWS IoT は、デバイスのシャドウを返せないときに、このトピックにエラーレスポンスドキュメントを発行します。

ShadowTopicPrefix/get/rejected

詳細については、「エラーレスポンスドキュメント」を参照してください。

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/get/rejected" ] }, { "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get/rejected" ] } ] }

/update

このトピックにリクエスト状態ドキュメントをパブリッシュして、デバイスのシャドウを更新します。

ShadowTopicPrefix/update

メッセージ本文には、部分的なリクエスト状態ドキュメントが含まれています。

デバイスの状態を更新しようとするクライアントは、次のような desired プロパティを持つ JSON リクエスト状態ドキュメントを送信します。

{ "state": { "desired": { "color": "red", "power": "on" } } }

シャドウを更新するデバイスは、次のような reported プロパティを持つ JSON リクエスト状態ドキュメントを送信します。

{ "state": { "reported": { "color": "red", "power": "on" } } }

AWS IoT は、 /update/acceptedまたは のいずれかに発行することで応答します/update/rejected

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update" ] } ] }

/update/delta

AWS IoT は、デバイスのシャドウに対する変更を受け入れると、このトピックにレスポンス状態ドキュメントをパブリッシュします。リクエスト状態ドキュメントには、 desired状態と reported状態に対して異なる値が含まれます。

ShadowTopicPrefix/update/delta

メッセージバッファには /delta レスポンス状態ドキュメント が含まれています

メッセージ本文の詳細

  • update/delta にパブリッシュされたメッセージには、desired セクションと reported セクションとで異なる属性のみが含まれます。それら属性が、現在の更新メッセージに含まれていたか、 AWS IoT にすでに保存されていたかには関係ありません。desired セクションと reported セクションとで同じ属性は含まれません。

  • 属性が reported セクションにあるが、desired セクションに同じ属性がない場合、その属性は含まれません。

  • 属性が desired セクションにあるが、reported セクションに同じ属性がない場合、その属性は含まれません。

  • 属性が reported セクションから削除されたが、desired セクションにまだある場合、その属性は含まれます。

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/delta" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/delta" ] } ] }

/update/accepted

AWS IoT は、デバイスのシャドウに対する変更を受け入れると、このトピックにレスポンス状態ドキュメントを発行します。

ShadowTopicPrefix/update/accepted

メッセージバッファには /accepted レスポンス状態ドキュメント が含まれています

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/accepted" ] } ] }

/update/documents

AWS IoT は、シャドウの更新が正常に実行されるたびに、状態ドキュメントをこのトピックに発行します。

ShadowTopicPrefix/update/documents

メッセージ本文には、 が含まれています/documents レスポンス状態ドキュメント

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/documents" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/documents" ] } ] }

/update/rejected

AWS IoT は、デバイスのシャドウに対する変更を拒否すると、このトピックにエラーレスポンスドキュメントを発行します。

ShadowTopicPrefix/update/rejected

メッセージ本文には、エラーレスポンスドキュメント が含まれています。

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/rejected" ] } ] }

/delete

デバイスのシャドウを削除するには、削除トピックに空のメッセージをパブリッシュします。

ShadowTopicPrefix/delete

メッセージの内容は無視されます。

シャドウを削除しても、バージョン番号は 0 にリセットされないことに注意してください。

AWS IoT は、 /delete/acceptedまたは のいずれかに発行することで応答します/delete/rejected

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete" ] } ] }

/delete/accepted

AWS IoT は、デバイスのシャドウが削除されると、このトピックにメッセージを発行します。

ShadowTopicPrefix/delete/accepted

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/delete/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete/accepted" ] } ] }

/delete/rejected

AWS IoT は、デバイスのシャドウを削除できない場合、このトピックにエラーレスポンスドキュメントを発行します。

ShadowTopicPrefix/delete/rejected

メッセージ本文には、エラーレスポンスドキュメント が含まれています。

ポリシーの例

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/delete/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete/rejected" ] } ] }