AWS IoT

AWS IoT Rules Engine을 이용한 데이터 필터링 및 처리

임베디드 친구 2025. 4. 9. 21:00
728x90
반응형

AWS IoT Rules Engine을 이용한 데이터 필터링 및 처리

1. 개요

AWS IoT Rules Engine은 AWS IoT Core에서 디바이스로부터 수집된 데이터를 필터링하고 다양한 AWS 서비스로 라우팅하는 역할을 합니다. 이를 활용하면 특정 조건을 만족하는 데이터만 저장하거나, AWS Lambda를 호출하여 데이터 처리를 수행할 수 있습니다.

이 글에서는 AWS IoT Rules Engine을 이용하여 AWS IoT 디바이스(ESP32)가 수집한 온도 데이터를 필터링하고, 특정 임계값을 초과할 경우 AWS Lambda 함수를 호출하여 알림을 보내는 과정을 설명하겠습니다.

2. AWS IoT Rules Engine 개념

2.1 Rules Engine의 기능

AWS IoT Rules Engine은 SQL 기반의 규칙을 정의하여 다음과 같은 작업을 수행할 수 있습니다.

  • 특정 주제(Topic)로 전송된 메시지를 필터링
  • 데이터를 변환하여 다른 서비스로 전송
  • AWS Lambda, Amazon DynamoDB, Amazon SNS, Amazon S3 등과 연동
  • 특정 조건에 맞는 데이터만 처리하도록 규칙 설정

2.2 AWS IoT Rule의 주요 구성 요소

  • SQL 쿼리: MQTT 메시지에서 필요한 데이터를 선택하고 필터링하는 역할을 합니다.
  • Rule Actions: 필터링된 데이터를 기반으로 실행할 작업을 지정합니다. 예를 들어, Lambda 호출, DynamoDB 저장, SNS 알림 등이 가능합니다.
  • IAM 역할(Role): Rule이 다른 AWS 서비스에 접근할 수 있도록 권한을 부여합니다.

3. AWS IoT Rules Engine 설정

3.1 AWS IoT Rule 생성

  1. AWS 콘솔에서 AWS IoT Core로 이동

  2. Rules(규칙) 메뉴 선택 후 'Create a rule(규칙 생성)' 클릭

  3. Rule Name(규칙 이름) 입력 (예: TemperatureFilterRule)

  4. SQL 쿼리 입력

    SELECT * FROM 'sensor/temperature' WHERE temperature > 30
    • sensor/temperature 주제(Topic)에서 데이터를 수신
    • temperature 값이 30을 초과하는 경우만 처리
  5. Rule Action 추가

    • Lambda 호출: AWS Lambda를 호출하여 이메일 알림 또는 데이터 저장 처리
    • DynamoDB 저장: 필터링된 데이터를 저장하여 추후 분석
  6. IAM 역할(Role) 연결

    • AWS IoT Core가 Lambda 또는 DynamoDB에 접근할 수 있도록 적절한 IAM 역할을 생성하고 연결
  7. Rule 저장 및 활성화

3.2 AWS Lambda 함수 작성 (Python)

아래는 온도 데이터가 30도를 초과할 경우 이메일을 전송하는 Lambda 함수 예제입니다.

import json
import boto3

def lambda_handler(event, context):
    sns_client = boto3.client('sns')
    topic_arn = 'arn:aws:sns:us-east-1:123456789012:TemperatureAlerts'

    for record in event['Records']:
        payload = json.loads(record['body'])
        temperature = payload.get('temperature', 0)

        if temperature > 30:
            message = f"경고: 온도가 {temperature}도로 기준을 초과하였습니다."
            sns_client.publish(TopicArn=topic_arn, Message=message)

    return {'statusCode': 200, 'body': json.dumps('Lambda 실행 완료')}
  • AWS SNS(알림 서비스)를 이용하여 특정 구독자에게 경고 메시지를 전송
  • AWS IoT Rule을 통해 Lambda 함수가 트리거됨

4. ESP32 AWS IoT 디바이스 예제

ESP32는 센서를 통해 온도 데이터를 측정하고, 이를 AWS IoT Core로 전송합니다. AWS IoT Device SDK for Embedded C를 활용하여 개발합니다.

4.1 ESP32에서 온도 데이터 전송 코드

#include <stdio.h>
#include "aws_iot_mqtt_client_interface.h"

#define AWS_IOT_ENDPOINT "your-aws-iot-endpoint"
#define CLIENT_ID "ESP32_Temperature_Sensor"
#define TOPIC "sensor/temperature"

void publish_temperature(AWS_IoT_Client *client) {
    char payload[100];
    float temperature = 32.5; // 예제 값
    sprintf(payload, "{\"temperature\": %.2f}", temperature);

    IoT_Publish_Message_Params params;
    params.qos = QOS0;
    params.payload = (void *) payload;
    params.payloadLen = strlen(payload);

    aws_iot_mqtt_publish(client, TOPIC, strlen(TOPIC), &params);
}
  • 온도 데이터를 sensor/temperature 주제로 AWS IoT Core로 전송
  • AWS IoT Rule을 통해 30도를 초과하는 데이터만 필터링

5. AWS IoT Rules Engine 테스트 및 검증

  1. ESP32에서 온도 데이터 전송
  2. AWS IoT 콘솔에서 로그 확인
  3. AWS Lambda가 호출되었는지 확인
  4. SNS를 통해 알림이 정상적으로 전송되는지 검증

6. 결론

AWS IoT Rules Engine을 활용하면 IoT 디바이스에서 수집한 데이터를 효과적으로 필터링하고 다양한 AWS 서비스와 연계할 수 있습니다. 본 글에서는 ESP32로부터 온도 데이터를 전송하고, 특정 조건을 만족하는 경우 AWS Lambda를 호출하여 알림을 전송하는 예제를 설명하였습니다. AWS IoT Rules Engine을 활용하면 실시간 데이터 처리를 자동화하고 효율적으로 IoT 시스템을 운영할 수 있습니다.

반응형