การสร้าง REST API ด้วย Lambda + API Gateway + DynamoDB

Sharing is caring!

บทนำ

หากคุณเป็นนักพัฒนาที่อยากสร้าง API แบบ Serverless โดยไม่ต้องดูแลเครื่องเซิร์ฟเวอร์เอง การใช้ AWS Lambda ร่วมกับ API Gateway และ DynamoDB ถือเป็นทางเลือกที่ยอดเยี่ยม เพราะสามารถสร้างระบบที่ขยายขนาดได้อัตโนมัติ มีค่าใช้จ่ายต่ำ และง่ายต่อการดูแล

ทำความเข้าใจกับสถาปัตยกรรม

แผนภาพด้านล่างแสดงลำดับการทำงานของระบบ REST API ที่สร้างบน AWS:

  • 1️⃣ API Gateway รับ HTTP Request จากผู้ใช้
  • 2️⃣ Lambda ประมวลผลตาม logic ที่กำหนด
  • 3️⃣ DynamoDB ทำหน้าที่เก็บหรือดึงข้อมูล
  • 4️⃣ Lambda ส่ง Response กลับไปยัง API Gateway → ผู้ใช้

เตรียมเครื่องมือที่ใช้

  • บัญชี AWS (หากยังไม่มี สมัครได้ที่ aws.amazon.com)
  • AWS CLI (สำหรับ Deploy Lambda ผ่าน command line)
  • Node.js หรือ Python (ใช้เขียน Lambda function)
  • Postman (ใช้ทดสอบ API)

ขั้นตอนที่ 1: สร้าง DynamoDB Table

  1. ไปที่ AWS Console → DynamoDB → Create table
  2. ใส่ชื่อ Table: Users
  3. ตั้งค่า Primary key: userId (String)
  4. กด “Create table”

ขั้นตอนที่ 2: สร้าง Lambda Function

1. ไปที่ AWS Lambda Console → “Create function”

2. เลือก “Author from scratch” แล้วตั้งชื่อว่า userApiHandler

3. Runtime: Node.js 18.x

ตัวอย่างโค้ด Lambda Function

// index.mjs
import AWS from 'aws-sdk';
const dynamo = new AWS.DynamoDB.DocumentClient();

export const handler = async (event) => {
  const method = event.httpMethod;
  const body = event.body ? JSON.parse(event.body) : {};

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

  if (method === 'POST') {
    const item = { userId: body.userId, name: body.name, email: body.email };
    await dynamo.put({ TableName: 'Users', Item: item }).promise();
    return { statusCode: 201, body: JSON.stringify({ message: 'User created', item }) };
  }

  return { statusCode: 400, body: JSON.stringify({ error: 'Unsupported method' }) };
};
    

ขั้นตอนที่ 3: สร้าง API Gateway

  1. เปิดบริการ API Gateway → Create API → HTTP API
  2. เลือก “Add integration” → Lambda Function → userApiHandler
  3. เพิ่ม Route GET /users และ POST /users
  4. กด “Deploy API”

ขั้นตอนที่ 4: ทดสอบ API ผ่าน Postman

ใช้ URL จาก API Gateway เช่น:

https://abc123xyz.execute-api.ap-southeast-1.amazonaws.com/users
    

ทดสอบ POST: เพิ่มข้อมูลผู้ใช้ใหม่

POST /users
{
  "userId": "U001",
  "name": "Alice",
  "email": "[email protected]"
}
    

ทดสอบ GET: ดึงรายชื่อผู้ใช้ทั้งหมด

GET /users
    

ขั้นตอนที่ 5: เพิ่มสิทธิ์ให้ Lambda เข้าถึง DynamoDB

ไปที่ IAM Console → เลือก Role ของ Lambda → Attach Policy ค้นหา “AmazonDynamoDBFullAccess” แล้วเพิ่มสิทธิ์ให้ Lambda

ขั้นตอนที่ 6: ใช้งานจริง (Deploy Production)

หลังจากทดสอบสำเร็จ คุณสามารถตั้งค่า Stage ของ API Gateway ให้เป็น Production และเปิดใช้ CORS เพื่อให้ Frontend เรียกใช้งานได้จากเว็บแอปพลิเคชัน

aws apigateway update-rest-api \
  --rest-api-id abc123 \
  --patch-operations op=replace,path=/endpointConfiguration/types,value=REGIONAL
    

โครงสร้างระบบโดยรวม (Architecture Diagram)

ภาพนี้แสดงโครงสร้างของระบบ REST API ที่เชื่อมต่อกันระหว่าง Lambda, API Gateway, และ DynamoDB:

สรุป

เพียงไม่กี่ขั้นตอน คุณก็สามารถสร้าง REST API แบบ Serverless ได้โดยไม่ต้องดูแลเซิร์ฟเวอร์เอง Lambda ทำหน้าที่ประมวลผล, API Gateway เป็นตัวกลางรับ request, และ DynamoDB เก็บข้อมูลทั้งหมด — เป็นสถาปัตยกรรมที่ยืดหยุ่น ปลอดภัย และประหยัดงบอย่างยิ่ง

หากคุณต้องการต่อยอด สามารถเพิ่มระบบ Authentication ด้วย Cognito หรือ ระบบ CI/CD ด้วย CodePipeline เพื่อทำให้ระบบอัตโนมัติเต็มรูปแบบ

📘 บทความโดย King Pool

ภาพประกอบ: Lambda + API Gateway + DynamoDB, IAM Policy, REST API Architecture

อ่านต่อ: การสร้าง API ด้วย AWS SDK (Java, Python, Node.js)

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *