🚀 āļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļš Full-stack Web App: React/Angular + API Gateway + Lambda + DynamoDB

Sharing is caring!

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

āđƒāļ™āļĒāļļāļ„āļ—āļĩāđˆāđ€āļ§āđ‡āļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļˆāļģāļ™āļ§āļ™āļĄāļēāļ āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļ–āļđāļāļ­āļ­āļāđāļšāļšāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ– â€œāļ‚āļĒāļēāļĒāļ•āļąāļ§āđ„āļ”āđ‰āļ‡āđˆāļēāļĒ” (Scalable), “āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ”āļđāđāļĨāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđ€āļ­āļ‡â€ (Serverless), āđāļĨāļ° â€œāļžāļąāļ’āļ™āļēāđ„āļ”āđ‰āļĢāļ§āļ”āđ€āļĢāđ‡āļ§â€ āļ§āļąāļ™āļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āļĄāļēāļ”āļđāļāļąāļ™āļ§āđˆāļē Developer āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļš Full-stack Web App āļ”āđ‰āļ§āļĒāđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ React / Angular āļšāļ™āļāļąāđˆāļ‡āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļš āđāļĨāļ° API Gateway + Lambda + DynamoDB āļšāļ™āļāļąāđˆāļ‡āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ

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

āļĢāļ°āļšāļš Full-stack āļ—āļĩāđˆāđ€āļĢāļēāļˆāļ°āļŠāļĢāđ‰āļēāļ‡āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ 4 āļŠāđˆāļ§āļ™āļŦāļĨāļąāļāļ”āļąāļ‡āļ™āļĩāđ‰:

  1. Frontend: React āļŦāļĢāļ·āļ­ Angular (Static Hosting āļšāļ™ S3 + CloudFront)
  2. Backend: AWS Lambda + API Gateway
  3. Database: DynamoDB (NoSQL Database)
  4. Authentication: AWS Cognito (āļ–āđ‰āļēāļĄāļĩāļœāļđāđ‰āđƒāļŠāđ‰āļĨāđ‡āļ­āļāļ­āļīāļ™)

2. āļŠāļĢāđ‰āļēāļ‡ Frontend āļ”āđ‰āļ§āļĒ React / Angular

āļŠāļģāļŦāļĢāļąāļšāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‰ React āđāļ•āđˆāđāļ™āļ§āļ„āļīāļ”āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļāļąāļš Angular āđ„āļ”āđ‰āđ€āļŠāđˆāļ™āļāļąāļ™ āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ”āđ‰āļ§āļĒāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ React:

npx create-react-app my-aws-webapp
cd my-aws-webapp
npm start
    

āļˆāļēāļāļ™āļąāđ‰āļ™āļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ src/api.js āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļš API Gateway:

// src/api.js
const API_URL = "https://your-api-id.execute-api.ap-southeast-1.amazonaws.com/prod";

export async function getItems() {
  const res = await fetch(`${API_URL}/items`);
  return res.json();
}

export async function addItem(data) {
  const res = await fetch(`${API_URL}/items`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(data)
  });
  return res.json();
}
    

3. āļŠāļĢāđ‰āļēāļ‡ API āļ”āđ‰āļ§āļĒ API Gateway + Lambda

API Gateway āļˆāļ°āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™ â€œāļ—āļēāļ‡āđ€āļ‚āđ‰āļē” āļ‚āļ­āļ‡āļ—āļļāļ Request āļˆāļēāļ Frontend āđāļĨāļ°āļˆāļ°āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡ AWS Lambda āļ‹āļķāđˆāļ‡āđ€āļĢāļēāļˆāļ°āđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ” Backend Logic āļ”āđ‰āļ§āļĒ Node.js āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ” Lambda āļŸāļąāļ‡āļāđŒāļŠāļąāļ™:

// index.js
const AWS = require("aws-sdk");
const dynamo = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event) => {
  const method = event.httpMethod;

  if (method === "GET") {
    const result = await dynamo.scan({ TableName: "ItemsTable" }).promise();
    return { statusCode: 200, body: JSON.stringify(result.Items) };
  }

  if (method === "POST") {
    const item = JSON.parse(event.body);
    await dynamo.put({ TableName: "ItemsTable", Item: item }).promise();
    return { statusCode: 200, body: JSON.stringify(item) };
  }

  return { statusCode: 400, body: "Unsupported method" };
};
    

4. āļ•āļąāđ‰āļ‡āļ„āđˆāļē DynamoDB Table

DynamoDB āđ€āļ›āđ‡āļ™ NoSQL Database āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļāļąāļšāļĢāļ°āļšāļšāđāļšāļš Serverless āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ Table āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļœāđˆāļēāļ™ AWS Console āļŦāļĢāļ·āļ­ CLI:

aws dynamodb create-table \
  --table-name ItemsTable \
  --attribute-definitions AttributeName=id,AttributeType=S \
  --key-schema AttributeName=id,KeyType=HASH \
  --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
    

5. āđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡ API Gateway āļāļąāļš Lambda

āļŦāļĨāļąāļ‡āļˆāļēāļāļŠāļĢāđ‰āļēāļ‡ Lambda āđāļĨāđ‰āļ§ āđƒāļŦāđ‰āđ€āļŠāļ·āđˆāļ­āļĄāļāļąāļš API Gateway āđ‚āļ”āļĒāļāļģāļŦāļ™āļ” Resource āđ€āļŠāđˆāļ™:

  • GET /items → āđ€āļĢāļĩāļĒāļāļŸāļąāļ‡āļāđŒāļŠāļąāļ™ Lambda āđ€āļžāļ·āđˆāļ­āļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
  • POST /items → āđ€āļĢāļĩāļĒāļāļŸāļąāļ‡āļāđŒāļŠāļąāļ™ Lambda āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļ‚āđ‰āļ­āļĄāļđāļĨ

6. Deploy āđāļĨāļ°āļ—āļ”āļŠāļ­āļš API

āđƒāļŠāđ‰ AWS Console āļŦāļĢāļ·āļ­ CLI āđƒāļ™āļāļēāļĢ Deploy API:

aws apigateway create-deployment \
  --rest-api-id abcd1234 \
  --stage-name prod
    

āļˆāļēāļāļ™āļąāđ‰āļ™āļĨāļ­āļ‡āđ€āļĢāļĩāļĒāļ API āļœāđˆāļēāļ™ Postman āļŦāļĢāļ·āļ­ curl:

curl https://your-api-id.execute-api.ap-southeast-1.amazonaws.com/prod/items
    

7. Deploy Frontend āļ‚āļķāđ‰āļ™ AWS S3 + CloudFront

āļŦāļĨāļąāļ‡āļˆāļēāļ build āđāļ­āļ›āđāļĨāđ‰āļ§ āđƒāļŦāđ‰āļ™āļģāđ„āļŸāļĨāđŒāļ‚āļķāđ‰āļ™ S3:

npm run build
aws s3 sync build/ s3://my-frontend-bucket
    

āđāļĨāđ‰āļ§āđ€āļŠāļ·āđˆāļ­āļĄāļāļąāļš CloudFront āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āđ€āļĢāđ‡āļ§āļˆāļēāļāļ—āļąāđˆāļ§āđ‚āļĨāļ

8. āļāļēāļĢāļ—āļģ Observability āđāļĨāļ° Logging

āđƒāļŠāđ‰ CloudWatch āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļš Logs āļ‚āļ­āļ‡ Lambda āđāļĨāļ° Metrics āļ‚āļ­āļ‡ API Gateway āđ€āļžāļ·āđˆāļ­āļ”āļđāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

9. āļŠāļĢāļļāļ›āļ āļēāļžāļĢāļ§āļĄāļĢāļ°āļšāļš Full-stack

āđ€āļĄāļ·āđˆāļ­āļ—āļļāļāļŠāđˆāļ§āļ™āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļ™ āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‰āļĢāļ°āļšāļš Full-stack āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļĢāļ­āļ‡āļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļˆāļģāļ™āļ§āļ™āļĄāļēāļ āļĄāļĩāļāļēāļĢ Scale āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđāļĨāļ°āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ”āļđāđāļĨ Server āđ€āļ­āļ‡ āđ€āļŦāļĄāļēāļ°āļāļąāļšāļ—āļąāđ‰āļ‡ Web Application, Dashboard, āļŦāļĢāļ·āļ­āļĢāļ°āļšāļš Enterprise

📘 āļšāļ—āļ„āļ§āļēāļĄāđ‚āļ”āļĒ King Pool

āļ āļēāļžāļ›āļĢāļ°āļāļ­āļš: AWS Lambda, API Gateway, DynamoDB, React/Angular Integration

āļ­āđˆāļēāļ™āļ•āđˆāļ­: āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļš Serverless Architecture āļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļšāļŦāļĨāļąāļāļĨāđ‰āļēāļ™ Request

Leave a Reply

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