AWS IoT에서 DynamoDB로 Rules를 사용하여 데이터를 투입하면 Payload부가 데이터 변환되어 초조한 이야기

4895 단어 awsIoTDynamoDBAWS
AWS IoT를 통해 DynamoDB에 데이터를 제출합니다. 2015년 후반에 갑작스런 사양 변경을 한 것 같고, DynamoDB에 보존되는 패턴이 바뀌어 버렸기 때문에, 메모.

준비



AWS IoT 측 설정



Rules에서 DynamoDB쪽으로 흐르도록 해 둡니다.

Rules는 다음 설정을 유지합니다.


카테고리
내용


Query
SELECT * FROM '/test/#'

액션



DynamoDB 측 설정



다음 설정을 유지합니다.


카테고리
내용
유형


주 파티션 키
id
문자열

기본 정렬 키
timestamp
문자열


*timestamp는 수신 시간용

송부용 데이터



다음 데이터를 흘려 보겠습니다. 보내는 주제는 "/test/sensor_result"
{
  "sensor_id": 101,
  "temperature": 25.4,
  "humidity": 40.5,
  "timestamp": '2016-09-11T11:00:00'
}

송부 결과



데이터 송부를 하면 DynamoDB에 데이터가 투입되는데 이런 느낌으로 보낸 데이터가 payload_raw로 인코딩된 상태로 저장되어 버렸습니다. 이것으로는 투입한 데이터를 사용하려고 해도 사용할 수 없습니다. 조금 초조했습니다.
※ 참고로 payload_raw는 Base64로 인코딩되었습니다.



데이터를 얻으면 문제가 없었습니다.



아무것도 없는, Python등으로 데이터 취득했을 때에는 특히 문제 없게 표시되었습니다. DynamoDB 측에 표시 모드 같은 것이 있으면 초조하지 않고 끝났는데.

일단 확인하기 위해 Lambda에서 스크립트를 작성했습니다.
import boto3
import logging
from boto3.dynamodb.conditions import Key

logger = logging.getLogger()
logger.setLevel(logging.INFO)

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('AWSTest')

def handle_request(event, context):
    response = table.query(
        KeyConditionExpression=Key('id').eq('sensor_result')
    )
    logger.info("response: {}".format(response))

결과는 이런 느낌.
[INFO]  2016-09-11T13:08:27.232Z    d3c0e7af-7820-11e6-801d-230a9d8bdc12    response: {u'Count': 4, u'Items': [{u'timestamp': u'1473595931501', u'payload_raw': Binary('{
  "sensor_id": 101,
  "temperature": 25.4,
  "humidity": 40.5,
  "timestamp": \'2016-09-11T11:00:00\'
}')

좋은 웹페이지 즐겨찾기