기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS IoT 는 MQTT 주제에 대한 수명 주기 이벤트를 게시할 수 있습니다. 이러한 이벤트는 기본적으로 사용할 수 있으며 비활성화할 수 없습니다.
참고
수명 주기 메시지는 틀린 순서로 전송될 수 있습니다. 중복 메시지를 수신할 수도 있습니다.
thingName
는 클라이언트가 독점 사물 기능을 사용하여 연결하는 경우에만 포함됩니다.
이 주제에서 수행할 작업
연결/연결 해제 이벤트
참고
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입니다.
참고
# 또는 +IDs가 포함된 클라이언트는 수명 주기 이벤트를 수신하지 않습니다.
- thingName
-
IoT 사물의 이름입니다.
thingName
는 클라이언트가 독점 사물 기능을 사용하여 연결하는 경우에만 포함됩니다. - clientInitiatedDisconnect
-
클라이언트가 연결 해제를 시작했으면 True, 그렇지 않으면 false입니다. 연결 해제 메시지에서만 찾을 수 있습니다.
- disconnectReason
-
클라이언트가 연결을 해제하는 이유입니다. 연결 해제 메시지에서만 찾을 수 있습니다. 다음 표에는 유효한 값과 연결 해제가 발생할 때 브로커가 마지막 유언 및 증명(LWT) 메시지를 보낼지 여부가 나와 있습니다.
연결 해제 이유 설명 브로커가 LWT 메시지를 보냅니다. AUTH_ERROR
클라이언트가 인증에 실패했거나 권한 부여가 실패했습니다. 예. 이 오류가 발생하기 전에 디바이스의 연결이 활성 상태였던 경우 CLIENT_INITIATED_DISCONNECT
클라이언트는 연결을 해제할 것을 나타냅니다. 클라이언트가 WebSocket 연결을 사용하는 Close frame
경우 클라이언트는 MQTTDISCONNECT
제어 패킷 또는를 전송하여이 작업을 수행할 수 있습니다.아니요. 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
가 값 time-to-live보다 오래 연결되었기 때문에 클라이언트 연결이 끊어 WebSocket 졌습니다. 예. 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",
"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
}
클라이언트 연결 해제 처리
가장 좋은 방법은 Last Will 및 Testament(LWT) 메시지를 포함하여 수명 주기 이벤트에 대해 항상 대기 상태를 구현하는 것입니다. 연결 해제 메시지가 수신되면 코드가 조치를 취하기 전에 일정 기간을 기다리고 디바이스가 여전히 오프라인 상태인지 확인해야 합니다. 이를 위한 한 가지 방법은 SQS 지연 대기열을 사용하는 것입니다. 클라이언트가 LWT 또는 수명 주기 이벤트를 수신하면 메시지를 대기열에 넣을 수 있습니다(예: 5초). 해당 메시지를 사용할 수 있게 되고 (Lambda 또는 다른 서비스에서) 처리하면, 추가 조치를 취하기 전에 디바이스가 여전히 오프라인 상태인지 여부를 먼저 확인할 수 있습니다.
연결 시도 실패 이벤트
AWS IoT 는 클라이언트가 연결할 권한이 없거나 마지막 유언장과 증명이 구성되고 클라이언트가 해당 마지막 유언MQTT장 주제에 게시할 권한이 없는 경우 다음 주제에 메시지를 게시합니다.
$aws/events/presence/connect_failed/
clientId
다음은 $aws/events/presence/connect_failed/
주제에 게시된 연결 권한 부여 메시지에 포함된 JSON 요소의 목록입니다.clientId
- clientId
-
연결을 시도했거나 연결하지 못한 클라이언트의 클라이언트 ID입니다.
참고
# 또는 +IDs가 포함된 클라이언트는 수명 주기 이벤트를 수신하지 않습니다.
- thingName
-
IoT 사물의 이름입니다.
thingName
는 클라이언트가 독점 사물 기능을 사용하여 연결하는 경우에만 포함됩니다. - 타임스탬프
-
이벤트 발생 시점의 근사치
- 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"
}
구독/구독 취소 이벤트
AWS IoT 는 클라이언트가 MQTT 주제를 구독하거나 구독 취소하면 다음 MQTT 주제에 메시지를 게시합니다.
$aws/events/subscriptions/subscribed/
clientId
or
$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/
주제에 게시된 구독 및 구독 취소 메시지에 포함된 JSON 요소의 목록입니다.clientId
- clientId
-
구독 또는 구독 취소하는 클라이언트의 클라이언트 ID입니다.
참고
# 또는 +IDs가 포함된 클라이언트는 수명 주기 이벤트를 수신하지 않습니다.
- thingName
-
IoT 사물의 이름입니다.
thingName
는 클라이언트가 독점 사물 기능을 사용하여 연결하는 경우에만 포함됩니다. - eventType
-
이벤트의 유형입니다. 유효한 값은
subscribed
또는unsubscribed
입니다. - principalIdentifier
-
인증에 사용되는 자격 증명입니다. TLS 상호 인증 인증서의 경우 인증서 ID입니다. 다른 연결에서는 IAM 자격 증명입니다.
- sessionIdentifier
-
세션 수명 동안 AWS IoT 존재하는의 전역 고유 식별자입니다.
- 타임스탬프
-
이벤트 발생 시점의 근사치
- topics
-
클라이언트가 구독한 MQTT 주제의 배열입니다.
참고
수명 주기 메시지는 틀린 순서로 전송될 수 있습니다. 중복 메시지를 수신할 수도 있습니다.