

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

# Device Shadow MQTT トピック
<a name="device-shadow-mqtt"></a>

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

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

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


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

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

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

**Topics**
+ [/get](#get-pub-sub-topic)
+ [/get/accepted](#get-accepted-pub-sub-topic)
+ [/get/rejected](#get-rejected-pub-sub-topic)
+ [/update](#update-pub-sub-topic)
+ [/update/delta](#update-delta-pub-sub-topic)
+ [/update/accepted](#update-accepted-pub-sub-topic)
+ [/update/documents](#update-documents-pub-sub-topic)
+ [/update/rejected](#update-rejected-pub-sub-topic)
+ [/delete](#delete-pub-sub-topic)
+ [/delete/accepted](#delete-accepted-pub-sub-topic)
+ [/delete/rejected](#delete-rejected-pub-sub-topic)

## /get
<a name="get-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/get
```

AWS IoT は、 [/get/accepted](#get-accepted-pub-sub-topic)または のいずれかに発行することで応答します[/get/rejected](#get-rejected-pub-sub-topic)。

### ポリシーの例
<a name="get-policy"></a>

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

****  

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

## /get/accepted
<a name="get-accepted-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/get/accepted
```

詳細については、「[レスポンス状態ドキュメント](device-shadow-document.md#device-shadow-example-response-json)」を参照してください。

### ポリシーの例
<a name="get-accepted-policy"></a>

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

****  

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

## /get/rejected
<a name="get-rejected-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/get/rejected
```

詳細については、「[エラーレスポンスドキュメント](device-shadow-document.md#device-shadow-example-error-json)」を参照してください。

### ポリシーの例
<a name="get-rejected-policy"></a>

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

****  

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

## /update
<a name="update-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/update
```

メッセージ本文には、[部分的なリクエスト状態ドキュメント](device-shadow-document.md#device-shadow-example-request-json)が含まれています。

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

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

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

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

AWS IoT は、 [/update/accepted](#update-accepted-pub-sub-topic)または のいずれかに発行することで応答します[/update/rejected](#update-rejected-pub-sub-topic)。

### ポリシーの例
<a name="update-policy"></a>

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

****  

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

## /update/delta
<a name="update-delta-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/update/delta
```

メッセージバッファには [/delta レスポンス状態ドキュメント](device-shadow-document.md#device-shadow-example-response-json-delta) が含まれています

### メッセージ本文の詳細
<a name="update-delta-rules"></a>
+ `update/delta` にパブリッシュされたメッセージには、`desired` セクションと `reported` セクションとで異なる属性のみが含まれます。それら属性が、現在の更新メッセージに含まれていたか、 AWS IoTにすでに保存されていたかには関係ありません。`desired` セクションと `reported` セクションとで同じ属性は含まれません。
+ 属性が `reported` セクションにあるが、`desired` セクションに同じ属性がない場合、その属性は含まれません。
+ 属性が `desired` セクションにあるが、`reported` セクションに同じ属性がない場合、その属性は含まれません。
+ 属性が `reported` セクションから削除されたが、`desired` セクションにまだある場合、その属性は含まれます。

### ポリシーの例
<a name="update-delta-policy"></a>

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

****  

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

## /update/accepted
<a name="update-accepted-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/update/accepted
```

メッセージバッファには [/accepted レスポンス状態ドキュメント](device-shadow-document.md#device-shadow-example-response-json-accepted) が含まれています

### ポリシーの例
<a name="update-accepted-policy"></a>

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

****  

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

## /update/documents
<a name="update-documents-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/update/documents
```

メッセージ本文には、 が含まれています[/documents レスポンス状態ドキュメント](device-shadow-document.md#device-shadow-example-response-json-documents)

### ポリシーの例
<a name="update-documents-policy"></a>

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

****  

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

## /update/rejected
<a name="update-rejected-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/update/rejected
```

メッセージ本文には、[エラーレスポンスドキュメント](device-shadow-document.md#device-shadow-example-error-json) が含まれています。

### ポリシーの例
<a name="update-rejected-policy"></a>

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

****  

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

## /delete
<a name="delete-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/delete
```

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

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

AWS IoT は、 [/delete/accepted](#delete-accepted-pub-sub-topic)または のいずれかに発行することで応答します[/delete/rejected](#delete-rejected-pub-sub-topic)。

### ポリシーの例
<a name="delete-policy"></a>

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

****  

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

## /delete/accepted
<a name="delete-accepted-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/delete/accepted
```

### ポリシーの例
<a name="delete-accepted-policy"></a>

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

****  

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

## /delete/rejected
<a name="delete-rejected-pub-sub-topic"></a>

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

```
ShadowTopicPrefix/delete/rejected
```

メッセージ本文には、[エラーレスポンスドキュメント](device-shadow-document.md#device-shadow-example-error-json) が含まれています。

### ポリシーの例
<a name="delete-rejected-policy"></a>

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

****  

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