수명 주기 이벤트 - AWS IoT Core

수명 주기 이벤트

AWS IoT에서는 수명 주기 이벤트를 MQTT 주제에 게시할 수 있습니다. 이러한 이벤트는 기본적으로 사용할 수 있으며 비활성화할 수 없습니다.

참고

수명 주기 메시지는 틀린 순서로 전송될 수 있습니다. 중복 메시지를 수신할 수도 있습니다.

연결/연결 해제 이벤트

참고

AWS IoT Device Management 플릿 인덱싱을 사용하면 사물을 검색하고, 집계 쿼리를 실행하고, 사물 연결/연결 끊기 이벤트를 기반으로 동적 그룹을 생성할 수 있습니다. 자세한 내용은 플릿 인덱싱을 참조하세요.

AWS IoT은(는) 클라이언트가 연결 또는 연결 해제할 때 다음의 MQTT 주제에 메시지를 게시합니다.

  • $aws/events/presence/connected/clientId – 클라이언트가 메시지 브로커에 연결됩니다.

  • $aws/events/presence/disconnected/clientId – 클라이언트가 메시지 브로커에서 연결 해제됩니다.

다음은 $aws/events/presence/connected/clientId 주제에 게시되는 연결/연결 해제 메시지에 포함되는 JSON 요소의 목록입니다.

clientId

연결 또는 연결 해제하는 클라이언트의 클라이언트 ID입니다.

참고

# 또는 +가 포함된 클라이언트 ID는 수명 주기 이벤트를 수신하지 않습니다.

clientInitiatedDisconnect

클라이언트가 연결 해제를 시작했으면 True, 그렇지 않으면 false입니다. 연결 해제 메시지에서만 찾을 수 있습니다.

disconnectReason

클라이언트가 연결을 해제하는 이유입니다. 연결 해제 메시지에서만 찾을 수 있습니다. 다음 표에 유효한 값이 나와 있습니다.

연결 해제 이유 설명
AUTH_ERROR 클라이언트가 인증에 실패했거나 권한 부여가 실패했습니다.
CLIENT_INITIATED_DISCONNECT 클라이언트는 연결을 해제할 것을 나타냅니다. 클라이언트는 MQTT DISCONNECT 제어 패킷 또는 Close frame(클라이언트가 WebSocket 연결을 사용하는 경우)를 전송하여 이 작업을 수행할 수 있습니다.
CLIENT_ERROR 클라이언트가 연결 해제를 초래하는 잘못된 동작을 수행했습니다. 예를 들어 동일한 연결에서 둘 이상의 MQTT CONNECT 패킷을 전송하는 경우 또는 클라이언트가 페이로드 제한을 초과하는 페이로드로 게시하려고 시도하는 경우 클라이언트가 연결 해제됩니다.
CONNECTION_LOST 클라이언트-서버 연결이 차단되었습니다. 이는 네트워크 지연 시간이 길거나 인터넷 연결이 끊긴 경우에 발생할 수 있습니다.
DUPLICATE_CLIENTID 클라이언트가 이미 사용 중인 클라이언트 ID를 사용하고 있습니다. 이 경우 이미 연결된 클라이언트는 이 연결 해제 이유로 연결이 해제됩니다.
FORBIDDEN_ACCESS 클라이언트가 연결이 금지되어 있습니다. 예를 들어 IP 주소가 거부된 클라이언트는 연결에 실패합니다.
MQTT_KEEP_ALIVE_TIMEOUT 클라이언트의 연결 유지 시간의 1.5배 동안 클라이언트-서버 통신이 없으면 클라이언트의 연결이 해제됩니다.
SERVER_ERROR 예기치 않은 서버 문제로 인해 연결이 해제되었습니다.
SERVER_INITIATED_DISCONNECT 서버가 운영상 이유로 의도적으로 클라이언트의 연결을 해제합니다.
THROTTLED 클라이언트가 조절 제한을 초과하여 연결이 해제되었습니다.
WEBSOCKET_TTL_EXPIRATION WebSocket이 TTL(Time-to-Live) 값보다 오래 연결되었기 때문에 클라이언트의 연결이 해제되었습니다.
eventType

이벤트의 유형입니다. 유효한 값은 connected 또는 disconnected입니다.

ipAddress

연결 클라이언트의 IP 주소입니다. 이 주소는 IPv4 또는 IPv6 형식일 수 있습니다. 연결 메시지에서만 찾을 수 있습니다.

