기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
수명 주기 이벤트
AWS IoT MQTT 주제에 라이프사이클 이벤트를 게시할 수 있습니다. 이러한 이벤트는 기본적으로 사용할 수 있으며 비활성화할 수 없습니다.
참고
수명 주기 메시지는 틀린 순서로 전송될 수 있습니다. 중복 메시지를 수신할 수도 있습니다.
이 주제에서 수행할 작업
연결/연결 해제 이벤트
참고
AWS IoT Device Management 플릿 인덱싱을 사용하면 사물을 검색하고, 집계 쿼리를 실행하고, 사물 연결/연결 해제 이벤트를 기반으로 동적 그룹을 생성할 수 있습니다. 자세한 내용은 플릿 인덱싱을 참조하세요.
AWS IoT 클라이언트가 연결되거나 연결이 끊길 때 다음 MQTT 주제에 메시지를 게시합니다.
-
$aws/events/presence/connected/
– 클라이언트가 메시지 브로커에 연결됩니다.clientId
-
$aws/events/presence/disconnected/
– 클라이언트가 메시지 브로커에서 연결 해제됩니다.clientId
다음은 $aws/events/presence/connected/
주제에 게시되는 연결/연결 해제 메시지에 포함되는 JSON 요소의 목록입니다.clientId
- clientId
-
연결 또는 연결 해제하는 클라이언트의 클라이언트 ID입니다.
참고
# 또는 +가 포함된 클라이언트 ID는 수명 주기 이벤트를 수신하지 않습니다.
- 클라이언트 InitiatedDisconnect
-
클라이언트가 연결 해제를 시작했으면 True, 그렇지 않으면 false입니다. 연결 해제 메시지에서만 찾을 수 있습니다.
- disconnectReason
-
클라이언트가 연결을 해제하는 이유입니다. 연결 해제 메시지에서만 찾을 수 있습니다. 다음 테이블에는 유효한 값과 연결이 끊겼을 때 브로커가 마지막 유언 및 증거(LWT) 메시지를 보낼지가 나와 있습니다.
연결 해제 이유 설명 브로커가 LWT 메시지를 보냄 AUTH_ERROR
클라이언트가 인증에 실패했거나 권한 부여가 실패했습니다. 예. 이 오류가 발생하기 전에 디바이스의 연결이 활성 상태였던 경우 CLIENT_INITIATED_DISCONNECT
클라이언트는 연결을 해제할 것을 나타냅니다. 클라이언트는 MQTT DISCONNECT
제어 패킷을 전송하거나 클라이언트가 WebSocket 연결을 사용하는Close frame
경우 a를 전송하여 이 작업을 수행할 수 있습니다.아니요. 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
a가 해당 값보다 오래 WebSocket 연결되었으므로 클라이언트 연결이 끊깁니다. time-to-live 예. CUSTOMAUTH_TTL_EXPIRATION
클라이언트는 사용자 지정 권한 time-to-live 부여자의 값보다 오래 연결되었기 때문에 연결이 끊깁니다. 예. - eventType
-
이벤트의 유형입니다. 유효한 값은
connected
또는disconnected
입니다. - ipAddress
-
연결 클라이언트의 IP 주소입니다. 이 주소는 IPv4 또는 IPv6 형식일 수 있습니다. 연결 메시지에서만 찾을 수 있습니다.
- principalIdentifier
-
인증에 사용되는 자격 증명입니다. TLS 상호 인증 인증서의 경우 이 항목은 인증서 ID입니다. 다른 연결에서는 IAM 자격 증명입니다.
- sessionIdentifier
-
세션 수명 기간 동안 AWS IoT 존재하는 글로벌 고유 식별자입니다.
- 타임스탬프
-
이벤트 발생 시점의 근사치
- versionNumber
-
수명 주기 이벤트의 버전 번호입니다. 이것은 각 클라이언트 ID 연결에 대해 단조 증가하는 긴 정수 값입니다. 버전 번호는 구독자가 수명 주기 이벤트의 순서를 추론하는 데 사용할 수 있습니다.
참고
클라이언트 연결의 연결 및 연결 해제 메시지는 버전 번호가 동일합니다.
버전 번호는 값을 건너뛸 수 있으며 각 이벤트마다 항상 1씩 증가한다는 보장이 없습니다.
클라이언트가 약 1시간 동안 연결되지 않으면 버전 번호가 0으로 재설정됩니다. 영구 세션의 경우 클라이언트 연결이 영구 세션에 구성된 시간 time-to-live (TTL) 보다 오래 끊기면 버전 번호가 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) 메시지를 포함하는 수명 주기 이벤트에 대해 항상 대기 상태가 구현되도록 하는 것이 모범 사례입니다. 연결 해제 메시지가 수신되면 코드가 조치를 취하기 전에 일정 기간을 기다리고 디바이스가 여전히 오프라인 상태인지 확인해야 합니다. 이를 수행하는 한 가지 방법은 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/
주제에 게시되는 구독/구독 취소 메시지에 포함되는 JSON 요소의 목록입니다.clientId
- clientId
-
구독 또는 구독 취소하는 클라이언트의 클라이언트 ID입니다.
참고
# 또는 +가 포함된 클라이언트 ID는 수명 주기 이벤트를 수신하지 않습니다.
- eventType
-
이벤트의 유형입니다. 유효한 값은
subscribed
또는unsubscribed
입니다. - principalIdentifier
-
인증에 사용되는 자격 증명입니다. TLS 상호 인증 인증서의 경우 이 항목은 인증서 ID입니다. 다른 연결에서는 IAM 자격 증명입니다.
- sessionIdentifier
-
세션 수명 기간 동안 AWS IoT 존재하는 글로벌 고유 식별자입니다.
- 타임스탬프
-
이벤트 발생 시점의 근사치
- topics
-
클라이언트가 구독한 MQTT 주제의 어레이입니다.
참고
수명 주기 메시지는 틀린 순서로 전송될 수 있습니다. 중복 메시지를 수신할 수도 있습니다.