
āļāļāļāļģ
āđāļāđāļĨāļāļāļāļāļāđāļāļĄāļđāļĨāļĒāļļāļāļāļąāļāļāļļāļāļąāļ āļāļ§āļēāļĄāđāļĢāđāļ§āļāļ·āļāļāļļāļāļŠāļīāđāļ â āļĢāļ°āļāļ Real-time Dashboard āļāđāļ§āļĒāđāļŦāđāđāļĢāļēāļāļīāļāļāļēāļĄāļāđāļāļĄāļđāļĨāđāļāđāļāļąāļāļāļĩ āđāļāđāļ āļĒāļāļāļāļēāļĒ, āļāļēāļĢāļāļĢāļēāļāļĢ, IoT Sensors āļŦāļĢāļ·āļāļāļēāļĢāđāļāđāļāļēāļāļĢāļ°āļāļ āđāļĨāļ°āļāļ AWS āļāļļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļ Dashboard āđāļāļ Real-time āđāļāđāļāđāļēāļĒ āđāļāļĒāđāļāđāļāļĢāļīāļāļēāļĢ Kinesis + Lambda + DynamoDB + WebSocket API āļĢāđāļ§āļĄāļāļąāļ
1. āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄāđāļāļĒāļĢāļ§āļĄāļāļāļāļĢāļ°āļāļ
āļĢāļ°āļāļ Real-time Dashboard āļāļ°āļāļĢāļ°āļāļāļāļāđāļ§āļĒ 4 āļŠāđāļ§āļāļŦāļĨāļąāļāļāļąāļāļāļĩāđ:
- Kinesis Data Stream â āļĢāļąāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļāđāļēāļĄāļēāļāļĒāđāļēāļāļāđāļāđāļāļ·āđāļāļ
- Lambda Function â āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāļēāļ Stream
- DynamoDB â āļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļŠāļāļēāļāļ°āļĨāđāļēāļŠāļļāļ
- WebSocket API (API Gateway) â āļŠāđāļāļāđāļāļĄāļđāļĨāļāļąāļāđāļāļāđāļāļĒāļąāļ Dashboard āđāļāļāđāļĢāļĩāļĒāļĨāđāļāļĄāđ

2. āļāļēāļĢāļŠāļĢāđāļēāļ Kinesis Data Stream
āđāļĢāļīāđāļĄāļāđāļāļāđāļ§āļĒāļāļēāļĢāļŠāļĢāđāļēāļ Stream āļŠāļģāļŦāļĢāļąāļāļĢāļąāļāļāđāļāļĄāļđāļĨāļāļēāļāđāļŦāļĨāđāļāļāđāļāļĄāļđāļĨāļ āļēāļĒāļāļāļ āđāļāđāļ Application, IoT Device āļŦāļĢāļ·āļ API
aws kinesis create-stream \
--stream-name RealtimeDataStream \
--shard-count 1
āđāļĄāļ·āđāļāļŠāļĢāđāļēāļāļŠāļģāđāļĢāđāļ āļāļ°āļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāđāļāļĄāļđāļĨāđāļāđāļē Stream āđāļāđ āđāļāđāļ āļāļąāļ§āļāļĒāđāļēāļ JSON:
{
"deviceId": "sensor-01",
"temperature": 27.5,
"humidity": 66,
"timestamp": "2025-10-08T09:30:00Z"
}
3. āđāļāļĩāļĒāļ Lambda āđāļāļ·āđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāļēāļ Kinesis
Lambda āļāļ°āļāļģāļŦāļāđāļēāļāļĩāđāļāđāļēāļāļāđāļāļĄāļđāļĨāļāļēāļ Kinesis āđāļĨāļ°āļāļąāļāļāļķāļāļāđāļāļĄāļđāļĨāļĨāđāļēāļŠāļļāļāļĨāļāđāļ DynamoDB āļĢāļ§āļĄāļāļķāļāļŠāđāļāļāđāļāļĄāļđāļĨāļāļąāļāđāļāļāđāļāļĒāļąāļ WebSocket API āđāļāļ·āđāļāđāļāđāļ Dashboard āđāļāļāđāļĢāļĩāļĒāļĨāđāļāļĄāđ
// index.js
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
const apiGateway = new AWS.ApiGatewayManagementApi({
endpoint: 'your-websocket-api-id.execute-api.ap-southeast-1.amazonaws.com/prod'
});
exports.handler = async (event) => {
for (const record of event.Records) {
const payload = Buffer.from(record.kinesis.data, 'base64').toString('utf-8');
const data = JSON.parse(payload);
await dynamo.put({
TableName: 'SensorData',
Item: data
}).promise();
await apiGateway.postToConnection({
ConnectionId: 'your-connection-id',
Data: JSON.stringify(data)
}).promise();
}
return { statusCode: 200 };
};

