AWS IoT

AWS IoT Rule Engine을 활용한 데이터 처리

임베디드 친구 2025. 3. 31. 09:53
728x90
반응형

AWS IoT Rule Engine을 활용한 데이터 처리

AWS IoT는 사물 인터넷(IoT) 디바이스가 클라우드와 효율적으로 상호작용할 수 있도록 다양한 기능을 제공합니다. 그중 AWS IoT Rule Engine은 IoT 디바이스에서 수집된 데이터를 필터링하고 변환하여 다른 AWS 서비스로 전달하는 역할을 합니다. 본 포스팅에서는 AWS IoT Rule Engine의 개념과 활용 방법을 설명하고, ESP32 IDF와 AWS IoT Device SDK for Embedded C를 이용하여 데이터를 AWS IoT Core로 전송하는 예제, 그리고 Python을 활용한 AWS IoT Rule Engine 설정을 다루겠습니다.


1. AWS IoT Rule Engine이란?

AWS IoT Rule Engine은 MQTT 메시지를 실시간으로 분석하고 이를 기반으로 다양한 AWS 서비스(S3, Lambda, DynamoDB, SNS, SQS 등)와 연동할 수 있는 기능을 제공합니다.

주요 기능

  • 메시지 필터링 및 변환: SQL 기반의 쿼리 언어를 사용하여 데이터를 필터링 및 변환
  • AWS 서비스 연동: AWS Lambda, DynamoDB, S3, SNS, SQS, Kinesis 등으로 데이터 전달
  • 멀티 액션 지원: 하나의 규칙에서 여러 개의 액션을 동시에 실행 가능
  • 데이터 프로세싱: JSON 형식의 데이터를 분석하고 변환하여 활용 가능

AWS IoT Rule Engine을 사용하면 IoT 디바이스에서 발생하는 데이터를 실시간으로 처리하고 필요한 작업을 자동으로 수행할 수 있습니다.


2. AWS IoT Rule Engine 구성 요소

AWS IoT Rule Engine은 다음과 같은 핵심 구성 요소로 이루어져 있습니다:

  • Rules(규칙): 특정 MQTT 토픽에서 수신한 메시지를 처리하는 SQL 기반 규칙
  • SQL Statements: 규칙에서 사용할 데이터 필터링 및 변환을 수행하는 SQL 쿼리
  • Actions(액션): 규칙을 통과한 데이터에 대해 수행할 작업 (예: Lambda 실행, DynamoDB 저장 등)
  • Error Action: 규칙 실행 중 오류가 발생했을 때 수행할 보조 작업

AWS IoT Rule Engine을 설정하면 IoT 디바이스에서 수집한 데이터를 원하는 형식으로 변환하고, 적절한 AWS 서비스로 전달할 수 있습니다.


3. ESP32 IDF를 이용한 AWS IoT Device 예제

AWS IoT Core에 데이터를 전송하는 IoT 디바이스 예제로 ESP32를 사용하여 온도 데이터를 전송하는 코드를 작성하겠습니다.

3.1 ESP32 개발 환경 설정

ESP32 개발을 위해 ESP-IDF와 AWS IoT Device SDK for Embedded C를 사용합니다.

  1. ESP-IDF 설치

    git clone --recursive https://github.com/espressif/esp-idf.git
    cd esp-idf
    ./install.sh
  2. AWS IoT Device SDK 설치

    git clone https://github.com/aws/aws-iot-device-sdk-embedded-C.git

3.2 MQTT를 이용한 데이터 전송 코드

#include "aws_iot_mqtt_client_interface.h"
#include "esp_log.h"

#define AWS_IOT_MQTT_HOST "<AWS_IOT_ENDPOINT>"
#define AWS_IOT_MQTT_PORT 8883
#define MQTT_TOPIC "iot/temperature"

void publish_temperature_data(float temperature) {
    char payload[100];
    sprintf(payload, "{\"temperature\": %.2f}", temperature);

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

    IoT_Error_t rc = aws_iot_mqtt_publish(&client, MQTT_TOPIC, strlen(MQTT_TOPIC), &params);
    if (rc == SUCCESS) {
        ESP_LOGI("MQTT", "Message published: %s", payload);
    }
}

위 코드에서는 ESP32가 온도 데이터를 MQTT를 통해 AWS IoT Core로 전송하는 기능을 구현하였습니다.


4. AWS IoT Rule Engine 설정 (Python 예제)

ESP32에서 수집한 데이터를 AWS Lambda로 전달하는 Rule Engine을 설정하겠습니다.

4.1 Rule 생성

import boto3

iot_client = boto3.client('iot')

rule_name = "TemperatureDataRule"

sql_query = "SELECT * FROM 'iot/temperature'"

actions = [
    {
        "lambda": {
            "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:ProcessTemperatureData"
        }
    }
]

response = iot_client.create_topic_rule(
    ruleName=rule_name,
    topicRulePayload={
        "sql": sql_query,
        "actions": actions,
        "ruleDisabled": False
    }
)
print("Rule Created Successfully")

위 코드는 iot/temperature MQTT 토픽에서 데이터를 수신하여 Lambda로 전달하는 규칙을 생성합니다.

4.2 Lambda 함수 코드 (Python)

import json

def lambda_handler(event, context):
    for record in event['Records']:
        payload = json.loads(record['body'])
        temperature = payload.get("temperature")
        print(f"Received Temperature Data: {temperature}")

    return {
        "statusCode": 200,
        "body": json.dumps("Data processed successfully!")
    }

Lambda 함수는 AWS IoT Rule Engine에서 전달받은 데이터를 출력하는 간단한 예제입니다.


5. 마무리

이 포스팅에서는 AWS IoT Rule Engine을 활용하여 ESP32에서 전송한 데이터를 AWS 서비스로 전달하는 방법을 설명하였습니다. AWS IoT Rule Engine을 활용하면 다양한 AWS 서비스와 IoT 디바이스를 연동할 수 있어 데이터 분석 및 자동화를 보다 쉽게 구현할 수 있습니다.

반응형