AWS IoT 디바이스 섀도우 서비스 - AWS IoT 코어

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

AWS IoT 디바이스 섀도우 서비스

AWS IoT 디바이스 섀도우 서비스는 AWS IoT 사물 객체에 섀도우를 추가합니다. 섀도우는 디바이스가 AWS IoT에 연결되어 있는지 여부에 관계없이 앱 및 기타 서비스에서 디바이스의 상태를 사용할 수 있도록 할 수 있습니다. AWS IoT 사물 객체는 여러 개의 명명된 섀도우를 가질 수 있으므로 IoT 솔루션에는 디바이스를 다른 앱 및 서비스에 연결하기 위한 더 많은 옵션이 있습니다.

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

섀도우 사용

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

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

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

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

디바이스 섀도우 서비스는 명명된 섀도우와 명명되지 않은 클래식 섀도우(이전에 사용됨)를 지원합니다. 사물 객체의 경우 명명된 섀도우는 여러 개 가질 수 있으며 명명되지 않은 클래식 섀도우는 하나만 가질 수 있습니다. 사물 객체는 명명된 섀도우와 명명되지 않은 섀도우를 동시에 가질 수 있습니다. 그러나 각각에 액세스하는 데 사용되는 API는 약간 다르므로 솔루션에 가장 적합한 섀도우 유형을 결정하고 해당 유형만 사용하는 것이 더 효율적일 수 있습니다. 섀도우에 액세스하기 위한 API에 대한 자세한 내용은 섀도우 주제 단원을 참조하십시오.

명명된 섀도우를 사용하여 사물 객체의 상태에 대한 다양한 보기를 생성할 수 있습니다. 예를 들어, 많은 속성을 가진 사물 객체를 각각 섀도우 이름으로 식별된 논리적 속성 그룹이 있는 섀도우로 분리할 수 있습니다. 속성을 섀도우별로 그룹화하고 정책을 사용하여 액세스를 제어함으로써 속성에 대한 액세스를 제한할 수도 있습니다. 그러나 명명된 섀도우는 플릿 인덱싱을 지원하지 않습니다.

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

섀도우 액세스

모든 섀도우에는 섀도우에 대한 , 작업을 지원하는 예약된 MQTT 주제getupdateHTTP URLdelete이 있습니다.

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

  • desired

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

  • reported

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

  • delta

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

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

중요

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

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

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

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

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

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

중요

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

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

메시지 순서

AWS IoT 서비스가 전송한 메시지가 지정된 순서로 디바이스에 도달한다는 보장은 없습니다. 다음 시나리오는 이 경우에 어떤 일이 발생하는지 보여줍니다.

초기 상태 문서:

{ "state": { "reported": { "color": "blue" } }, "version": 10, "timestamp": 123456777 }

업데이트 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에 대한 규칙 단원을 참조하십시오.