

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

# ライフサイクルイベント
<a name="life-cycle-events"></a>

AWS IoT は、MQTT トピックでライフサイクルイベントを発行できます。これらのイベントはデフォルトで利用可能で、無効にすることはできません。

**注記**  
ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。  
`thingName` は、クライアントが[排他的なモノ](exclusive-thing.md)の機能を使用して接続している場合にのみ含まれます。

**Topics**
+ [接続/切断イベント](#connect-disconnect)
+ [接続試行失敗イベント](#connect-authfailure-event)
+ [サブスクライブ/サブスクライブ解除イベント](#subscribe-unsubscribe-events)

## 接続/切断イベント
<a name="connect-disconnect"></a>

**注記**  
 AWS IoT Device Management フリートインデックス作成を使用すると、モノの検索、集計クエリの実行、モノの Connect/Disconnect イベントに基づく動的グループの作成を行うことができます。詳細については、「[フリートインデックス作成](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html)」を参照してください。

AWS IoT クライアントが接続または切断すると、 は次の MQTT トピックにメッセージを発行します。
+ `$aws/events/presence/connected/clientId` – クライアントがメッセージブローカーに接続しました。
+ `$aws/events/presence/disconnected/clientId` – クライアントがメッセージブローカーから切断されました。

以下に示しているのは、`$aws/events/presence/connected/clientId` トピックにパブリッシュされる接続/切断メッセージに含まれる JSON 要素のリストです。

**clientId**  
接続/切断するクライアントの ID。  
\$1 または \$1 が含まれているクライアント ID はライフサイクルイベントを受信しません。

**thingName**  
IoT モノの名前。`thingName` は、クライアントが[排他的なモノ](exclusive-thing.md)の機能を使用して接続している場合にのみ含まれます。

**clientInitiatedDisconnect**  
クライアントによって切断が開始された場合は True、それ以外の場合は、false を返します。接続解除メッセージのみで見つかります。

**disconnectReason**  
クライアントが切断する理由。接続解除メッセージのみで見つかります。次の表には、有効な値と、接続が切断されたときにブローカーが [Last Will and Testament (LWT) メッセージ](mqtt.md#mqtt-lwt)を送信するかどうかが含まれています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/life-cycle-events.html)
1このエラーが表示される前にデバイスの接続がアクティブだった場合。  
2Last Will and Testament (LWT) メッセージを防ぐには、`DeleteConnection` API のデフォルトの LWT 送信動作を上書きするように `preventWillMessage=true` を設定します。

**eventType**  
イベントのタイプ。有効な値は `connected` または `disconnected` です。

**ipAddress**  
接続しているクライアントの IP アドレス。これは、IPv4 形式または IPv6 形式にすることができます。接続メッセージでのみ見つかります。

**principalIdentifier**  
認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。

**sessionIdentifier**  
セッションの存続中 AWS IoT に存在する のグローバルに一意の識別子。

**timestamp**  
イベントが発生したおおよその日時。

**versionNumber**  
ライフサイクルイベントのバージョン番号。これは、各クライアント ID 接続ごとに単調に増加する長い整数値です。バージョン番号は、ライフサイクルイベントの順序を推測するために加入者が使用できます。  
クライアント接続の Connect メッセージと Disconnect メッセージのバージョン番号は同じです。  
バージョン番号は値をスキップする可能性があり、イベントごとに 1 ずつ増加するとは限りません。  
クライアントが約 1 時間接続されない場合、バージョン番号は 0 にリセットされます。永続的なセッションでは、永続的なセッションに設定された有効期間 (TTL) よりも長い時間クライアントが切断された後、バージョン番号は 0 にリセットされます。

接続メッセージの構造は次のとおりです。

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002230757,
    "eventType": "connected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "ipAddress": "192.0.2.0",
    "versionNumber": 0
}
```

切断メッセージの構造は次のとおりです。

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1573002340451,
    "eventType": "disconnected",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "clientInitiatedDisconnect": true,
    "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
    "versionNumber": 0
}
```

### クライアントの切断の処理
<a name="reconnect"></a>

ベストプラクティスは、[Last Will and Testament (LWT) メッセージ](mqtt.md)を含むライフサイクルイベントに対して、常に待機状態を実装することです。切断メッセージが受信されると、コードは一定期間待機し、デバイスがオフラインのままであることを確認してからアクションを実行します。これを行う 1 つの方法は、[SQS 遅延キュー](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html)の使用です。クライアントが LWT またはライフサイクルイベントを受信したら、例えば 5 秒間メッセージをキューに追加できます。そのメッセージが使用可能になり、(Lambda または別のサービスによって) 処理されたら、さらにアクションを実行する前に、最初にデバイスがまだオフラインかどうか確認できます。

## 接続試行失敗イベント
<a name="connect-authfailure-event"></a>

AWS IoT は、クライアントが接続する権限がない場合、または最後の Will と Testament が設定されていて、クライアントがその最後の Will トピックに発行する権限がない場合に、次の MQTT トピックにメッセージを発行します。

```
$aws/events/presence/connect_failed/clientId
```

以下に、`$aws/events/presence/connect_failed/clientId` トピックに発行される接続許可メッセージに含まれる JSON 要素のリストを示しています。

**clientId**  
接続を試みて失敗したクライアントのクライアント ID。  
\$1 または \$1 が含まれているクライアント ID はライフサイクルイベントを受信しません。

**thingName**  
IoT モノの名前。`thingName` は、クライアントが[排他的なモノ](exclusive-thing.md)の機能を使用して接続している場合にのみ含まれます。

**timestamp**  
イベントが発生したおおよその日時。

**eventType**  
イベントのタイプ。有効な値は`connect_failed`です。

**connectFailureReason**  
接続が失敗する理由。有効な値は`AUTHORIZATION_FAILED`です。

**principalIdentifier**  
認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。

**sessionIdentifier**  
セッションの存続中 AWS IoT に存在する のグローバルに一意の識別子。

**ipAddress**  
接続しているクライアントの IP アドレス。これは、IPv4 形式または IPv6 形式にすることができます。接続メッセージでのみ見つかります。

接続失敗メッセージの構造は次のとおりです。

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "connect_failed",
    "connectFailureReason": "AUTHORIZATION_FAILED",
    "principalIdentifier": "12345678901234567890123456789012",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "ipAddress" : "192.0.2.0"
}
```

## サブスクライブ/サブスクライブ解除イベント
<a name="subscribe-unsubscribe-events"></a>

AWS IoT クライアントが MQTT トピックをサブスクライブまたはサブスクライブ解除すると、 は次の MQTT トピックにメッセージを発行します。

```
$aws/events/subscriptions/subscribed/clientId
```

 または 

```
$aws/events/subscriptions/unsubscribed/clientId
```

ここで、`clientId` は、 AWS IoT メッセージブローカーに接続する MQTT クライアントの ID です。

このトピックにパブリッシュされたメッセージには、以下の構造があります。

```
{
    "clientId": "186b5",
    "thingName": "exampleThing",
    "timestamp": 1460065214626,
    "eventType": "subscribed" | "unsubscribed",
    "sessionIdentifier": "00000000-0000-0000-0000-000000000000",
    "principalIdentifier": "12345678901234567890123456789012",
    "topics" : ["foo/bar","device/data","dog/cat"]
}
```

以下に示しているのは、`$aws/events/subscriptions/subscribed/clientId` および `$aws/events/subscriptions/unsubscribed/clientId` トピックにパブリッシュされるサブスクライブ/サブスクライブ解除メッセージに含まれる JSON 要素のリストです。

clientId  
サブスクライブまたはサブスクライブ解除するクライアントの ID。  
\$1 または \$1 が含まれているクライアント ID はライフサイクルイベントを受信しません。

thingName  
IoT モノの名前。`thingName` は、クライアントが[排他的なモノ](exclusive-thing.md)の機能を使用して接続している場合にのみ含まれます。

eventType  
イベントのタイプ。有効な値は `subscribed` または `unsubscribed` です。

principalIdentifier  
認証に使用された認証情報。TLS 相互認証の場合、これは使用された証明書の ID です。その他の認証の場合、これは IAM 認証情報です。

sessionIdentifier  
セッションの存続中 AWS IoT に存在する のグローバルに一意の識別子。

timestamp  
イベントが発生したおおよその日時。

トピック  
クライアントがサブスクライブした MQTT トピックの配列。

**注記**  
ライフサイクルメッセージは順不同で送信される場合があります。重複したメッセージを受信することがあります。