AWS IoT Device Shadow 서비스 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS IoT Device Shadow 서비스

AWS IoT Device Shadow 서비스는 AWS IoT 사물 객체에 그림자를 추가합니다. 섀도는 장치가 연결되어 있는지 여부에 관계없이 앱 및 기타 서비스에서 장치의 상태를 사용할 수 있도록 할 수 AWS IoT 있습니다. AWS IoT 사물 객체에는 명명된 그림자가 여러 개 있을 수 있으므로 IoT 솔루션에서 장치를 다른 앱 및 서비스에 연결하는 데 사용할 수 있는 더 많은 옵션을 제공할 수 있습니다.

AWS IoT 사물 객체에는 명시적으로 생성되기 전까지는 그림자가 없습니다. 콘솔을 사용하여 섀도우를 생성, 업데이트, 삭제할 수 있습니다. AWS IoT 디바이스, 기타 웹 클라이언트 및 서비스는 MQTT 및 예약된 MQTT 주제, 디바이스 섀도우 REST API를 사용한 HTTP 및 AWS IoT의 AWS CLI를 사용하여 섀도우를 생성, 업데이트 및 삭제할 수 있습니다. 섀도우는 클라우드에 저장되므로 장치 연결 여부에 관계없이 앱 및 기타 클라우드 서비스로부터 장치 상태 데이터를 수집하고 보고할 수 있습니다. AWS

섀도우 사용

섀도우는 디바이스, 앱 및 기타 클라우드 서비스가 데이터를 공유할 수 있는 신뢰할 수 있는 데이터 스토어를 제공합니다. 이를 통해 디바이스, 앱 및 기타 클라우드 서비스가 디바이스 상태를 유지하면서 연결하거나 연결을 끊을 수 있습니다.

장치, 앱 및 기타 클라우드 서비스가 연결되어 AWS IoT 있는 동안 이들은 그림자를 통해 장치의 현재 상태에 액세스하고 제어할 수 있습니다. 예를 들어 앱은 섀도우를 업데이트하여 장치 상태 변경을 요청할 수 있습니다. AWS IoT 변경 사항을 나타내는 메시지를 장치에 게시합니다. 디바이스는 이 메시지를 수신하고, 메시지와 일치하도록 상태를 업데이트하고, 업데이트된 상태로 메시지를 게시합니다. 디바이스 섀도우 서비스는 해당 섀도우에 이 업데이트된 상태를 반영합니다. 앱은 섀도우의 업데이트를 구독하거나 섀도우에 현재 상태를 쿼리할 수 있습니다.

기기가 오프라인 상태가 되어도 앱은 여전히 기기의 AWS IoT 섀도우와 통신할 수 있습니다. 디바이스가 다시 연결되면 섀도우의 현재 상태를 수신하여 섀도우와 일치하도록 상태를 업데이트한 다음 업데이트된 상태로 메시지를 게시할 수 있습니다. 마찬가지로 앱이 오프라인으로 전환되고 오프라인 상태인 동안 디바이스 상태가 변경된 경우, 디바이스는 섀도우를 업데이트하여 앱이 다시 연결될 때 섀도우에 현재 상태를 쿼리하도록 할 수 있습니다.

디바이스가 자주 오프라인 상태이고 디바이스가 다시 연결된 후 델타 메시지를 수신하도록 디바이스를 구성하려는 경우 영구 세션 기능을 사용할 수 있습니다. 영구 세션 만료 기간에 대한 자세한 내용은 영구 세션 만료 기간을 참조하세요.

명명된 섀도우 또는 명명되지 않은 섀도우 사용 선택

디바이스 섀도우 서비스는 명명된 섀도우 및 명명되지 않은 섀도우, 즉 클래식 섀도우를 지원합니다. 사물 객체의 경우 명명된 섀도우는 여러 개 가질 수 있으며 명명되지 않은 섀도우는 하나만 가질 수 있습니다. 사물 객체는 명명된 예약 섀도우를 가질 수 있습니다. 이 섀도우는 이름을 업데이트할 수 없다는 점을 제외하면 명명된 섀도우와 비슷하게 작동합니다. 자세한 내용은 명명된 예약 섀도우를 참조하세요.

사물 객체는 명명된 섀도우와 명명되지 않은 섀도우를 동시에 가질 수 있습니다. 그러나 각각에 액세스하는 데 사용되는 API는 약간 다르므로 솔루션에 가장 적합한 섀도우 유형을 결정하고 해당 유형만 사용하는 것이 더 효율적일 수 있습니다. 섀도우에 액세스하기 위한 API에 대한 자세한 내용은 섀도우 주제 단원을 참조하세요.

명명된 섀도우를 사용하여 사물 객체의 상태에 대한 다양한 보기를 생성할 수 있습니다. 예를 들어, 많은 속성을 가진 사물 객체를 각각 섀도우 이름으로 식별된 논리적 속성 그룹이 있는 섀도우로 분리할 수 있습니다. 속성을 섀도우별로 그룹화하고 정책을 사용하여 액세스를 제어함으로써 속성에 대한 액세스를 제한할 수도 있습니다. 디바이스 섀도우에 사용하는 정책에 대한 자세한 내용은 AWS IoT에 사용되는 작업, 리소스 및 조건 키AWS IoT Core 정책을 참조하세요.

명명되지 않은 클래식 섀도우는 명명된 섀도우보다 더 간단하지만 다소 제한적입니다. 각 AWS IoT 사물 객체에는 이름 없는 섀도우가 하나만 있을 수 있습니다. IoT 솔루션의 섀도우 데이터 사용이 제한적일 것으로 예상되는 경우 이 방법을 사용하여 섀도우 사용을 시작할 수 있습니다. 그러나 나중에 섀도우를 추가하려는 경우 처음부터 명명된 섀도우를 사용하는 것이 좋습니다.

플릿 인덱싱은 명명되지 않은 섀도우와 명명된 섀도우를 다르게 지원합니다. 자세한 정보는 플릿 인덱싱 관리를 참조하세요.

섀도우 액세스

모든 섀도우는 예약된 MQTT 주제 및 섀도우에서 get, updatedelete 작업을 지원하는 HTTP URL을 보유합니다.

섀도우는 JSON 섀도우 문서를 사용하여 데이터를 저장하고 검색합니다. 섀도우 문서에는 디바이스 상태의 다음 측면을 설명하는 상태 속성이 포함되어 있습니다.

  • desired

    앱은 desired 객체를 업데이트하여 디바이스 속성에 대해 원하는 상태를 지정합니다.

  • reported

    디바이스는 reported 객체에 현재 상태를 보고합니다.

  • delta

    AWS IoT delta객체의 원하는 상태와 보고된 상태 간의 차이를 보고합니다.

섀도우에 저장된 데이터는 업데이트 작업 메시지 본문의 상태 속성에 의해 결정됩니다. 후속 업데이트 작업은 기존 데이터 객체의 값을 수정하고 섀도우의 상태 객체에서 키 및 기타 요소를 추가 및 삭제할 수 있습니다. 섀도우 액세스에 대한 자세한 내용은 디바이스에서 섀도우 사용앱 및 서비스에서 섀도우 사용 단원을 참조하세요.

중요

업데이트 요청 권한은 신뢰할 수 있는 앱 및 디바이스로 제한되어야 합니다. 이렇게 하면 섀도우의 상태 속성이 예기치 않게 변경되는 것을 방지할 수 있습니다. 그렇지 않으면 섀도우를 사용하는 디바이스 및 앱이 상태 속성의 키가 변경될 수 있도록 설계되어야 합니다.

디바이스, 앱 및 기타 클라우드 서비스에서 섀도우 사용

디바이스, 앱 및 기타 클라우드 서비스에서 섀도우를 사용하려면 이러한 모든 작업 간에 일관성과 조정이 필요합니다. AWS IoT Device Shadow 서비스는 섀도우 상태를 저장하고, 섀도우 상태가 변경될 때 메시지를 보내고, 상태를 변경하는 메시지에 응답합니다. IoT 솔루션의 디바이스, 앱 및 기타 클라우드 서비스는 해당 상태를 관리하고 디바이스 섀도우의 상태와 일관성을 유지해야 합니다.

