📊 āļŠāļĢāđ‰āļēāļ‡ Real-time Dashboard āļ”āđ‰āļ§āļĒ Kinesis + Lambda + DynamoDB + WebSocket API

Sharing is caring!

āļšāļ—āļ™āļģ

āđƒāļ™āđ‚āļĨāļāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļĒāļļāļ„āļ›āļąāļˆāļˆāļļāļšāļąāļ™ āļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§āļ„āļ·āļ­āļ—āļļāļāļŠāļīāđˆāļ‡ â€” āļĢāļ°āļšāļš Real-time Dashboard āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļ•āļīāļ”āļ•āļēāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩ āđ€āļŠāđˆāļ™ āļĒāļ­āļ”āļ‚āļēāļĒ, āļāļēāļĢāļˆāļĢāļēāļˆāļĢ, IoT Sensors āļŦāļĢāļ·āļ­āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļšāļš āđāļĨāļ°āļšāļ™ AWS āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ Dashboard āđāļšāļš Real-time āđ„āļ”āđ‰āļ‡āđˆāļēāļĒ āđ‚āļ”āļĒāđƒāļŠāđ‰āļšāļĢāļīāļāļēāļĢ Kinesis + Lambda + DynamoDB + WebSocket API āļĢāđˆāļ§āļĄāļāļąāļ™

1. āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđ‚āļ”āļĒāļĢāļ§āļĄāļ‚āļ­āļ‡āļĢāļ°āļšāļš

āļĢāļ°āļšāļš Real-time Dashboard āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ 4 āļŠāđˆāļ§āļ™āļŦāļĨāļąāļāļ”āļąāļ‡āļ™āļĩāđ‰:

  1. Kinesis Data Stream – āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĄāļēāļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡
  2. Lambda Function – āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļ Stream
  3. DynamoDB – āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļ–āļēāļ™āļ°āļĨāđˆāļēāļŠāļļāļ”
  4. 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

Leave a Reply

āļ­āļĩāđ€āļĄāļĨāļ‚āļ­āļ‡āļ„āļļāļ“āļˆāļ°āđ„āļĄāđˆāđāļŠāļ”āļ‡āđƒāļŦāđ‰āļ„āļ™āļ­āļ·āđˆāļ™āđ€āļŦāđ‡āļ™ āļŠāđˆāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļģāđ€āļ›āđ‡āļ™āļ–āļđāļāļ—āļģāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļŦāļĄāļēāļĒ *