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 생성
- AWS 콘솔에서 AWS IoT Core로 이동
- Rules(규칙) 메뉴 선택 후 'Create a rule(규칙 생성)' 클릭
- Rule Name(규칙 이름) 입력 (예:
TemperatureFilterRule) - SQL 쿼리 입력
sensor/temperature주제(Topic)에서 데이터를 수신temperature값이 30을 초과하는 경우만 처리
SELECT * FROM 'sensor/temperature' WHERE temperature > 30- Rule Action 추가
- Lambda 호출: AWS Lambda를 호출하여 이메일 알림 또는 데이터 저장 처리
- DynamoDB 저장: 필터링된 데이터를 저장하여 추후 분석
- IAM 역할(Role) 연결
- AWS IoT Core가 Lambda 또는 DynamoDB에 접근할 수 있도록 적절한 IAM 역할을 생성하고 연결
- 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), ¶ms);
}
- 온도 데이터를
sensor/temperature주제로 AWS IoT Core로 전송 - AWS IoT Rule을 통해 30도를 초과하는 데이터만 필터링
5. AWS IoT Rules Engine 테스트 및 검증
- ESP32에서 온도 데이터 전송
- AWS IoT 콘솔에서 로그 확인
- AWS Lambda가 호출되었는지 확인
- SNS를 통해 알림이 정상적으로 전송되는지 검증
6. 결론
AWS IoT Rules Engine을 활용하면 IoT 디바이스에서 수집한 데이터를 효과적으로 필터링하고 다양한 AWS 서비스와 연계할 수 있습니다. 본 글에서는 ESP32로부터 온도 데이터를 전송하고, 특정 조건을 만족하는 경우 AWS Lambda를 호출하여 알림을 전송하는 예제를 설명하였습니다. AWS IoT Rules Engine을 활용하면 실시간 데이터 처리를 자동화하고 효율적으로 IoT 시스템을 운영할 수 있습니다.
ESP32도 함께 공부하세요.
https://coding-by-head.tistory.com/category/ESP32%20IDF
'ESP32 IDF' 카테고리의 글 목록
임베디드 소프트웨어 개발을 위한 팁과 정보를 제공하는 '소프트웨어 공장'입니다. 함께 성장하는 개발 친구가 되어드릴게요!
coding-by-head.tistory.com
'Edge AI & Cloud > AWS IoT Ecosystem' 카테고리의 다른 글
| AWS IoT 모니터링 구축 가이드: CloudWatch 경보와 SNS 알림 자동화 (ESP32) (0) | 2025.04.11 |
|---|---|
| AWS Lambda와 IoT Core 연동 가이드: ESP32 이상 온도 감지 자동 알림 시스템 구축 (0) | 2025.04.10 |
| AWS IoT Device Shadow 완벽 가이드: ESP32 원격 제어 및 센싱 주기 조절하기 (0) | 2025.04.08 |
| AWS IoT OTA 업데이트 완벽 가이드: ESP32 펌웨어 원격 배포 및 Jobs 활용법 (0) | 2025.04.07 |
| AWS IoT Shadow 완벽 가이드: ESP32 상태 관리 및 Python 원격 제어 구현 (0) | 2025.04.06 |