AWS Lambda와 AWS DynamoDB를 활용한 데이터 저장 및 분석
1. 개요
AWS IoT 서비스를 활용하면 IoT 디바이스에서 수집한 데이터를 효율적으로 관리할 수 있습니다. 특히, AWS Lambda와 AWS DynamoDB를 활용하면 데이터를 서버 없이 실시간으로 처리하고 저장할 수 있습니다. 본 포스팅에서는 AWS IoT Core를 통해 수집된 온도 데이터를 AWS Lambda를 이용해 처리하고, DynamoDB에 저장한 후 이를 분석하는 방법을 설명합니다.
2. AWS IoT 시스템 아키텍처
아래는 IoT 디바이스에서 데이터를 수집하고 이를 분석하는 전체 아키텍처입니다.
- ESP32 IoT 디바이스: 온도 센서를 통해 주기적으로 데이터를 측정하고 MQTT 프로토콜을 이용해 AWS IoT Core로 전송합니다.
- AWS IoT Core: MQTT 메시지를 받아 AWS Lambda로 전달합니다.
- AWS Lambda: 데이터를 분석하고 AWS DynamoDB에 저장하는 역할을 합니다.
- AWS DynamoDB: 수집된 데이터를 저장하고 분석을 위해 활용합니다.
3. ESP32 IoT 디바이스 설정
ESP32는 AWS IoT Core로 데이터를 전송하는 역할을 합니다. 이를 위해 ESP-IDF 및 AWS IoT Device SDK for Embedded C를 활용합니다.
3.1 ESP32 MQTT 연결 코드
ESP32에서 MQTT를 사용하여 온도 데이터를 AWS IoT Core로 전송하는 코드입니다.
#include <stdio.h>
#include "esp_log.h"
#include "nvs_flash.h"
#include "mqtt_client.h"
static const char *TAG = "MQTT_EXAMPLE";
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
ESP_LOGI(TAG, "MQTT event received");
}
void app_main(void) {
esp_log_level_set("*", ESP_LOG_INFO);
nvs_flash_init();
esp_mqtt_client_config_t mqtt_cfg = {
.uri = "mqtts://YOUR_AWS_IOT_ENDPOINT",
.cert_pem = "YOUR_AWS_ROOT_CA_CERT",
.client_cert_pem = "YOUR_AWS_DEVICE_CERT",
.client_key_pem = "YOUR_AWS_DEVICE_PRIVATE_KEY"
};
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
esp_mqtt_client_start(client);
while (1) {
float temperature = 25.0 + (rand() % 10); // 가상의 온도 데이터 생성
char payload[50];
snprintf(payload, sizeof(payload), "{\"temperature\": %.2f}", temperature);
esp_mqtt_client_publish(client, "iot/temp", payload, 0, 1, 0);
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
}
이 코드에서는 ESP32가 주기적으로 온도를 측정하여 AWS IoT Core로 MQTT 메시지를 전송하는 방식으로 동작합니다.
4. AWS Lambda를 활용한 데이터 처리
AWS IoT Core에서 MQTT 메시지를 구독한 후 AWS Lambda 함수를 호출하여 데이터를 DynamoDB에 저장할 수 있도록 설정해야 합니다.
4.1 AWS Lambda 함수 작성
다음은 AWS Lambda에서 MQTT 데이터를 받아 AWS DynamoDB에 저장하는 Python 코드입니다.
import json
import boto3
from datetime import datetime
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('IoT_Temperature_Data')
def lambda_handler(event, context):
for record in event['Records']:
payload = json.loads(record['body'])
temperature = payload.get('temperature')
if temperature is None:
return {
'statusCode': 400,
'body': json.dumps('Invalid Data')
}
item = {
'device_id': 'ESP32',
'timestamp': datetime.utcnow().isoformat(),
'temperature': temperature
}
table.put_item(Item=item)
return {
'statusCode': 200,
'body': json.dumps('Data stored successfully')
}
이 함수는 AWS IoT Core의 Rule Engine을 통해 MQTT 메시지를 수신하고, 이를 AWS DynamoDB에 저장하는 역할을 합니다.
- AWS DynamoDB 테이블 생성
AWS DynamoDB에 데이터를 저장하기 위해 먼저 테이블을 생성해야 합니다.
5.1 DynamoDB 테이블 생성
- AWS 콘솔에서 DynamoDB 서비스로 이동합니다.
- 새 테이블 생성(Create Table) 을 선택합니다.
- 테이블 이름(Table Name): IoT_Temperature_Data
- 파티션 키(Partition Key): device_id (String)
- 정렬 키(Sort Key): timestamp (String)
이렇게 설정하면 특정 디바이스의 데이터를 시간순으로 저장할 수 있습니다.
6. DynamoDB에서 데이터 조회 및 분석
저장된 데이터를 조회하고 분석하는 방법을 설명하겠습니다.
6.1 저장된 데이터 조회
Python을 이용하여 DynamoDB에서 저장된 데이터를 조회할 수 있습니다.
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('IoT_Temperature_Data')
response = table.scan()
for item in response['Items']:
print(item)
이 코드를 실행하면 저장된 온도 데이터를 확인할 수 있습니다.
6.2 온도 이상 감지
Lambda를 활용하여 온도가 임계값(예: 30°C 이상) 을 초과할 경우 알림을 보내도록 설정할 수도 있습니다.
def lambda_handler(event, context):
for record in event['Records']:
payload = json.loads(record['body'])
temperature = payload.get('temperature')
if temperature > 30:
print("Warning: High Temperature Detected!", temperature)
return {
'statusCode': 200,
'body': json.dumps('Monitoring Complete')
}
이렇게 하면 온도가 30°C를 초과하는 경우 경고 메시지를 출력할 수 있습니다.
7. 결론
본 포스팅에서는 AWS Lambda와 AWS DynamoDB를 활용하여 IoT 데이터를 저장하고 분석하는 방법을 설명하였습니다. 정리하면 다음과 같습니다.
- ESP32 디바이스에서 온도를 측정하고 MQTT를 통해 AWS IoT Core로 전송함.
- AWS IoT Core에서 수집된 데이터를 AWS Lambda로 전달함.
- AWS Lambda에서 데이터를 분석하고 AWS DynamoDB에 저장함.
- DynamoDB에서 저장된 데이터를 조회하고 분석할 수 있음.
- 특정 온도 이상이 감지되면 경고를 보낼 수 있음.
이러한 구조를 활용하면 IoT 데이터를 실시간으로 처리하고 분석하는 강력한 시스템을 구축할 수 있습니다.
'AWS IoT' 카테고리의 다른 글
ESP32 IDF, MCU 기반 AWS IoT 디바이스 설정 (0) | 2025.04.03 |
---|---|
IoT 디바이스의 역할 및 요구사항 정의 (0) | 2025.04.02 |
AWS IoT Rule Engine을 활용한 데이터 처리 (0) | 2025.03.31 |
AWS IoT Policy 설정: 디바이스와 서버 간의 권한 제어 (0) | 2025.03.30 |
AWS IoT 디바이스 자동 등록: Just-in-Time Provisioning과 Bulk Provisioning (0) | 2025.03.29 |