ทดลองสร้าง 2 EC2 เชื่อมกับ RDS ใน Private Subnet ในวง VPC

2022.05.17

เป้าหมายของบทความนี้

สวัสดีครับ ผม ต้า ครับ วันนี้เราจะมาทดลองสร้างสภาพแวดล้อม VPC ที่มี 2 Availability Zone
โดยในแต่ละ Zone จะมี EC2 อยู่ใน Public subnet และให้แต่ละ EC2 สามารถเชื่อมต่อ RDS ที่เป็น Database
ที่อยู่ใน Private subnet ของ Availability Zone1 (1a)
ตามแผนภาพด้านล่างเลยครับ↓↓↓

สร้าง VPC


ในขั้นตอนแรกเราจะมาสร้าง VPC ให้ได้ตามรูปด้านบนกันก่อนนะครับ
โดยวิธีการสร้าง VPC สามารถดูได้ที่ลิ้งค์ด้านล่างนี้ครับ↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ

การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
Name tag auto-generation: supanut-test (ตั้งชื่อของ VPC อะไรก็ได้)
IPv4 CIDR block: 192.168.0.0/16
Availability Zones (AZs) (2): 1a 1b
Number of public subnets: 2
Number of private subnets: 2
Public subnet CIDR block in ap-southeast-1a: 192.168.1.0/24(ตั้งค่าเพื่อให้ดูง่ายในขั้นตอนต่อไป)
Public subnet CIDR block in ap-southeast-1b: 192.168.2.0/24(ตั้งค่าเพื่อให้ดูง่ายในขั้นตอนต่อไป)
Private subnet CIDR block in ap-southeast-1a: 192.168.11.0/24(ตั้งค่าเพื่อให้ดูง่ายในขั้นตอนต่อไป)
Private subnet CIDR block in ap-southeast-1b: 192.168.12.0/24(ตั้งค่าเพื่อให้ดูง่ายในขั้นตอนต่อไป)
NAT gateways: None
VPC endpointsInfo: None
Enable DNS hostnames:
Enable DNS resolution:


ตั้งค่าเสร็จแล้วก็กด Create VPC ได้เลยครับ

ตั้งค่า Subnet

หลังจากนั้นให้ไปที่ฟังก์ชันSubnets
แล้วให้ตั้งค่า Public Subnet ทั้ง public1 และ public2 ให้ ✅Enable auto-assign public IPv4 address
เราสามารดูวิธีตั้งค่า Public Subnet ได้ตามบทความด้านล่างนี้ครับ↓↓↓

วิธีตั้งค่า Public Subnet

สร้าง RDS


ต่อไปเราจะสร้าง RDS ใน Private subnet ของฝั่ง Availability Zones 1 (1a)
แต่การที่จะสร้าง RDS ใน Private subnet ได้นั้น เราจำเป็นต้องสร้าง DB subnet group ขึ้นมาก่อน

สร้าง DB subnet group

