AWS IoT 서버에서 Amazon SNS 및 AWS CloudWatch와 연동하여 알림 전송
IoT 시스템에서는 실시간으로 디바이스 상태를 모니터링하고 이상이 감지되었을 때 신속하게 대응하는 것이 중요합니다. AWS IoT 서버에서는 AWS CloudWatch 및 Amazon SNS(Simple Notification Service)와 연동하여 알림을 자동으로 전송할 수 있습니다. 본 포스팅에서는 AWS IoT Core에서 수집한 온도 데이터를 AWS CloudWatch에서 모니터링하고, 특정 임계값을 초과할 경우 Amazon SNS를 통해 사용자에게 알림을 전송하는 방법을 설명하겠습니다.
1. AWS CloudWatch와 Amazon SNS 개요
1.1 AWS CloudWatch
AWS CloudWatch는 AWS 리소스 및 애플리케이션에서 발생하는 로그와 지표를 수집 및 모니터링하는 서비스입니다. AWS IoT Core와 연동하여 디바이스에서 발생하는 데이터를 실시간으로 확인하고 특정 조건을 충족하면 경고를 생성할 수 있습니다.
1.2 Amazon SNS
Amazon SNS는 메시지 게시/구독 서비스로, 특정 이벤트 발생 시 다양한 방식(SMS, 이메일, Lambda 등)으로 알림을 전송할 수 있습니다. AWS IoT Core에서 특정 조건이 충족되면 CloudWatch 경보를 발생시키고, 이를 기반으로 SNS를 통해 사용자에게 알림을 전송할 수 있습니다.
2. AWS IoT Core에서 데이터 수집 및 CloudWatch 연동 설정
2.1 AWS IoT Core 설정
- AWS IoT 콘솔 접속: AWS 콘솔에서 AWS IoT Core로 이동합니다.
- Thing(디바이스) 등록:
Thing
을 생성하고 인증서를 발급받습니다. - MQTT 주제 설정: 디바이스에서 온도 데이터를 AWS IoT Core로 전송할 주제를 생성합니다.
- AWS IoT Rule Engine 설정: 수집된 데이터를 CloudWatch에 전달하기 위해 AWS IoT Rule을 설정합니다.
CREATE RULE temperature_monitoring
WHEN data FROM 'iot/device/temperature'
WHERE temperature > 30
SEND TO cloudwatch('iot/temperature_alerts')
3. AWS CloudWatch에서 경보(Alarm) 생성
- AWS CloudWatch 콘솔 접속: AWS 콘솔에서 CloudWatch로 이동합니다.
- 메트릭 생성: AWS IoT Rule을 통해 전송된 온도 데이터를 CloudWatch Metric으로 저장합니다.
- 알람(Alarm) 설정:
iot/temperature_alerts
지표를 선택합니다.- 특정 임계값(예: 30도 초과) 설정 후 SNS 주제를 연결합니다.
- 알림 전송을 위한 Amazon SNS를 선택합니다.
4. Amazon SNS를 이용한 알림 설정
4.1 Amazon SNS 주제 생성 및 구독
- SNS 콘솔 접속: AWS 콘솔에서 Amazon SNS로 이동합니다.
- 주제(Topic) 생성:
iot-temperature-alerts
주제를 생성합니다. - 구독(Subscription) 추가:
- 이메일 또는 SMS를 통해 알림을 받을 수 있도록 설정합니다.
iot-temperature-alerts
주제에 이메일을 구독하고, 확인 이메일을 통해 구독을 활성화합니다.
5. ESP32 디바이스에서 온도 데이터 전송 (ESP-IDF 및 AWS IoT SDK 사용)
ESP32 디바이스에서는 AWS IoT Core로 MQTT 메시지를 전송합니다. 예제 코드는 ESP-IDF 및 AWS IoT Device SDK for Embedded C를 사용하여 작성됩니다.
5.1 ESP32 코드 구현 (온도 데이터 전송)
#include <stdio.h>
#include "aws_iot_mqtt_client_interface.h"
#define MQTT_HOST "your-iot-endpoint.amazonaws.com"
#define MQTT_PORT 8883
#define TOPIC "iot/device/temperature"
void publish_temperature(AWS_IoT_Client *client) {
char payload[50];
float temperature = read_temperature_sensor(); // 온도 센서 데이터 읽기
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);
}
6. AWS IoT 서버에서 수집된 데이터 처리 (Python 예제)
AWS IoT Core에서 수집된 데이터를 분석하고 AWS SNS를 통해 경고를 전송하는 Python 코드를 작성합니다.
6.1 AWS Boto3를 이용한 SNS 알림 전송
import boto3
import json
def send_sns_notification(message):
sns_client = boto3.client('sns')
topic_arn = "arn:aws:sns:your-region:your-account-id:iot-temperature-alerts"
response = sns_client.publish(
TopicArn=topic_arn,
Message=json.dumps({'default': message}),
MessageStructure='json'
)
print("SNS Notification Sent!", response)
6.2 Lambda 함수로 자동화
AWS Lambda를 활용하여 특정 조건이 충족되었을 때 자동으로 SNS 알림을 전송할 수 있습니다. Lambda 함수는 CloudWatch에서 이벤트를 감지하고 SNS를 통해 알림을 전송합니다.
import json
import boto3
def lambda_handler(event, context):
sns_client = boto3.client('sns')
topic_arn = "arn:aws:sns:your-region:your-account-id:iot-temperature-alerts"
for record in event['Records']:
message = record['Sns']['Message']
sns_client.publish(
TopicArn=topic_arn,
Message=message
)
return {
'statusCode': 200,
'body': json.dumps('SNS alert sent successfully!')
}
7. 결론
본 포스팅에서는 AWS IoT Core에서 수집된 온도 데이터를 AWS CloudWatch와 Amazon SNS를 이용하여 모니터링하고, 특정 임계값을 초과하면 자동으로 알림을 전송하는 방법을 설명하였습니다. AWS IoT와 CloudWatch, SNS를 연동하면 실시간으로 IoT 디바이스 상태를 관리할 수 있으며, 필요에 따라 Lambda 함수를 추가하여 더 정교한 알림 시스템을 구축할 수도 있습니다.
이제 AWS IoT 서버와 ESP32 디바이스를 연동하여 보다 스마트한 IoT 환경을 구축해 보시기 바랍니다.
'AWS IoT' 카테고리의 다른 글
AWS QuickSight, Grafana를 활용한 실시간 데이터 시각화 (0) | 2025.04.13 |
---|---|
AWS Kinesis, AWS S3를 이용한 데이터 수집 (0) | 2025.04.12 |
AWS Lambda를 활용한 이벤트 기반 자동화 (이상 온도 감지 및 알림) (0) | 2025.04.10 |
AWS IoT Rules Engine을 이용한 데이터 필터링 및 처리 (0) | 2025.04.09 |
AWS IoT Device Shadow 활용: 온도 센싱 주기 및 시작/종료 관리 (0) | 2025.04.08 |