principalIdentifier

인증에 사용되는 자격 증명입니다. TLS 상호 인증 인증서의 경우 이 항목은 인증서 ID입니다. 다른 연결에서는 IAM 자격 증명입니다.

sessionIdentifier

세션 수명 주기 동안 존재하는 AWS IoT 내 전역에서 고유한 식별자입니다.

timestamp

Unix epoch 이후 밀리초 단위로 표시된 이벤트 발생 시점(근사치)입니다. 타임스탬프의 정확도는 +/- 2분입니다.

versionNumber

수명 주기 이벤트의 버전 번호입니다. 이것은 각 클라이언트 ID 연결에 대해 단조 증가하는 긴 정수 값입니다. 버전 번호는 구독자가 수명 주기 이벤트의 순서를 추론하는 데 사용할 수 있습니다.

참고

클라이언트 연결의 연결 및 연결 해제 메시지는 버전 번호가 동일합니다.

버전 번호는 값을 건너뛸 수 있으며 각 이벤트마다 항상 1씩 증가한다는 보장이 없습니다.

클라이언트가 약 1시간 동안 연결되지 않으면 버전 번호가 0으로 재설정됩니다. 영구 세션의 경우 클라이언트가 해당 세션에 대해 구성된 TTL(time-to-live)보다 오래 연결 해제되면 버전 번호가 0으로 재설정됩니다.

연결 메시지의 구조는 다음과 같습니다.

{ "clientId": "186b5", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }

연결 해제 메시지의 구조는 다음과 같습니다.

{ "clientId": "186b5", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }

클라이언트 연결 해제 처리

LWT(Last Will and Testament) 메시지를 포함하는 수명 주기 이벤트에 대해 항상 대기 상태가 구현되도록 하는 것이 모범 사례입니다. 연결 해제 메시지가 수신되면 코드가 조치를 취하기 전에 일정 기간을 기다리고 디바이스가 여전히 오프라인 상태인지 확인해야 합니다. 이를 수행하는 한 가지 방법은 SQS 지연 대기열을 사용하는 것입니다. 클라이언트가 LWT 또는 수명 주기 이벤트를 수신하면, 메시지 내용을 대기열에 넣을 수 있습니다(예: 5초간). 해당 메시지를 사용할 수 있게 되고 (Lambda 또는 다른 서비스에서) 처리하면, 추가 조치를 취하기 전에 디바이스가 여전히 오프라인 상태인지 여부를 먼저 확인할 수 있습니다.

구독/구독 취소 이벤트

AWS IoT은(는) 클라이언트가 MQTT 주제에서 구독 또는 구독 취소하면 다음 MQTT 주제에 메시지를 게시합니다.

$aws/events/subscriptions/subscribed/clientId

또는

$aws/events/subscriptions/unsubscribed/clientId

여기서 clientId은(는) AWS IoT 메시지 브로커에 연결하는 MQTT 클라이언트 ID입니다.

이 주제에 게시된 메시지는 구조가 다음과 같습니다.

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

다음은 $aws/events/subscriptions/subscribed/clientId$aws/events/subscriptions/unsubscribed/clientId 주제에 게시되는 구독/구독 취소 메시지에 포함되는 JSON 요소의 목록입니다.

clientId

구독 또는 구독 취소하는 클라이언트의 클라이언트 ID입니다.

참고

# 또는 +가 포함된 클라이언트 ID는 수명 주기 이벤트를 수신하지 않습니다.

eventType

이벤트의 유형입니다. 유효한 값은 subscribed 또는 unsubscribed입니다.

principalIdentifier

인증에 사용되는 자격 증명입니다. TLS 상호 인증 인증서의 경우 이 항목은 인증서 ID입니다. 다른 연결에서는 IAM 자격 증명입니다.

sessionIdentifier

세션 수명 주기 동안 존재하는 AWS IoT 내 전역에서 고유한 식별자입니다.

timestamp

Unix epoch 이후 밀리초 단위로 표시된 이벤트 발생 시점(근사치)입니다. 타임스탬프의 정확도는 +/- 2분입니다.

topics

클라이언트가 구독한 MQTT 주제의 어레이입니다.

참고

수명 주기 메시지는 틀린 순서로 전송될 수 있습니다. 중복 메시지를 수신할 수도 있습니다.