ตอนแรกแน่นอนว่าเราต้องเข้าไปที่RDSSerivce ก่อนครับ
แล้วไปที่Subnet groups
กด Create DB subnet group ครับ
แล้วตั้งค่า Subnet group ตามนี้ครับ
Name: supanut-test-private-subnet-group(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
Description: supanut-test-private-subnet-group(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมา
Availability Zones:1a 1b
Subnets:เลือก CIDR block ของ private
(ถ้าตั้งตามบทความนี้จะชื่อว่า192.168.11.0/24และ192.168.12.0/24)

เสร็จแล้วให้กดCreateเลยครับ

สร้าง security group สำหรับ RDS

หลังจากนั้นให้เราสร้าง security group สำหรับ RDS โดยสามารถดูวิธีการสร้างได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ

การสร้าง Security Group สำหรับใช้กับ RDS
Security group name:supanut-test-rds
Description:supanut-test-rds
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว (ดูให้ดีๆนะครับ อย่าลืม)
Inbound rules
Type: MYSQL/Aurora
Source:192.168.0.0/16

จากนั้นกด Create security group เลยครับ

สร้าง Database ของ RDS

ขั้นตอนต่อไปจะเป็นการสร้าง Database ของ RDS โดยสามารถดูวิธีการสร้างได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ

การสร้าง RDS
Engine options:MySQL
Availability and durability:◎Single DB instance
DB instance identifier:supanut-test-rds
Master username:admin
Master password:Supanut123
DB instance class:◎Burstable classes db.t3.micro
Storage type:Magnetic
Virtual private cloud (VPC):เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
(ถ้าสร้างถูก Subnet group จะเปลี่ยนไปตามที่เราสร้างด้วย)
Public access: ◎No
Existing VPC security groups: supanut-test-rds(ลบ Default ออก)
Availability Zone:1a(ตามแผนภาพที่ร่างไว้↑↑↑)
Additional configuration
Initial database name:supanut

เสร็จแล้วกดCreate databaseเลยครับ

สร้าง EC2

โดยขั้นตอนต่อไปเราจะสร้าง EC2 Instance สำหรับโซน a1 และหลังจากนั้นให้เชื่อมต่อ PuTTY ด้วย
โดยสามารถดูวิธีการสร้างและเชื่อมต่อได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ

【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
Name:supanut-test-ec2-1(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Subnet:public1(ตามแผนภาพที่ร่างไว้↑↑↑)(ดูให้ดีๆนะครับ)
Auto-assign public IP:Enable
Security group name:supanut-test-ec2(จะลองให้ทั้ง 2 Instance ใช้ Security group เดียวกัน)
Description:supanut-test-ec2

เสร็จแล้วกดLaunch instanceเลยครับ
หลังจากนั้นเราสามารถมาเช็คข้อมูลใน หน้า instance ได้ จะเห็นว่า VPC กับ Subnet จะเปลี่ยนไปตามที่เราตั้งค่า

แล้วให้เราเชื่อมต่อ PuTTY ตามบทความด้านบนทุกอย่างเลยครับ
หลังจากนั้นใช้เราใช้คำสั่งนี้เพื่อเปลี่ยน Time zone เป็นเวลาไทยครับ

ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime

แล้วใช้คำสั่งนี้เพื่อเช็คดูเวลาได้ หากถูกต้องเวลาจะเป็น +07 ครับ

date

การ Login เชื่อมต่อ EC2 ไปยัง MySQL

แล้วคราวนี้จะมาเชื่อมต่อไปตั้ง Database RDS ที่เราสร้างขึ้นครับ
โดยวิธีการเชื่อมต่อสามารถดูได้ที่ลิ้งค์ด้านล่างนี้↓↓↓

การ Login เชื่อมต่อ MySQL ไปยัง EC2

ถ้าเราทำตามขั้นตอนในบทความเสร็จแล้ว ไปสร้าง EC2 Instance อีกตัวตามวิธีในขั้นตอนต่อไปเลยครับ

การใช้ AMI สร้าง EC2 Instance อีกตัว


หลังจากที่เราเชื่อมต่อ EC2 เข้ากับ MySQL แล้ว
เราจะมาใช้ฟังก์ชันของ EC2 ที่เรียกว่า AMIs ในการสร้าง Copy ของ Instance เพื่อย่นเวลาในการตั้งค่าต่างๆภายใน
โดยสามารถดูวิธีการสร้างและเชื่อมต่อได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ

การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
การตั้งค่าในขั้นตอนการสร้าง Instance
Name:supanut-test-ec2-2(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Subnet:public2(ตามแผนภาพที่ร่างไว้↑↑↑)(ดูให้ดีๆนะครับ)
Auto-assign public IP: Enable
Firewall (security groups): ◎Select existing security group
Security group name:supanut-test-ec2(เลือกอันที่เราสร้างในขั้นตอนที่แล้ว)
Description:supanut-test-ec2

เสร็จแล้วกดLaunch instanceเลยครับ
เท่านี้ก็ถือว่าเป็นการติดตั้งทุกอย่างเสร็จสิ้นแล้วครับ

ทดสอบระบบ

นี่คือรายการที่เราจะทดสอบ Instance ตัวที่เราสร้างจาก AMI นั้นเป็นตัวก็อบปี้จริงๆ
และ Instance ทั้ง 2 ตัวใช้ Database เดียวกันครับ
ก่อนอื่นให้เราใช้ PuTTY เชื่อมต่อ Instance ที่เราสร้างจาก AMI ครับ
แล้วใช้คำสั่งนี้เพื่อเข้าสู่rootครับ

sudo su -

แล้วใช้คำสั่ง Date เพื่อตรวจสอบเวลา จะเห็นว่าเวลาเป็น+07แสดงว่าก๊อปปี้สำเร็จครับ

date

จากนั้นให้เราใช้คำสั่ง ifconfig เพื่อตรวจสอบ Private IP ของทั้งสอง instance ดู

ifconfig

จะเห็นว่าเป็นเลข 192.168.1.x และ 192.168.2.x ตามที่เขียนไว้ในแผนภาพ


จากนั้นเมื่อเราใช้คำสั่ง login MySQL กับ EndPoint ของ RDS จะพบว่าสามารถ Login ได้เหมือนกัน

และเมื่อเราเปิดดูภายในเราจะพบว่า Database ภายในมีความเหมือนกันอีกด้วย

และเมื่อเราลองอัพเดทข้อมูลในฝั่งนึง ข้อมูลจะขึ้นไปอยู่ในอีกฝั่งนึงอีกด้วย

สรุป

วิธีการสร้างสภาพแวดล้อมแบบนี้ อาจจะดูเยอะและใช้เวลานานกว่าจะสร้างเสร็จ
แต่เมื่อเราแบ่งออกมาเป็นชิ้นเล็กๆเราจะเห็นว่ามันเกิดจากขั้นตอนเล็กๆที่มารวมกัน
โดยบางทีคุณอาจจะเคยผ่านเครื่องมือเหล่านี้มาก่อนแล้วก็ได้
แต่ก็มีจุดระวังหลายจุดในบทความที่คุณควรสังเกตให้ดีๆเวลาลงมือทำจริงเช่น public เป็น private หรือเลข 1 เป็น 2 โดยในจุดนี้หากคุณใส่ผิดในช่วงการสร้าง Instance คุณจำเป็นต้อง Terminate มันและสร้างใหม่ขึ้นมา เพราะฉนั้นเช็คให้ดีก่อนสร้างนะครับ

บทความที่เกี่ยวข้อง

วิธีการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS
【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance

ดูรายละเอียดเพิ่มเติมได้ที่นี่ สอบถามเพิ่มเติมเกี่ยวกับ AWS คลิกที่นี่