⭐️ Amazon Web Service/AWS IoT

[IoT Core 무작정 따라하기 Step#2] IoT Core 데이터 핸들링하기

mini_world 2021. 10. 18. 19:44
목차 접기

 

안녕하세요 🤗
이전 포스팅을 통해 가짜 Device에서 MQTT로 IoT Core 로 보내는것까지 진행을 했습니다. 

 

[IoT Core 무작정 따라하기 #1] IoT Core에 MQTT 데이터 보내기

안녕하세요 😊😊😊 이번 시리즈는 간단하고도 어려운 Amazon IoT Core 시간입니다. 설명도 중간중간 진행하겠지만, 가장 기본적으로는 Step By Step으로 따라하면 무조건 성공할 수 있도록 단계별로

1mini2.tistory.com

이번 포스팅에서는 IoT Core로 들어오는 데이터를 어떻게 핸들링하는지에 대해서 다뤄보려고 합니다.

데이터가 흘러가는 Flow 를 살펴보자면,
IoT Core에 들어온 데이터는 기본적으로 우리가 생성할 규칙에 의해 어떻게 처리될 것인지 정해집니다.
그 규칙은 SQL문으로 들어오는 데이터를 쿼리하고, 그 쿼리 결과값을 내가 설정한 서비스에 전달하게 됩니다.

이전 포스팅에서 데이터를 AWS IoT Core 까지 넣었으니,
이번 포스팅은 SQL문으로 쿼리하여 값을 다른서비스에 전달해보도록 하겠습니다.
고고고🎉🎉


[아키텍쳐]


[목차]

1. 첫번째 규칙 생성 - 메세지를 AWS IoT 주제에 개시
2. 두번째 규칙 생성 전, Amazon S3 생성
3. 두번째 규칙 생성 전, Kinesis Firehose 생성
4. 두번째 규칙 생성 - Amazon Kinesis Firehose  스트림으로 메세지 전송


[실습시작]


1. 첫번째 규칙 생성 - 메세지를 AWS IoT 주제에 개시

먼저 AWS IoT 콘솔 왼쪽 네비게이션바에서 "규칙"을 선택합니다.
규칙 생성을 클릭합니다.

규칙 이름을 넣습니다.

규칙 쿼리를 작성합니다.
IoT Core는 이 쿼리를 통해 데이터를 변환하거나 필터링 할 수 있습니다.
쿼리 결과가 뒤에 작업에 보내지게 됩니다. (아래 SQL 복붙 해서 쓰세요!!)

SELECT Unique_id.status, Unique_id.records_time, Unique_id.device_id, get((Select VALUE flow from Measures_values),0) as flow, get((Select VALUE temperature from Measures_values),1) as temperature, get((Select VALUE humidity from Measures_values),2) as humidity, get((Select VALUE vibration from Measures_values),3) as vibration
FROM "sdk/test/Python"

쿼리를 작성했으니, "작업 추가"를 클릭하여 이 쿼리 결과로 어떤 작업을 할건지 설정해줍시다.

작업선택 목록에서 "메세지를 AWS IoT 주제에 개시"를 클릭하고, 스크롤 다운 하여 작업구성을 클릭합니다.
이후 다음 페이지에서 주제를 작성하고, 역할 생성 후 작업을 추가해줍시다.

이렇게 작업 설정이 완료 되었다면, 규칙생성을 클릭합니다.

네! 규칙이 생성되었네요.

결과 볼까요? 😊
AWS IoT Core 콘솔, 네비게이션바 "테스트" 클릭 후, 규칙에 설정했던 토픽(sample-data)을 입력하고 구독합니다.
그러면 이제 아래 데이터 포멧이 바뀌어서 올라오는게 보이죠!!

 

IoT Core로 들어오는 데이터는 규칙(Rule)에 의해 데이터를 가공하거나 적재할 수 있습니다.

위에서 우리가 생성했던, SQL문은 원본 데이터를 평탄화 하기 위한 쿼리입니다.
데이터를 평탄화 해놓으면 다른 서비스와 좀더 쉽게 통합해서 사용할 수 있습니다.

원본데이터 규칙 쿼리 결과 데이터

{
  "Unique_id": {
    "status": "Up",
    "records_time": "2021-10-18 08:42:12.079327",
    "device_id": "Device_02"
  },
  "Measures_values": [
    {
      "flow": "73"
    },
    {
      "temperature": "18"
    },
    {
      "humidity": "72"
    },
    {
      "vibration": "137"
    }
  ]
}

{
  "status": "Up",
  "records_time": "2021-10-18 08:42:12.079327",
  "device_id": "Device_02",
  "flow": "73",
  "temperature": "18",
  "humidity": "72",
  "vibration": "137"
}

네, 이제 쿼리 결과를 얻었으니, 두번째 규칙을 만들러 갑시다.
그 전에 두번째 규칙에 연결해줄 Amazon S3, Kinesis Firehose를 생성합시다.

 

2. 두번째 규칙 생성 전, Amazon S3 생성

 

AWS S3 콘솔 접속 후 "버킷만들기"를 클릭합니다.

버킷의 이름을 넣습니다.
나머지는 전부 그대로 두고, 아래로 스크롤 다운 하여 "버킷만들기"를 클릭합니다.

새로운 버킷이 만들어졌네요! 다음 단계로 넘어갑시다!!

 

3. 두번째 규칙 생성 전, Kinesis Firehose 생성

Kinesis 서비스는 실시간 수집, 처리 및 분석 서비스입니다. (Kinesis란?)
Kinesis 는 4가지 종류로 제공되는데, 그중에 오늘은 Kinesis Data Firehose를 사용합니다.

AWS Kinesis 콘솔 첫번째 페이지 입니다. 
Kinesis Data Firehose를 선택하고 "전송 스트림 생성"을 클릭합니다.

Kinesis Firehose를 아래 캡쳐 내용을 보면서 생성하세요!

Kinesis Firehose도 생성이 완료 되었습니다!

 

4. 두번째 규칙 생성 - Amazon Kinesis Firehose  스트림으로 메세지 전송

이제 사전작업이 모두 완료 되었으니, 두번째 규칙을 생성해봅시다!

AWS IoT 콘솔에서, 왼쪽 네비게이션바 "규칙"을 클릭합니다.
그리고 왼쪽 위 "생성"버튼을 클릭합니다.

규칙 이름을 넣습니다.

그리고, 위에서 작성했던것과 똑같은 쿼리를 넣어주면 됩니다.

SELECT Unique_id.status, Unique_id.records_time, Unique_id.device_id, get((Select VALUE flow from Measures_values),0) as flow, get((Select VALUE temperature from Measures_values),1) as temperature, get((Select VALUE humidity from Measures_values),2) as humidity, get((Select VALUE vibration from Measures_values),3) as vibration
FROM "sdk/test/Python"

쿼리를 작성했으니, "작업 추가"를 클릭하여 이 쿼리 결과로 어떤 작업을 할건지 설정해줍시다.

작업 선택 목록에서 "Amazon Kinesis Firehose 스트림으로 메시지 전송"을 선택하고 "작업구성"을 클릭합니다.

위 단계에서 만들었던 Kinesis Firehose를 선택하고, 역할을 새로 생성하고 작업추가를 클릭합니다.

이제  "규칙생성"을 클릭합니다!

두번째 규칙, Kinesis로 데이터를 보내는 규칙을 생성 완료했습니다.
데이터가 정상적으로 들어오는지 확인해봅시다.

[ Device -----> IoT Core -----> Kinesis Firehose ----->  S3 ] 구성이니까,
Amazon S3에 데이터가 적재되고있다면 성공이겠죠!?

Amazon S3 콘솔에 접속해서, 아까 만든 버킷을 확인해봅시다!
오! 🤗🤗🤗🤗 이렇게 데이터가 들어와있네요!! 

어떻게 적재되고있는지도 확인해봅시다.
해당 파일을 선택하고, 오른쪽 상단 "작업" -> "S3 Select를 사용한 쿼리"를 클릭합니다.

입력 형식 출력 형식 모두 Json으로 두고, 쿼리해보면! 결과가 잘 나오네요 😭😭😭😭

고생하셨습니다! 

이제, 다음 포스팅으로 가서 간단한 데이터 분석&시각화를 해봅시다!!!

 

다음포스팅 가기!!!


728x90