
ที่มาภาพ: Unknown Source
วิธีย้ายฐานข้อมูล PostgreSQL ไปยัง Cloud‑Native Aurora Serverless บน AWS ด้วย Terraform อย่างปลอดภัยและอัตโนมัติ
⚡ สรุป 30 วิ
การย้ายฐานข้อมูลจาก PostgreSQL ดั้งเดิมไปยัง **Amazon Aurora Serverless** ช่วยให้คุณได้ประโยชน์ของสเกลอัตโนมัติและค่าใช้จ่ายตามการใช้งานจริง บทความนี้จะพา you ผ่านขั้นตอนทั้งหมดโดยใช้ **Terraform** เพ…
Overview — Overview
การย้ายฐานข้อมูลจาก PostgreSQL ดั้งเดิมไปยัง Amazon Aurora Serverless ช่วยให้คุณได้ประโยชน์ของสเกลอัตโนมัติและค่าใช้จ่ายตามการใช้งานจริง บทความนี้จะพา you ผ่านขั้นตอนทั้งหมดโดยใช้ Terraform เพื่อทำให้งานปลอดภัย และอัตโนมัติ
เตรียมสภาพแวดล้อม — Prerequisites
ก่อนเริ่มต้องตรวจสอบว่ามีเครื่องมือและสิทธิ์ครบถ้วน
- AWS Account ที่มีสิทธิ์สร้าง VPC, Subnet, Security Group, Aurora Cluster และ Secrets Manager
- **Terraform (≥ 1.0) ติดตั้งบนเครื่อง local หรือ CI/CD pipeline
- PostgreSQL client (`psql`, `pg_dump`) พร้อมการเชื่อมต่อฐานข้อมูลต้นทางที่ทำงานได้
- IAM Role/Policy ที่ให้ Terraform สามารถดำเนินการกับบริการ AWS ที่เกี่ยวข้อง
**Tip: ควรสร้าง IAM user แยกเฉพาะสำหรับ Terraform และกำหนดสิทธิ์ตามหลัก “least‑privilege” เพื่อลดความเสี่ยง
สร้างโครงสร้างพื้นฐานด้วย Terraform — Infrastructure as Code
การตั้งค่า Aurora Serverless ต้องใช้หลายทรัพยากร เราจะจัดไฟล์เป็นโมดูลเพื่อให้สามารถทำซ้ำได้
- provider.tf – กำหนด region และ credentials
```hcl provider "aws" { region = var.aws_region } ```
- network.tf – สร้าง VPC, Subnet, Internet Gateway, Route Table
- security.tf – ตั้ง Security Group ให้รับการเชื่อมต่อจากแหล่งที่กำหนด (IP ของเครื่อง dump หรือ DMS)
- aurora.tf – ประกาศ `aws_rds_cluster` แบบ Serverless พร้อมพารามิเตอร์สเกล (`min_capacity`, `max_capacity`)
```hcl resource "aws_rds_clusteraurora_serverless" { engine = "aurora-postgresql" engine_mode = "serverless" database_name = var.db_name master_username = var.master_user master_password = random_password.master.result backup_retention_period = 7 scaling_configuration { min_capacity = 2 max_capacity = 64 } } ```
- secrets.tf – เก็บรหัสผ่าน Master User ใน AWS Secrets Manager แล้วเชื่อมกับ Aurora
- outputs.tf – ส่งออก endpoint ของคลัสเตอร์เพื่อใช้ในขั้นตอนการย้ายข้อมูล
**Warning: อย่าลืมตั้ง `deletion_protection = true` บน RDS Cluster หากยังอยู่ในช่วงทดสอบ เพื่อป้องกันการลบโดยไม่ได้ตั้งใจ
ย้ายข้อมูลจาก PostgreSQL ไป Aurora Serverless — Data Migration
มี 3 วิธีหลักที่นิยมใช้
| วิธี | ลักษณะ | ข้อดี | ข้อเสีย |
|---|---|---|---|
| `pg_dump` + `psql` | ส่งออกไฟล์ SQL แล้วนำเข้าใหม่ | ตั้งค่าง่าย, ไม่ต้องบริการเพิ่มเติม | ต้องหยุดการเขียนระหว่าง dump หากข้อมูลเปลี่ยนบ่อย |
| AWS DMS (Database Migration Service) | Replication continuous หรือ one‑time | รองรับการ sync ขณะทำงาน, ลด downtime | ค่าใช้จ่ายต่อชั่วโมงของ DMS Instance |
| Logical replication + `pglogical` | สร้าง publication/subscription ระหว่าง DB | ทำแบบ real‑time, ปรับขนาดได้ | ต้องตั้งค่า extension เพิ่ม |
ขั้นตอนตัวอย่างโดยใช้ pg_dump
- **ขั้นตอนที่ 1: สร้าง snapshot ของฐานข้อมูลต้นทางเพื่อความปลอดภัย
- **ขั้นตอนที่ 2: ใช้ `pg_dump` ส่งออกเป็นไฟล์ compressed
```bash pg_dump -h <old-host> -U <user> -Fc <db_name> > dump_file.dump ```
- **ขั้นตอนที่ 3: นำเข้าไฟล์ลง Aurora Serverless ผ่าน endpoint ที่ได้จาก Terraform
```bash pg_restore -h <aurora-endpoint> -U <master_user> -d <db_name> --no-owner dump_file.dump ```
- **ขั้นตอนที่ 4: ตรวจสอบจำนวนแถวและคอนสตรินต์เพื่อให้แน่ใจว่าการย้ายสำเร็จ
```sql SELECT count(*) FROM information_schema.tables WHERE table_schema = 'public'; ```
หากต้องการลด downtime ให้พิจารณาใช้ AWS DMS โดยสร้าง task แบบ `cdc` (change data capture) เพื่อซิงค์ข้อมูลที่เปลี่ยนแปลงหลังจากขั้นตอน dump
ตรวจสอบและทดสอบการทำงาน — Validation
หลังย้ายเสร็จ ควรทำการตรวจสอบหลายมุม
- เชื่อมต่อด้วย `psql` หรือเครื่องมือ GUI เพื่อตรวจสอบว่า query latency อยู่ในระดับที่รับได้
- ใช้ AWS CloudWatch Metrics ตรวจดู `CPUUtilization`, `DatabaseConnections`, และ `AuroraServerlessCapacityUnits` เพื่อประเมินสเกลอัตโนมัติทำงานหรือไม่
- ทำการ failover test โดยหยุดการเชื่อมต่อจากแหล่งต้นทางแล้วตรวจสอบว่าแอปพลิเคชันยังคงทำงานได้
**Tip: ตั้งค่า alarms ใน CloudWatch ให้แจ้งเตือนเมื่อ `CPUUtilization` เกิน 80% หรือ `Latency` เพิ่มขึ้นอย่างฉับพลัน
เคล็ดลับความปลอดภัย — Security Tips
- ใช้ VPC Private Subnet สำหรับ Aurora Serverless และปิดการเข้าถึงจากอินเทอร์เน็ตโดยตรง
- ตั้งค่า IAM Authentication เพื่อให้แอปใช้ IAM role แทนรหัสผ่านแบบคงที่
- เปิด Encryption at Rest (KMS) และ SSL/TLS สำหรับการเชื่อมต่อ client‑to‑Aurora
**Warning: อย่าเปิด `publicly_accessible = true` บน RDS Cluster หากไม่มีเหตุผลจำเป็น การทำเช่นนี้เพิ่มพื้นที่โจมตีอย่างมาก
สรุป — Summary
- ใช้ Terraform จัดการโครงสร้างพื้นฐาน Aurora Serverless อย่างเป็นระบบและสามารถ version‑control ได้
- เลือกวิธีย้ายข้อมูลที่เหมาะกับระดับ downtime ที่รับได้ (`pg_dump`, AWS DMS หรือ logical replication)
- ตรวจสอบผลลัพธ์ด้วยการ query, CloudWatch และการทำ failover test เพื่อให้มั่นใจว่าระบบพร้อมใช้งานจริง
- ปฏิบัติตามแนวปฏิบัติด้าน Security เช่น VPC isolation, IAM authentication และ encryption
สิ่งที่ควรจำ
- ตั้งค่า IAM least‑privilege ให้ Terraform มีเฉพาะสิทธิ์ที่ต้องการ
- ใช้ Backup & Snapshot ของ PostgreSQL ก่อนเริ่มย้ายข้อมูลทุกครั้ง
- ตรวจสอบ Scaling Configuration ของ Aurora Serverless เพื่อให้ระบบตอบสนองต่อโหลดได้อย่างอัตโนมัติ
- เปิด CloudWatch Alarms เพื่อตรวจจับปัญหาในระยะเวลาแรกและทำการแก้ไขอย่างรวดเร็ว
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีย้ายฐานข้อมูล PostgreSQL ไปยัง Cloud‑Native Aurora Serverless บน AWS ด้วย Terraform อย่างปลอดภัยและอัตโนมัติ
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 12 สิงหาคม 2569 เวลา 19:50



