การสร้าง RDS for PostgreSQL และเชื่อมต่อจาก EC2 บน AWS
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำวิธีการสร้าง RDS for PostgreSQL และเชื่อมต่อจาก EC2 ไปยัง RDS บน AWS ครับ
สำหรับ Resource ที่จะใช้คือ EC2 Instance (Amazon Linux 2023) และ RDS for PostgreSQL
AWS Service | Function |
---|---|
EC2 | Instance (Amazon Linux 2023) |
RDS | Database (PostgreSQL) |
เป้าหมาย
ครั้งนี้จะสร้าง RDS for PostgreSQL และ EC2 Instance แล้วเชื่อมต่อเข้าด้วยกันผ่าน Security Group และทดสอบรันคำสั่ง PostgreSQL ใน Amazon Linux 2023
สิ่งที่ต้องเตรียม
※มี EC2 Instance สำหรับเชื่อมต่อกับ RDS for PostgreSQL แล้ว
ดูตัวอย่างได้ที่ลิงก์ด้านล่างนี้
ตัวอย่างการสร้าง EC2 Instance
Region:
Singapore
※Launch instances
Name and tags
Name:tinnakorn-ec2
(ป้อนชื่อที่ต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Amazon Linux 2023 AMI
Instance type
Instance type:t3a.micro
(เลือกสเปคตามต้องการ)Key pair (login)
Key pair name - required:tinnakorn-ec2
Network settings
Firewall (security groups)
Security group name - required:tinnakorn-ec2
(ป้อนชื่อที่ต้องการ)
Description - required:tinnakorn-ec2
(ป้อนคำอธิบายตามต้องการ)
Inbound security groups rules
▼ Security group rule 1 (TCP, 22, xx.xx.xx.xx/32)
Type: ssh | Source type: My IP | Source: xx.xx.xx.xx/32Configure storage
1x:8
GiBgp3
Root volume (Not encrypted) (Default)
Amazon RDS คืออะไร
Amazon Relational Database Service (Amazon RDS) เป็นบริการที่ได้รับการจัดการที่ช่วยให้ผู้ใช้สามารถตั้งค่าใช้งาน และปรับขนาดฐานข้อมูลเชิงสัมพันธ์ในระบบคลาวด์ได้อย่างง่ายดาย บริการนี้จะมอบความจุที่คุ้มค่าและปรับขนาดได้ พร้อมกับจัดการงานการดูแลระบบฐานข้อมูลที่ใช้เวลานาน ปลดปล่อยคุณให้เป็นอิสระเพื่อที่จะสามารถพุ่งความสนใจไปยังแอปพลิเคชันและธุรกิจของคุณได้อย่างเต็มที่
ดูรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
สร้าง Security Group สำหรับ RDS for PostgreSQL
ครั้งนี้จะสร้าง Security Group สำหรับใช้กับ RDS for PostgreSQL โดยใช้ชื่อ tinnakorn-rds-postgresql
เข้ามาที่ Service EC2 แล้วเลือก Security Groups
ในหัวข้อ "▼ Network & Security" จากเมนูด้านซ้าย
คลิก Create security group
เมื่อเข้ามาหน้าจอ Create security group จะทำการตั้งค่าดังนี้
หัวข้อ Basic details
・Security group name: tinnakorn-rds-postgresql
・Description: tinnakorn-rds-postgresql
หัวข้อ Inbound rules
・Type: PostgreSQL
・ถัดจากช่อง Source ให้ค้นหาและเลือก Security group ID ของ EC2 Instance ตัวอย่างนี้คือ tinnakorn-ec2
・แล้วเลื่อนลงมาด้านล่างสุด คลิก Create security group
สร้าง RDS for PostgreSQL
ครั้งนี้จะสร้าง RDS for PostgreSQL เพื่อใช้เชื่อมต่อกับ EC2 Instance
ก่อนอื่นให้เตรียมสิ่งต่อไปนี้ (ข้อมูลนี้เป็นแค่ตัวอย่าง)
- ชื่อสำหรับ RDS (DB instance identifier):
tinnakorn-rds-postgresql
(ชื่อที่ต้องการ)- รหัสผ่านสำหรับ RDS (Master password):
RdsEc2-202412
(รหัสผ่านที่ต้องการ)
เมื่อเตรียมชื่อและรหัสผ่านแล้ว เริ่มสร้าง RDS ได้เลยครับ
ค้นหาและเลือก RDS
เลือก Databases
จากเมนูด้านซ้าย
คลิก Create database
เมื่อเข้ามาหน้าจอ Create database จะทำการตั้งค่าดังนี้
Choose a database creation method
・Standard create
Engine options
・Engine type: PostgreSQL
・Engine Version: PostgreSQL 17.2-R1
(เวอร์ชันปัจจุบัน ณ วันที่เขียนบทความ)
Templates
・Production
Availability and durability
・Deployment options: Single DB instance
Settings
・DB instance identifier: tinnakorn-rds-postgresql
▼ Credentials Settings
・Master username: postgres
・Credentials management: Self managed
・Master password: RdsEc2-202412
・Confirm master password: RdsEc2-202412
Instance configuration
・DB instance class: Burstable classes (includes t classes)
・db.t3.micro
ค่าใช้จ่ายสำหรับ DB Instance สามารถตรวจสอบได้ที่ ราคา Amazon RDS for PostgreSQL
การตรวจสอบครั้งนี้คือให้ไปที่หัวข้อตามด้านล่างนี้
・TH Language: เลือกเมนู ค่าใช้จ่ายสำหรับ On-Demand DB Instance
> RDS สำหรับ PostgreSQL
> การใช้งานอินสแตนซ์แบบ Single-AZ
> รีเจี้ยน เอเชียแปซิฟิก (สิงคโปร์)
(ใกล้กับประเทศไทยมากที่สุด) > ค้นหา DB Instance ที่ต้องการตรวจสอบราคา เช่น db.t3.micro
・EN Language: เลือกเมนู Highly available deployment options
> RDS for PostgreSQL
> Single-AZ Deployment
> รีเจี้ยน Asia Pacific (Singapore)
(ใกล้กับประเทศไทยมากที่สุด) > ค้นหา DB Instance ที่ต้องการตรวจสอบราคา เช่น db.t3.micro
Storage
・Storage type: General Purpose SSD (gp2)
・Allocated storage: 20
GiB (ความจุต่ำสุด)
คลิก "▼ Additional storage configuration"
Storage autoscaling (การตั้งค่านี้คือค่าเริ่มต้นทั้งหมด)
・✅ Enable storage autoscaling
・Maximum storage threshold: 1000
GiB
หากเปิดใช้งาน Storage autoscaling จะทำให้ขนาด Storage ขยายเมื่อ Storage ใกล้จะเต็มโดยอัตโนมัติ และมีการเรียกเก็บเงินเพิ่มขึ้นตามขนาดที่ถูกขยาย
Connectivity
・VPC security group (firewall): Choose existing
・Existing VPC security groups: "tinnakorn-rds-postgresql" (เลือก Security Group ที่สร้างสำหรับ RDS ในตอนแรก)
・เลื่อนลงมาด้านล่างสุด แล้วคลิก Create database
ตรวจสอบ Database ที่สร้างแล้ว
หลังจากย้ายไปยังหน้าจอ Databases แล้ว ให้คลิก DB identifier
ที่สร้างขึ้น (เช่น "tinnakorn-rds-postgresql")
หลังจากย้ายไปยังหน้าจอ DB identifier จะแสดงหน้าจอแบบนี้ ให้รอสักครู่จนกว่า DB Instance จะแสดงเป็น "Available"
จะเห็นว่า Endpoint ถูกสร้างขึ้นเมื่อ Status ของ DB Instance แสดงเป็น Available
(ครั้งนี้ใช้เวลาประมาณ 6 นาที)
ติดตั้ง PostgreSQL Client
※เข้ามาที่หน้าจอ Terminal สำหรับรันคำสั่ง ครั้งนี้จะดำเนินการรันคำสั่งใน PuTTY
เมื่อติดตั้ง PostgresQL Client จะทำให้สามารถเชื่อมต่อกับ RDS จาก Amazon Linux 2023 ได้ แต่ไม่สามารถใช้งาน PostgresQL Server ได้ !
รันคำสั่งเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ root
sudo su -
รันคำสั่ง Update server ให้เป็นปัจจุบัน
yum update -y
รันคำสั่งติดตั้ง PostgreSQL Client
yum install postgresql16 -y
ทดสอบการจัดการ Database
เชื่อมต่อจาก EC2 Instance ไปยัง RDS for PostgreSQL
รันคำสั่งเชื่อมต่อกับฐานข้อมูล RDS for PostgreSQL จาก EC2 Instance
※ก่อนรันคำสั่งเปลี่ยนข้อมูลใน [ ] ให้เป็นของคุณ
・RDS Endpoint:「-h [your_endpoint_rds]
」
・Master username:「-U postgres
」(Default)
psql -h [your_endpoint_rds] -U postgres
แล้วป้อนรหัสผ่าน Master password ที่กำหนดตอนสร้าง RDS for PostgreSQL
Output (example) 1
[root@ip-xx-xx-xx-xx ~]# psql -h tinnakorn-rds-postgresql.xxxxxxxxxx.ap-southeast-1.rds.amazonaws.com -U postgres
Password for user postgres: [your_password_rds] # ขณะพิมพ์ Password ตัวอักษรจะไม่แสดงให้เห็น
หาก Login psql ได้แล้ว จะแสดงหน้าจอแบบนี้ แล้วจะเปลี่ยนเป็น postgres=>
Output (example) 2
Password for user postgres:
psql (16.4, server 17.2)
WARNING: psql major version 16, server major version 17.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
สร้าง Database
ก่อนอื่นตรวจสอบรายการ Database
คำสั่งแสดงรายการ database สำหรับ PostgreSQL
SELECT datname FROM pg_database;
Database ค่าเริ่มต้นของ RDS for PostgreSQL จะแสดงแบบนี้
Output (example)
postgres=> select datname from pg_database;
datname
-----------
template0
template1
postgres
rdsadmin
(4 rows)
postgres=>
คำสั่งสร้าง Database (เปลี่ยน database_name
ให้เป็นชื่อ Database ของคุณ เช่น tinnakorn
)
CREATE DATABASE database_name;
ตัวอย่างนี้ใช้ Database ชื่อว่า tinnakorn
Output (example)
postgres=> CREATE DATABASE tinnakorn;
CREATE DATABASE
postgres=>
รันคำสั่งแสดงรายการ database อีกครั้ง
SELECT datname FROM pg_database;
จะเห็นว่ามีชื่อ Database tinnakorn
แสดงขึ้นมา
Output (example)
postgres=> SELECT datname FROM pg_database;
datname
-----------
template0
template1
postgres
rdsadmin
tinnakorn
(5 rows)
postgres=>
สร้าง Table
คำสั่งเปลี่ยนการเชื่อมต่อ Database (เปลี่ยน database_name
ให้เป็นชื่อ Database ของคุณที่สร้างจากขั้นตอนที่แล้ว เช่น tinnakorn
)
\c database_name
จะเห็นว่าเปลี่ยนเป็น tinnakorn=>
Output (example)
postgres=> \c tinnakorn
psql (16.4, server 17.2)
WARNING: psql major version 16, server major version 17.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
You are now connected to database "tinnakorn" as user "postgres".
tinnakorn=>
คำสั่งสร้าง Table (เปลี่ยน table_name
ให้เป็นชื่อ Table ของคุณ)
create table table_name(id int, message varchar(255));
ตัวอย่างนี้ใช้ Table ชื่อว่า test
Output (example)
tinnakorn=> create table test(id int, message varchar(255));
CREATE TABLE
tinnakorn=>
คำสั่งแสดงรายการ Table
\dt
จะเห็นว่ามีชื่อ Table test
แสดงขึ้นมา
Output (example)
tinnakorn=> \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | test | table | postgres
(1 row)
tinnakorn=>
Insert ข้อมูลลงใน Table
คำสั่ง Insert ข้อมูลลงใน Table (เปลี่ยน table_name
ให้เป็นชื่อ Table ที่คุณสร้างเมื่อสักครู่นี้ และเปลี่ยน column
, values
ตามต้องการ)
insert into table_name(column1, column2) values(value1, value2);
ข้อมูลของตัวอย่างนี้คือ ["column = (id, message)" และ "value = (1, 'test1')"]
Output (example)
tinnakorn=> insert into test(id, message) values(1, 'test1');
INSERT 0 1
tinnakorn=>
ดึงข้อมูลจาก Table
คำสั่งดึงข้อมูลจาก Table ทั้งหมด (เปลี่ยน table_name
เป็นชื่อ Table ที่สร้างเมื่อสักครู่นี้ ตัวอย่างนี้จะดึงข้อมูลของ Table ที่ชื่อ test
)
select * from table_name;
Output (example)
tinnakorn=> select * from test;
id | message
----+---------
1 | test1
(1 row)
tinnakorn=>
ออกจาก Prompt
คำสั่งออกจาก prompt ต่างๆ ในครั้งนี้ออกจาก psql กลับมาที่ postgres
\q
Output (example)
tinnakorn=> \q
[root@ip-xx-xx-xx-xx ~]#
การลบ AWS Resource
AWS Resource ที่จะลบทั้งหมดมีดังนี้
- RDS
- Database
- EC2
- Instance
- Security Groups 2 ตัว (ที่ใช้สำหรับ EC2 และ RDS)
- Key Pair
ผมจะแนะวิธีการลบ Resource ต่างๆ โดยลบเรียงตามที่เขียนไว้ด้านบนนี้
ลบ Database ใน RDS
ผมจะเริ่มลบที่ Database ก่อน เนื่องจากค่อนข้างใช้เวลาในการลบ
ก่อนที่เราจะลบ Database เราต้องตั้งค่า Deletion protection ก่อน จึงจะสามารถลบได้
เข้ามาที่หน้าจอ "RDS > Database" ของเรา แล้วคลิก Modify
เลื่อนลงมาด้านล่างสุดมาที่หัวข้อ Deletion protection
แล้ว Uncheck ☐ Enable deletion protection
ออกให้เหมือนกับรูปภาพ และคลิก Continue
เลือก Apply immediately
และคลิก Modify DB instance
คลิกเข้ามาที่หน้าจอ DB identifier อีกครั้ง แล้วคลิก Action ▼
และเลือก Delete
ทำการ Uncheck Create final snapshot?
และ Retain automated backups
ออกไป แล้วจะมีตัวเลือกเพิ่มขึ้นมา
จากนั้น Check ✅ I acknowledge that upon instance deletion,...
ที่เพิ่มขึ้นมา
แล้วป้อน delete me
และคลิก Delete
ตามรูปภาพ
แล้ว Status จะแสดงเป็น ✕ Deleting
ให้รอสักครู่จนกว่า RDS ของเราจะหายไป (ครั้งนี้ใช้เวลาประมาณ 2 นาที)
การ Terminate Instances, ลบ Key Pair และลบ Security Group ใน EC2
ดูตัวอย่างการ Terminate Instances, ลบ Key Pair และลบ Security Group ได้ที่ลิงก์ด้านล่างนี้
สรุป
เราสามารถเชื่อมต่อจาก EC2 Instance (Amazon Linux 2023) ไปยังฐานข้อมูล RDS for PostgreSQL ผ่าน PostgreSQL Client ที่ติดตั้งใน EC2 Instance และจัดการ Database ตามที่เราต้องการได้อย่างง่ายดาย
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP จากบริษัท Classmethod (Thailand) ครับ !
บทความที่เกี่ยวข้อง
- การติดตั้ง PostgreSQL ใน Amazon Linux 2023 บน EC2 และการใช้งานเบื้องต้น
- วิธีติดตั้ง Amazon Linux 2023 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
- การติดตั้ง MariaDB บน Amazon Linux 2023
- AWS : Amazon RDS คืออะไร
- Amazon EC2 คืออะไร การแนะนำฟังก์ชันล่าสุดของ AWS
- [Update] วิธีการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS