
บทนำ
ในโลกของแอปพลิเคชันยุคใหม่ การประมวลผลแบบ Event-driven กลายเป็นสถาปัตยกรรมที่นิยมมากที่สุด โดยเฉพาะในระบบ Microservices และ Serverless ซึ่งช่วยให้ระบบแยกกันทำงานได้อย่างอิสระ ผ่านการส่ง “ข้อความ (Event)” ระหว่างกัน และบน AWS เรามีสองบริการสำคัญที่รองรับรูปแบบนี้คือ SQS (Simple Queue Service) และ SNS (Simple Notification Service)

Event-driven คืออะไร?
Event-driven หมายถึงการที่ระบบทำงาน “ตอบสนองต่อเหตุการณ์” เช่น เมื่อผู้ใช้กดปุ่ม “สั่งซื้อสินค้า” ระบบจะสร้าง Event ขึ้นมา แล้วส่ง Event นั้นเข้าสู่คิวเพื่อให้ส่วนอื่น ๆ ของระบบทำงานต่อ
- Event ถูกส่งโดย Producer
- Event ถูกเก็บไว้ชั่วคราวใน Queue (SQS) หรือ Broadcast ผ่าน SNS Topic
- Event ถูกบริโภค (Consume) โดย Consumer เช่น Lambda หรือ Service อื่น

รู้จัก AWS SQS (Simple Queue Service)
AWS SQS เป็นบริการ Message Queue ที่ช่วยให้ระบบสื่อสารกันแบบ Asynchronous โดยที่ไม่ต้องรอให้กระบวนการหนึ่งเสร็จก่อนอีกกระบวนการจึงเริ่ม — เหมาะกับงานที่ต้องการความทนทาน (Reliability) เช่น การประมวลผลข้อมูลขนาดใหญ่ หรือการสื่อสารระหว่าง Microservices
คุณสมบัติหลักของ SQS
- รองรับข้อความขนาดสูงสุด 256KB
- รองรับการทำงานแบบ FIFO (First-In, First-Out)
- มี Dead Letter Queue (DLQ) สำหรับเก็บข้อความที่ประมวลผลไม่สำเร็จ
- สามารถ Trigger Lambda ได้อัตโนมัติ

รู้จัก AWS SNS (Simple Notification Service)
AWS SNS เป็นบริการ Pub/Sub (Publish–Subscribe) ที่ช่วยให้คุณส่งข้อความหนึ่งครั้งไปยังหลายระบบได้พร้อมกัน เช่น Lambda, SQS, Email หรือ HTTPS Endpoint SNS เหมาะกับการกระจายข้อมูล (fan-out pattern)
ตัวอย่างการใช้งาน SNS
- ระบบแจ้งเตือนเมื่อมี Event ใหม่เกิดขึ้น (เช่น มีคำสั่งซื้อ)
- กระจายข้อมูลไปยังหลายระบบพร้อมกัน เช่น Billing, Notification, Analytics

เปรียบเทียบ SQS vs SNS
| หัวข้อ | AWS SQS | AWS SNS |
|---|---|---|
| รูปแบบ | Queue (Point-to-Point) | Pub/Sub (Broadcast) |
| การส่งข้อความ | ส่งถึง Consumer เดียว | ส่งให้หลาย Subscriber |
| ตัวอย่างการใช้งาน | Background Processing, Worker Queue | System Notification, Multi-Service Trigger |
โครงสร้างการเชื่อมต่อ SQS + SNS
เราสามารถใช้ SNS เพื่อกระจาย Event ไปยังหลาย Queue (SQS) เพื่อให้แต่ละระบบทำงานของตนเองได้

ตัวอย่างโค้ดเชื่อมต่อ SQS (Python)
import boto3
import json
sqs = boto3.client('sqs')
queue_url = 'https://sqs.ap-southeast-1.amazonaws.com/1234567890/myqueue'
# ส่งข้อความ
sqs.send_message(
QueueUrl=queue_url,
MessageBody=json.dumps({'event': 'order_created', 'orderId': 'ORD001'})
)
# อ่านข้อความ
messages = sqs.receive_message(QueueUrl=queue_url, MaxNumberOfMessages=1)
for msg in messages.get('Messages', []):
print(json.loads(msg['Body']))
sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=msg['ReceiptHandle'])
ตัวอย่างโค้ดส่งข้อความผ่าน SNS
import boto3
sns = boto3.client('sns')
topic_arn = 'arn:aws:sns:ap-southeast-1:1234567890:MyTopic'
sns.publish(
TopicArn=topic_arn,
Message='New order received: ORD001',
Subject='Order Notification'
)
การเชื่อมต่อกับ Lambda (Event Source)
คุณสามารถตั้งค่าให้ Lambda ฟัง Event จาก SQS หรือ SNS ได้โดยตรง เช่น เมื่อมีข้อความใหม่ใน Queue → Lambda จะทำงานทันทีโดยอัตโนมัติ
ข้อดีของ Event-driven Architecture
- 🔹 ระบบแยกอิสระ (Loose Coupling)
- 🔹 รองรับการขยายขนาด (Scalability)
- 🔹 เพิ่มความยืดหยุ่นและความทนทาน (Resilience)
- 🔹 ลดภาระของ Backend ให้ทำงานแบบ Async
สรุป
การใช้ SQS และ SNS เป็นหัวใจของระบบ Event-driven application ช่วยให้ระบบสามารถสื่อสารกันได้อย่างมีประสิทธิภาพ โดยไม่ต้องพึ่งการรอผลแบบ synchronous และเมื่อผสานกับ Lambda คุณจะได้ระบบแบบ Serverless ที่ขยายได้อัตโนมัติ
หากคุณกำลังเริ่มพัฒนาแอปแบบ Microservices หรือ Serverless — ขอแนะนำให้ลองออกแบบระบบของคุณด้วยแนวคิด Event-driven ผ่าน AWS SQS และ SNS ดูครับ
📘 บทความโดย King Pool
ภาพประกอบ: SQS + SNS Architecture, Event Flow Diagram, Lambda Integration
อ่านต่อ: การสร้าง REST API ด้วย Lambda + API Gateway + DynamoDB