기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
사물 인덱싱 관리
모든 사물에 대해 생성된 인덱스는 AWS_Things
입니다. AWS IoT
레지스트리 데이터, AWS IoT 디바이스 섀도우 데이터, AWS IoT 연결 데이터 및 AWS IoT Device Defender 위반 데이터와 같은 데이터 원본에서 인덱싱할 대상을 제어할 수 있습니다.
이 주제에서 수행할 작업
사물 인덱싱 활성화
update-indexing-configuration CLI 명령 또는 UpdateIndexingConfiguration API 작업을 사용하여 AWS_Things
인덱스를 생성하고 구성을 제어합니다. --thing-indexing-configuration
(thingIndexingConfiguration
) 파라미터를 사용하여 인덱싱할 데이터 종류(예: 레지스트리, 섀도우, 디바이스 연결 데이터 및 Device Defender 위반 데이터)를 제어합니다.
--thing-indexing-configuration
파라미터는 다음 구조의 문자열을 사용합니다.
{ "thingIndexingMode": "OFF"|"REGISTRY"|"REGISTRY_AND_SHADOW", "thingConnectivityIndexingMode": "OFF"|"STATUS", "deviceDefenderIndexingMode": "OFF"|"VIOLATIONS", "namedShadowIndexingMode": "OFF"|"ON", "managedFields": [ { "name": "string", "type": "Number"|"String"|"Boolean" }, ... ], "customFields": [ { "name": "string", "type": "Number"|"String"|"Boolean" }, ... ], "filter": { "namedShadowNames": [ "string" ], "geoLocations": [ { "name": "String", "order": "LonLat|LatLon" } ] } }
사물 인덱싱 모드
인덱싱 구성에서 디바이스를 인덱싱하고 검색하려는 데이터 소스에 따라 다양한 사물 인덱싱 모드를 지정할 수 있습니다.
-
thingIndexingMode
: 레지스트리 또는 섀도가 인덱싱되는지 여부를 제어합니다.thingIndexingMode
이OFF
로 설정되면 사물 인덱싱이 비활성화됩니다.
-
thingConnectivityIndexingMode
: 사물 연결 데이터가 인덱싱되는지를 지정합니다.
-
deviceDefenderIndexingMode
: Device Defender 위반 데이터가 인덱싱되는지 여부를 지정합니다. -
namedShadowIndexingMode
: 명명된 섀도 데이터가 인덱싱되는지 여부를 지정합니다. 플릿 인덱싱 구성에 추가할 명명된 섀도우를 선택하려면namedShadowIndexingMode
를ON
으로 설정하고filter
에서 명명된 섀도우 이름을 지정합니다.
아래 표에는 각 인덱싱 모드의 유효한 값과 각 값에 대해 인덱싱된 데이터 소스가 나와 있습니다.
속성 | 유효값 | 레지스트리 | 섀도우 | 연결 | DD 위반 | 명명된 섀도우 |
---|---|---|---|---|---|---|
thingIndexingMode |
OFF | |||||
REGISTRY | ✓ | |||||
REGISTRY_AND_SHADOW | ✓ | ✓ | ||||
thingConnectivityIndexingMode |
지정되지 않음. | |||||
OFF | ||||||
STATUS | ✓ | |||||
deviceDefenderIndexingMode |
지정되지 않음. | |||||
OFF | ||||||
VIOLATIONS | ✓ | |||||
namedShadowIndexingMode |
지정되지 않음. | |||||
OFF | ||||||
ON | ✓ |
관리형 필드 및 사용자 정의 필드
관리형 필드
관리형 필드에는 사물, 사물 그룹, 디바이스 섀도우, 디바이스 연결 및 Device Defender 위반과 관련된 데이터가 포함됩니다.는 관리형 필드의 데이터 유형을 AWS IoT 정의합니다. AWS IoT
사물을 생성할 때 각 관리형 필드의 값을 지정합니다. 예를 들어, 사물 이름, 사물 그룹 및 사물 설명은 모두 관리형 필드입니다. 플릿 인덱싱은 지정한 인덱싱 모드를 기반으로 관리형 필드를 인덱싱합니다. 관리형 필드는 customFields
에서 변경하거나 표시할 수 없습니다.
사용자 지정 필드
속성, 디바이스 섀도우 데이터 및 Device Defender 위반 데이터를 인덱싱할 사용자 지정 필드를 만들어 집계할 수 있습니다. customFields
속성은 필드 이름과 데이터 형식 페어의 목록입니다. 데이터 유형에 따라 집계 쿼리를 수행할 수 있습니다. 선택한 인덱싱 모드는 customFields
에서 지정할 수 있는 필드에 영향을 줍니다. 예를 들어, REGISTRY
인덱싱 모드를 지정하면 사물 섀도우에서 사용자 지정 필드를 지정할 수 없습니다. update-indexing-configuration CLI 명령을 사용하여 사용자 지정 필드를 생성하거나 업데이트할 수 있습니다(인덱싱 구성 예제 업데이트의 예제 명령 참조). 자세한 내용은 사용자 정의 필드를 참조하세요.
인덱싱 필터
인덱싱 필터는 명명된 섀도 및 지리적 위치 데이터에 대한 추가 선택을 제공합니다.
namedShadowNames
플릿 인덱싱 구성에 추가할 명명된 섀도를 선택하려면 namedShadowIndexingMode
를 ON
으로 설정하고 namedShadowNames
에서 명명된 섀도 이름을 지정합니다.
예
"filter": { "namedShadowNames": [ "namedShadow1", "namedShadow2" ] }
geoLocations
플릿 인덱싱 구성에 지리적 위치 데이터를 추가하려면:
-
지리 위치 데이터가 클래식(이름 없음) 섀도우에 저장되는 경우를 REGISTRY_AND_
thingIndexingMode
로 설정하고geoLocations
필터에서 지리 위치 데이터를 SHADOW지정합니다.아래 예제 필터는 클래식(이름 없음) 섀도우의 geoLocation 객체를 지정합니다.
"filter": { "geoLocations": [ { "name": "shadow.reported.location", "order": "LonLat" } ] }
-
지리적 위치 데이터가 명명된 섀도우에 저장되어 있는 경우
namedShadowIndexingMode
를 ON으로 설정하고namedShadowNames
필터에 섀도 이름을 추가한 다음geoLocations
필터에 지리 위치 데이터를 지정합니다.아래 예제 필터는 명명된 섀도우(
nameShadow1
)의 geoLocation 객체를 지정합니다."filter": { "namedShadowNames": [ "namedShadow1" ], "geoLocations": [ { "name": "shadow.name.namedShadow1.reported.location", "order": "LonLat" } ] }
자세한 내용은 AWS IoT API 참조 IndexingFilter의 섹션을 참조하세요.
인덱싱 구성 예 업데이트
인덱싱 구성을 업데이트하려면 update-indexing-configuration CLI 명령을 사용합니다 AWS IoT . 다음 예제에서는 update-indexing-configuration을 사용하는 방법을 보여줍니다.
짧은 구문:
aws iot update-indexing-configuration --thing-indexing-configuration \ 'thingIndexingMode=REGISTRY_AND_SHADOW, deviceDefenderIndexingMode=VIOLATIONS, namedShadowIndexingMode=ON,filter={namedShadowNames=[thing1shadow]}, thingConnectivityIndexingMode=STATUS, customFields=[{name=attributes.version,type=Number}, {name=shadow.name.thing1shadow.desired.DefaultDesired, type=String}, {name=shadow.desired.power, type=Boolean}, {name=deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number, type=Number}]'
JSON 구문:
aws iot update-indexing-configuration --cli-input-json \ '{ "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY_AND_SHADOW", "thingConnectivityIndexingMode": "STATUS", "deviceDefenderIndexingMode": "VIOLATIONS", "namedShadowIndexingMode": "ON", "filter": { "namedShadowNames": ["thing1shadow"]}, "customFields": [ { "name": "shadow.desired.power", "type": "Boolean" }, {"name": "attributes.version", "type": "Number"}, {"name": "shadow.name.thing1shadow.desired.DefaultDesired", "type": "String"}, {"name": "deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number", "type": Number} ] } }'
이 명령은 출력을 생성하지 않습니다.
사물 인덱스 상태를 확인하려면 describe-index
CLI 명령을 실행합니다.
aws iot describe-index --index-name "AWS_Things"
describe-index
명령의 출력은 다음과 같습니다.
{ "indexName": "AWS_Things", "indexStatus": "ACTIVE", "schema": "MULTI_INDEXING_MODE" }
참고
플릿 인덱싱이 플릿 인덱스를 업데이트하는 데 잠시 시간이 걸릴 수 있습니다. 사용하기 ACTIVE 전에가 indexStatus
표시될 때까지 기다리는 것이 좋습니다. 구성한 데이터 원본에 따라 스키마 필드에 다른 값이 있을 수 있습니다. 자세한 내용은 사물 인덱스 설명을 참조하세요.
사물 인덱싱 구성 세부 정보를 가져오려면 get-indexing-configuration
CLI 명령을 실행합니다.
aws iot get-indexing-configuration
get-indexing-configuration
명령의 출력은 다음과 같습니다.
{ "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY_AND_SHADOW", "thingConnectivityIndexingMode": "STATUS", "deviceDefenderIndexingMode": "VIOLATIONS", "namedShadowIndexingMode": "ON", "managedFields": [ { "name": "connectivity.disconnectReason", "type": "String" }, { "name": "registry.version", "type": "Number" }, { "name": "thingName", "type": "String" }, { "name": "deviceDefender.violationCount", "type": "Number" }, { "name": "shadow.hasDelta", "type": "Boolean" }, { "name": "shadow.name.*.version", "type": "Number" }, { "name": "shadow.version", "type": "Number" }, { "name": "connectivity.version", "type": "Number" }, { "name": "connectivity.timestamp", "type": "Number" }, { "name": "shadow.name.*.hasDelta", "type": "Boolean" }, { "name": "registry.thingTypeName", "type": "String" }, { "name": "thingId", "type": "String" }, { "name": "connectivity.connected", "type": "Boolean" }, { "name": "registry.thingGroupNames", "type": "String" } ], "customFields": [ { "name": "shadow.name.thing1shadow.desired.DefaultDesired", "type": "String" }, { "name": "deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number", "type": "Number" }, { "name": "shadow.desired.power", "type": "Boolean" }, { "name": "attributes.version", "type": "Number" } ], "filter": { "namedShadowNames": [ "thing1shadow" ] } }, "thingGroupIndexingConfiguration": { "thingGroupIndexingMode": "OFF" } }
사용자 지정 필드를 업데이트하려면 update-indexing-configuration
명령을 실행하면 됩니다. 예제는 다음과 같습니다.
aws iot update-indexing-configuration --thing-indexing-configuration 'thingIndexingMode=REGISTRY_AND_SHADOW,customFields=[{name=attributes.version,type=Number},{name=attributes.color,type=String},{name=shadow.desired.power,type=Boolean},{name=shadow.desired.intensity,type=Number}]'
이 명령은 인덱싱 구성에 shadow.desired.intensity
를 추가했습니다.
참고
인덱싱 구성에서 사용자 정의 필드를 업데이트하면 모든 기존 사용자 정의 필드를 덮어씁니다. update-indexing-configuration을 호출할 때 모든 사용자 지정 필드를 지정해야 합니다.
인덱스가 다시 작성되면 새로 추가된 필드, 검색 레지스트리 데이터, 섀도우 데이터 및 사물 연결 상태 데이터에 대해 집계 쿼리를 사용할 수 있습니다.
인덱싱 모드를 변경할 때 새 인덱싱 모드를 사용하여 모든 사용자 정의 필드가 유효한지 확인합니다. 예를 들어, shadow.desired.temperature
라는 사용자 정의 필드에서 REGISTRY_AND_SHADOW
모드를 사용하여 시작하는 경우 인덱싱 모드를 REGISTRY
로 변경하기 전에 shadow.desired.temperature
사용자 정의 필드를 삭제해야 합니다. 인덱싱 구성에 해당 인덱싱 모드로 인덱싱되지 않은 사용자 정의 필드가 포함되어 있으면 업데이트가 실패합니다.
사물 인덱스 설명
다음 명령은 describe-index CLI 명령을 사용하여 사물 인덱스의 현재 상태를 검색하는 방법을 보여줍니다.
aws iot describe-index --index-name "AWS_Things"
명령의 응답은 다음과 같을 수 있습니다.
{ "indexName": "AWS_Things", "indexStatus": "BUILDING", "schema": "REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS" }
인덱싱을 처음 플릿하면가 인덱스를 AWS IoT 빌드합니다. indexStatus
가 BUILDING
상태일 경우 인덱스를 쿼리할 수 없습니다. 사물 인덱스에 대한 schema
는 인덱싱할 데이터 형식(REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS
)을 가리킵니다.
인덱스 구성을 변경하면 인덱스를 다시 작성해야 합니다. 이 프로세스 중의 indexStatus
는 REBUILDING
입니다. 다시 작성되는 도중에 사물 인덱스의 데이터에 대한 쿼리는 실행할 수 있습니다. 예를 들어, 인덱스가 다시 작성되는 동안 인덱스 구성을 REGISTRY
에서 REGISTRY_AND_SHADOW
로 변경하는 경우 최신 업데이트를 포함하여 레지스트리 데이터를 쿼리할 수 있습니다. 하지만 리빌드가 완료될 때까지 섀도우 데이터에 대해서는 쿼리를 실행할 수 없습니다. 인덱스를 빌드 또는 리빌드하는 데 걸리는 시간은 데이터 크기에 따라 달라집니다.
구성한 데이터 원본에 따라 스키마 필드에 다른 값이 표시될 수 있습니다. 아래 테이블에는 다양한 스키마 값과 해당 설명이 나와 있습니다.
스키마 | 설명 |
---|---|
OFF | 데이터 원본이 구성되거나 인덱싱되지 않습니다. |
REGISTRY | 레지스트리 데이터는 인덱싱됩니다. |
REGISTRY_AND_SHADOW | 레지스트리 데이터와 명명되지 않은(클래식) 섀도우 데이터가 인덱싱됩니다. |
REGISTRY_AND_CONNECTIVITY | 레지스트리 데이터와 연결 데이터가 인덱싱됩니다. |
REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS | 레지스트리 데이터, 명명되지 않은 (클래식) 섀도우 데이터 및 연결 데이터가 인덱싱됩니다. |
MULTI_INDEXING_MODE | 레지스트리, 명명되지 않은 (클래식) 섀도우 또는 연결 데이터 외에 명명된 섀도우 또는 Device Defender 위반 데이터가 인덱싱됩니다. |
사물 인덱스에 대한 쿼리
search-index CLI 명령을 사용하여 인덱스의 데이터를 쿼리합니다.
aws iot search-index --index-name "AWS_Things" --query-string "thingName:mything*"
{ "things":[{ "thingName":"mything1", "thingGroupNames":[ "mygroup1" ], "thingId":"a4b9f759-b0f2-4857-8a4b-967745ed9f4e", "attributes":{ "attribute1":"abc" }, "connectivity": { "connected":false, "timestamp":1556649874716, "disconnectReason": "CONNECTION_LOST" } }, { "thingName":"mything2", "thingTypeName":"MyThingType", "thingGroupNames":[ "mygroup1", "mygroup2" ], "thingId":"01014ef9-e97e-44c6-985a-d0b06924f2af", "attributes":{ "model":"1.2", "country":"usa" }, "shadow":{ "desired":{ "location":"new york", "myvalues":[3, 4, 5] }, "reported":{ "location":"new york", "myvalues":[1, 2, 3], "stats":{ "battery":78 } }, "metadata":{ "desired":{ "location":{ "timestamp":123456789 }, "myvalues":{ "timestamp":123456789 } }, "reported":{ "location":{ "timestamp":34535454 }, "myvalues":{ "timestamp":34535454 }, "stats":{ "battery":{ "timestamp":34535454 } } } }, "version":10, "timestamp":34535454 }, "connectivity": { "connected":true, "timestamp":1556649855046 } }], "nextToken":"AQFCuvk7zZ3D9pOYMbFCeHbdZ+h=G" }
JSON 응답에서 "connectivity"
(thingConnectivityIndexingMode=STATUS
설정에 의해 활성화된 대로)는 부울 값, 타임스탬프 및 디바이스가에 연결되어 있는지 disconnectReason 여부를 나타내는를 제공합니다 AWS IoT Core. 로 1556649874716
인해 POSIX 디바이스 연결이 "mything1"
끊어졌습니다(false
). CONNECTION_LOST
연결 해제 이유에 대한 자세한 내용은 수명 주기 이벤트를 참조하세요.
"connectivity": { "connected":false, "timestamp":1556649874716, "disconnectReason": "CONNECTION_LOST" }
디바이스가 POSIX 시간에 (true
)에 "mything2"
연결되었습니다1556649855046
.
"connectivity": { "connected":true, "timestamp":1556649855046 }
타임스탬프는 에포크 이후 밀리초 단위로 제공되므로는 2019년 4월 30일 화요일 오후 6:44:15.046()을 1556649855046
나타냅니다UTC.
중요
디바이스가 약 한 시간 동안 연결이 끊어져 있으면 연결 상태 값 "timestamp"
및 "disconnectReason"
이 누락되었을 수 있습니다.
규제 및 제한
AWS_Things
에 대한 규제 및 제한입니다.
- 복잡한 유형의 섀도우 필드
-
섀도우 필드는 필드 값이 배열이 포함되지 않은 JSON 객체 또는 단순 유형으로만 구성된 배열과 같은 단순 유형인 경우에만 인덱싱됩니다. 단순한 유형이란 문자열, 숫자 또는 문자의 한 부분이
true
또는false
라는 의미입니다. 예를 들어, 다음의 섀도우 상태에서"palette"
필드의 값은 유형이 복잡한 항목이 포함된 어레이이므로 인덱싱되지 않습니다."colors"
필드의 값은 어레이의 각 값이 문자열이므로 인덱스 처리됩니다.{ "state": { "reported": { "switched": "ON", "colors": [ "RED", "GREEN", "BLUE" ], "palette": [ { "name": "RED", "intensity": 124 }, { "name": "GREEN", "intensity": 68 }, { "name": "BLUE", "intensity": 201 } ] } } }
- 중첩 섀도우 필드 이름
-
중첩 섀도우 필드의 이름은 마침표(.)로 구분된 문자열로 저장됩니다. 예를 들어, 섀도우 문서가 다음과 같을 경우
{ "state": { "desired": { "one": { "two": { "three": "v2" } } } } }
필드
three
의 이름은desired.one.two.three
로 저장됩니다. 섀도우 문서가 다음과 같이 저장된 경우에도{ "state": { "desired": { "one.two.three": "v2" } } }
둘 다
shadow.desired.one.two.three:v2
에 대한 쿼리와 일치합니다. 섀도우 필드 이름에 마침표를 사용하지 마세요. - 섀도우 메타데이터
-
섀도우 메타데이터 섹션의 필드는 인덱스 처리가 되지만, 섀도우의
"state"
섹션에서 해당 필드가 인덱스 처리된 경우에만 처리됩니다. (앞의 예에서 섀도우의 메타데이터 섹션의"palette"
필드도 인덱싱되지 않습니다.) - 등록되지 않은 디바이스
-
플릿 인덱싱은 레지스트리에 등록된 사물의
thingName
과 연결clientId
가 동일한 디바이스의 연결 상태를 인덱싱합니다. - 미등록 섀도우
-
UpdateThingShadow를 사용하여 AWS IoT 계정에 등록되지 않은 사물 이름을 사용하여 섀도우를 생성하는 경우이 섀도우의 필드는 인덱싱되지 않습니다. 이는 명명되지 않은 클래식 섀도우와 명명된 섀도우 모두에 적용됩니다.
- 숫자 값
-
레지스트리 혹은 섀도우 데이터가 서비스에서 숫자 값으로 인식되는 경우, 숫자 값으로 인덱스 처리합니다. 범위와 비교 연산자를 포함한 쿼리를 숫자 값에 형성할 수 있습니다(예:
"attribute.foo<5"
또는"shadow.reported.foo:[75 TO 80]"
). 숫자로 인식되려면 데이터의 값이 유효한 리터럴 형식 JSON 숫자여야 합니다. 값은 -2^53~2^53-1 범위의 정수, 선택적 지수 표기법이 있는 배정밀도 부동 소수점 또는 이러한 값만 포함하는 배열의 일부일 수 있습니다. - Null 값
-
Null 값은 인덱싱되지 않습니다.
- 최대값
-
집계 쿼리의 최대 사용자 정의 필드 수는 5개입니다.
집계 쿼리에 대해 요청된 최대 백분위수는 100입니다.
권한 부여
다음과 같이 AWS IoT 정책 작업에서 사물 인덱스를 Amazon 리소스 이름(ARN)으로 지정할 수 있습니다.
작업 | 리소스 |
---|---|
|
인덱스ARN(예: |
|
인덱스ARN(예: |
참고
플릿 인덱스를 쿼리할 권한이 있는 경우 전체 플릿에서 사물 데이터에 액세스할 수 있습니다.