섀도우 상태 데이터는 동적이며 섀도우 액세스 권한이 있는 디바이스, 앱 및 기타 클라우드 서비스에 의해 변경될 수 있습니다. 이러한 이유로 각 디바이스, 앱 및 기타 클라우드 서비스가 섀도우와 상호 작용하는 방식을 고려하는 것이 중요합니다. 다음 예를 참조하세요.

  • 섀도우와 상태 데이터를 통신할 때 디바이스는 섀도우 상태의 reported 속성에만 기록해야 합니다.

  • 앱 및 기타 클라우드 서비스는 섀도우를 통해 디바이스에 상태 변경 요청을 전달할 때 desired 속성에만 기록해야 합니다.

중요

섀도우 데이터 객체에 포함된 데이터는 다른 섀도우 및 사물의 속성 및 사물 객체의 디바이스가 게시할 수 있는 MQTT 메시지의 콘텐츠와 같은 기타 사물 객체 속성과는 독립적입니다. 그러나 필요한 경우 디바이스는 서로 다른 MQTT 주제 및 섀도우에서 동일한 데이터를 보고할 수 있습니다.

여러 섀도우를 지원하는 디바이스는 서로 다른 섀도우에서 보고하는 데이터의 일관성을 유지해야 합니다.

메시지 순서

AWS IoT 서비스의 메시지가 특정 순서로 장치에 도착한다는 보장은 없습니다. 다음 시나리오는 이 경우에 어떤 일이 발생하는지 보여줍니다.

초기 상태 문서:

{ "state": { "reported": { "color": "blue" } }, "version": 9, "timestamp": 123456776 }

업데이트 1:

{ "state": { "desired": { "color": "RED" } }, "version": 10, "timestamp": 123456777 }

업데이트 2:

{ "state": { "desired": { "color": "GREEN" } }, "version": 11, "timestamp": 123456778 }

최종 상태 문서:

{ "state": { "reported": { "color": "GREEN" } }, "version": 12, "timestamp": 123456779 }

이로 인해 델타 메시지 2개가 생성됩니다.

{ "state": { "color": "RED" }, "version": 11, "timestamp": 123456778 }
{ "state": { "color": "GREEN" }, "version": 12, "timestamp": 123456779 }

디바이스가 이들 메시지를 틀린 순서로 수신할 수도 있습니다. 이들 메시지에서의 상태는 누적적이므로 디바이스는 현재 추적 중인 것보다 빠른 버전 번호는 무시할 수 있습니다. 디바이스가 버전 11보다 먼저 버전 12의 델타를 수신할 경우 버전 11 메시지는 무시할 수 있습니다.

섀도우 메시지 트리밍

디바이스로 전송되는 섀도우 메시지의 크기를 줄이려면 디바이스에 필요한 필드만 선택하고 디바이스가 수신 대기하는 MQTT 주제에 메시지를 다시 게시하는 규칙을 정의합니다.

이 규칙은 JSON 형식으로 지정되며 다음과 같아야 합니다.

{ "sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'", "ruleDisabled": false, "actions": [ { "republish": { "topic": "${topic(3)}/delta", "roleArn": "arn:aws:iam:123456789012:role/my-iot-role" } } ] }

SELECT 문은 메시지 가운데 지정된 주제로 재게시할 필드를 결정합니다. "+" 와일드 카드는 모든 섀도우 이름과 일치시키는 데 사용됩니다. 이 규칙은 모든 일치하는 메시지를 지정된 주제로 재게시하도록 지정합니다. 메시지를 재게시할 주제를 지정하는 데는 "topic()" 함수가 사용됩니다. topic(3)은 원래 주제의 사물 이름으로 평가됩니다. 규칙 생성에 대한 자세한 내용은 에 대한 규칙 AWS IoT 단원을 참조하세요.