4. āļāļēāļĢāļŠāļĢāđāļēāļ DynamoDB Table
āđāļāđ DynamoDB āļŠāļģāļŦāļĢāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāļŠāļāļēāļāļ°āļĨāđāļēāļŠāļļāļāļāļāļāđāļāđāļĨāļ°āļāļļāļāļāļĢāļāđāļŦāļĢāļ·āļ Record:
aws dynamodb create-table \
--table-name SensorData \
--attribute-definitions AttributeName=deviceId,AttributeType=S \
--key-schema AttributeName=deviceId,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
5. āļāļēāļĢāļŠāļĢāđāļēāļ WebSocket API āļāļ API Gateway
WebSocket API āđāļāđāļŠāļģāļŦāļĢāļąāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļ Dashboard āđāļāļāļąāđāļ Frontend āđāļĨāļ°āļĢāļąāļāļāđāļāļĄāļđāļĨāļāļąāļāđāļāļāļāļēāļ Lambda āđāļĄāļ·āđāļāļĄāļĩāļāđāļāļĄāļđāļĨāđāļŦāļĄāđāđāļāđāļēāļĄāļē
aws apigatewayv2 create-api \
--name "RealtimeDashboardAPI" \
--protocol-type WEBSOCKET \
--route-selection-expression "$request.body.action"
6. āļŠāļĢāđāļēāļ Frontend Dashboard āļāđāļ§āļĒ WebSocket
āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ React āļŠāļģāļŦāļĢāļąāļāđāļŠāļāļāļāđāļāļĄāļđāļĨāđāļāļāđāļĢāļĩāļĒāļĨāđāļāļĄāđāļāļēāļ WebSocket API:
// RealtimeDashboard.js
import React, { useEffect, useState } from "react";
function RealtimeDashboard() {
const [data, setData] = useState([]);
useEffect(() => {
const ws = new WebSocket("wss://your-websocket-api-id.execute-api.ap-southeast-1.amazonaws.com/prod");
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
setData((prev) => [message, ...prev]);
};
return () => ws.close();
}, []);
return (
Realtime Sensor Dashboard
{data.map((d, i) => (
{d.deviceId} - Temp: {d.temperature}°C - Humidity: {d.humidity}%
))}
);
}
export default RealtimeDashboard;
7. āļāļēāļĢāļāļģāļĨāļāļāļāļēāļĢāļŠāđāļāļāđāļāļĄāļđāļĨāđāļāđāļē Stream
āļāļļāļāļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāđāļāļĄāļđāļĨāļāļģāļĨāļāļāđāļāđāļē Kinesis āđāļāđāļāđāļ§āļĒāļāļģāļŠāļąāđāļ CLI āļŦāļĢāļ·āļ Script:
aws kinesis put-record \
--stream-name RealtimeDataStream \
--partition-key "sensor-01" \
--data '{"deviceId":"sensor-01","temperature":28,"humidity":64}'
āđāļĄāļ·āđāļāļāđāļāļĄāļđāļĨāļāļđāļāļŠāđāļāđāļāđāļēāđāļ āļĢāļ°āļāļāļāļ°āļāļąāļāđāļāļ Dashboard āđāļāļāđāļĢāļĩāļĒāļĨāđāļāļĄāđāļāļąāļāļāļĩ
8. āđāļāļīāđāļĄ Observability āļāđāļ§āļĒ CloudWatch
āļāļļāļāļŠāļēāļĄāļēāļĢāļāļāļđ Logs āļāļāļ Lambda āđāļĨāļ° Metrics āļāļāļ Kinesis āđāļāđāļāđāļēāļ Amazon CloudWatch āđāļāļ·āđāļāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļēāļĢāļāļģāļāļēāļāđāļāļ Real-time āđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāđāļĢāđāļ§āđāļāļāļēāļĢāļŠāđāļāļāđāļāļĄāļđāļĨ
9. āļŠāļĢāļļāļāļ āļēāļāļĢāļ§āļĄāļāļēāļĢāļāļģāļāļēāļ
āđāļĄāļ·āđāļāđāļāļ·āđāļāļĄāļāđāļāļāļļāļāļŠāđāļ§āļāđāļāđāļēāļāđāļ§āļĒāļāļąāļ āļāļ°āđāļāđāļĢāļ°āļāļ Dashboard āļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ Real-time āđāļāļĒāđāļĄāđāļĄāļĩ Server āđāļŦāđāļāļđāđāļĨ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļāļĒāļēāļĒāļĢāļ°āļāļāđāļāđāļāļąāļāđāļāļĄāļąāļāļī
- āļāđāļāļĄāļđāļĨāđāļāđāļēāļĄāļēāļāđāļēāļ Kinesis â Lambda
- āļāļąāļāļāļķāļāļŠāļāļēāļāļ°āļĨāđāļēāļŠāļļāļāđāļ DynamoDB
- āļŠāđāļāļāđāļāļĄāļđāļĨāđāļāļĒāļąāļāļāļđāđāđāļāđāļāđāļēāļ WebSocket API
ð āļāļāļāļ§āļēāļĄāđāļāļĒ King Pool
āļ āļēāļāļāļĢāļ°āļāļāļ: Kinesis, Lambda, DynamoDB, WebSocket, CloudWatch
āļāđāļēāļāļāđāļ: āļāļēāļĢāļāļģ Observability āļāđāļ§āļĒ CloudWatch, X-Ray āđāļĨāļ° Tracing