[Update] การเชื่อมต่อ RDS จาก Amazon Managed Grafana

Amazon Managed Grafana เป็นบริการเต็มรูปแบบบน Grafana แบบโอเพนซอร์สทำให้ง่ายต่อการจำลองเสมือน ข้อมูลการปฏิบัติงานตามปริมาณ โดยแสดงภาพ วิเคราะห์ และเชื่อมโยงข้อมูลการดำเนินงานในแหล่งข้อมูลต่างๆ และสืบค้นในบัญชี AWS และ Region ต่างๆ ครั้งนี้อยากจะมาแนะนำวิธีการเชื่อมต่อ RDS จาก Amazon Grafana และทดสอบการแสดงผลการดำเนินการใน RDS ผ่าน Dashboard ของ Grafana

สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ

มาพบกันอีกครั้งสำหรับการใช้งาน Amazon Managed Grafana (AMG) ครับ
ปัจจุบันนี้เราสามารถใช้งาน AMG ในรีเจี้ยน Singapore ได้แล้ว
ครั้งนี้จึงอยากจะมาอัปเดตการใช้งาน AMG ร่วมกับ RDS ในบทความนี้ครับ

เป้าหมาย

ครั้งนี้เราจะใช้ Amazon Managed Grafana ที่ตั้งค่าด้วย SAML Authentication ของ Auth0 เชื่อมต่อกับ RDS และทดสอบการแสดงผลข้อมูลใน Database ของ RDS ผ่าน Dashboard โดยขั้นตอนที่เกี่ยวกับ AWS ทั้งหมดจะดำเนินการในรีเจี้ยน Singapore

*การอธิบายในบทความนี้จะย่อคำว่า Amazon Managed Grafana เป็น AMG ครับ

สิ่งที่ต้องมี

※สร้างบัญชี Auth0

ดูวิธีการสร้างบัญชี Auth0 ได้ที่ลิงก์ด้านล่างนี้

การเตรียมหน้า AWS Management Console

Login เข้ามาที่หน้า AWS Management Console แล้วเลือกรีเจี้ยน Singapore ที่แท็บด้านขวาบน

การสร้าง Security Groups ใน EC2

เข้าไปที่ Service EC2 แล้วเลือก Security Groups จากเมนูด้านซ้ายในหัวข้อ "Network & Security" แล้วสร้าง Security Groups ดังนี้

การสร้าง Security Groups สำหรับ AMG

คลิก Create security group แล้วป้อน Security group name และ Description ตามต้องการ เช่น tinnakorn-test-amg

สำหรับ Inbound Rule และ Outbound Rule จะไม่เพิ่มอะไรเข้าไป
ให้เลื่อนลงมาด้านล่างสุด แล้วคลิก Create security group

การสร้าง Security Groups สำหรับ RDS

คลิก Create security group แล้วป้อน Security group name และ Description ตามต้องการ เช่น tinnakorn-test-rds

แล้วตั้งค่าที่หัวข้อ Inbound rules ดังนี้
คลิก Add rule แล้วเลือก Type: MYSQL/Aurora | Source: tinnakorn-test-amg (Security Group ของ AMG)

เลื่อนลงมาด้านล่างสุด แล้วคลิก Create security group

การสร้าง RDS

ครั้งนี้จะสร้าง Database MySQL ใน Amazon RDS

ก่อนที่จะเริ่มทำการสร้าง MySQL ให้ตรวจสอบ Region ที่แท็บด้านขวาบนว่าเป็น Singapore หรือไม่ ถ้าไม่ใช่ให้เปลี่ยนเป็นรีเจี้ยน Singapore

ดูวิธีการสร้าง MySQL ใน Amazon RDS ได้ที่บทความด้านล่างนี้

ตัวอย่างตั้งค่าการสร้าง RDS (MySQL) สำหรับ AMG ของบทความครั้งนี้

เลือก Region: Singapore

※Create RDS (MySQL)
Choose a database creation method
◎ Standard create

Engine options
Engine type: MySQL
Edition: MySQL Community
Engine Version: MySQL 8.0.34

Templates
◎ Production

Availability and durability
Deployment options: Single DB instance

Settings
DB instance identifier: tinnakorn-test-rds
▼ Credentials Settings
Master username: admin
Master password: PassW0rd (รหัสผ่านนี้เป็นแค่ตัวอย่าง ให้ป้อนรหัสผ่านที่ต้องการ)
Confirm master password: PassW0rd

Instance configuration
DB instance class:
◎ Burstable classes (includes t classes)
db.t3.micro

Storage
Storage type: General Purpose SSD (gp2)
Allocated storage: 20
▼ Storage autoscaling
✅ Enable storage autoscaling

Connectivity
Existing VPC security groups: ✅ tinnakorn-test-rds (เลือก Security Group ที่สร้างสำหรับ RDS)

การสร้าง Workspace ใน AMG

ตรวจสอบ Region ที่แท็บด้านขวาบนว่าเป็น Singapore หรือไม่ ถ้าไม่ใช่ให้เปลี่ยนเป็นรีเจี้ยน Singapore

ค้นหา 🔍︎ Amazon Grafana แล้วเลือก Amazon Grafana

คลิก Create workspace หรือเลือก All workspaces จากเมนูด้านซ้ายและคลิก Create workspace ก็ได้ครับ
แล้วจะเข้าไปยังหน้าจอตั้งค่าและทำการตั้งค่าในขั้นตอนถัดไปครับ

Step 1: Specify workspace details
หัวข้อ Workspace details
・ป้อน Workspace name และ Workspace description ตามต้องการ เช่น tinnakorn-test-amg
・สำหรับ Grafana version เลือกได้ตามต้องการ แต่ครั้งนี้จะใช้เป็นค่าเริ่มต้นคือ 9.4 เนื่องจากเป็นเวอร์ชันล่าสุด (อาจมีการอัปเดต Version ในอนาคต)
・จากนั้นคลิก Next

Step 2: Configure settings
หัวข้อ Authentication access
Choose at least one authentication method: ✅ Security Assertion Markup Language (SAML)

หัวข้อ Permission type
⦿ Service managed

หัวข้อ Outbound VPC connection
เลือก VPC ที่ต้องการใช้งาน (ครั้งนี้จะเลือก VPC Default ในรีเจี้ยน Singapore)
แล้วจะมี Mappings และ Security groups ปรากฏขึ้นมาให้ตั้งค่าด้านล่างดังนี้
Mappings
ติ๊ก ✅ ap-southeast-1a, ✅ ap-southeast-1b, ✅ ap-southeast-1c และเลือก Subnet เป็น default ทั้ง 3 ช่อง
Security groups
เลือก Security Groups สำหรับ AMG เช่น tinnakorn-test-amg

จากนั้นเลื่อนลงมาด้านล่างสุด แล้วคลิก Next

Step 3: Service managed permission settings
ขั้นตอนนี้จะไม่ทำการตั้งค่าใดๆ เพราะเราสามารถตั้งค่าได้ภายหลัง ให้เลื่อนลงมาด้านล่างสุด แล้วคลิก Next

Step 4: Review and create
ตรวจสอบข้อมูลที่ตั้งค่าตั้งแต่ Step 1 - Step 3 แล้วคลิก Create workspace

แล้วรอการเปิดใช้งานของ Workspace สักครู่จนกว่า Status เป็น ✅ Active ซึ่งครั้งนี้ใช้เวลาประมาณ 6 นาที (โดยปกติแล้วควรได้รับการเปิดใช้งานเสร็จภายใน 5 - 10 นาที)

เมื่อสร้าง Workspace ใน AMG เสร็จแล้ว ให้เริ่มทำขั้นตอนตามหัวข้อในลิงก์บทความด้านล่างนี้เป็นต้นไป (หัวข้อที่ทำแล้วข้ามไปได้เลยครับ)

เริ่มทำตั้งแต่หัวข้อนี้เป็นต้นไป: การตั้งค่า Workspace ของ Amazon Managed Grafana ใน SAML

การเตรียม Database RDS

เชื่อมต่อ RDS (MySQL) จาก EC2 Instance

ให้สร้าง EC2 Instance เพื่อใช้เชื่อมต่อและจัดการ RDS (MySQL) เนื่องจากเราไม่สามารถจัดการ RDS (MySQL) ได้โดยตรง

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

*ข้อควรระวัง:
・หัวข้อที่ทำแล้วข้ามไปได้เลย
・เมื่อเชื่อมต่อจาก EC2 ไปยัง RDS ได้แล้ว ยังไม่ต้องสร้าง Database เพราะจะสร้างในภายหลัง
・หากรันคำสั่งเชื่อมต่อไปยัง RDS แล้วไม่สำเร็จ ให้ตรวจสอบที่การตั้งค่า Inbound rule ใน Security Group ของ RDS

สร้าง Database สำหรับใช้ทดสอบใน AMG

เมื่อเชื่อมต่อ EC2 ไปยัง RDS ได้แล้ว จะทำการสร้าง Database และรันคำสั่งต่างๆ ใน Terminal ของ EC2 Linux 2023 ในขั้นตอนนี้ครับ

รันคำสั่งสร้าง Database โดยเปลี่ยน "database_name" เป็นชื่อ Database ที่ต้องการ (ตัวอย่างนี้ใช้ชื่อ grafana)

CREATE DATABASE database_name;


แล้วรันคำสั่งนี้เพื่อแสดง Database ก็จะเห็นว่ามี Database ที่ชื่อ grafana เพิ่มขึ้นมาแล้ว

show databases;

Output (example)

root@ip-xx-xx-xx-xx:~

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| grafana            |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.001 sec)

MySQL [(none)]>


แล้วเปลี่ยนฐานข้อมูลไปยัง Database ที่เราสร้างขึ้นเมื่อสักครู่ เช่น grafana (เปลี่ยน "database_name" เป็นชื่อ DB ที่สร้างจากขั้นตอนที่แล้ว)

use database_name;

Output (example)

root@ip-xx-xx-xx-xx:~

MySQL [(none)]> use grafana;
Database changed
MySQL [grafana]>


รันคำสั่งสร้าง Table โดยเปลี่ยน "table_name" เป็นชื่อ Table ที่ต้องการ (ตัวอย่างนี้ใช้ชื่อ data1)

CREATE TABLE table_name
(
  id bigint PRIMARY KEY AUTO_INCREMENT,
  time datetime NOT NULL DEFAULT now(),
  data int NOT NULL
);

Output (example)

root@ip-xx-xx-xx-xx:~

MySQL [grafana]> CREATE TABLE data1
    -> (
    ->   id bigint PRIMARY KEY AUTO_INCREMENT,
    ->   time datetime NOT NULL DEFAULT now(),
    ->   data int NOT NULL
    -> );
Query OK, 0 rows affected (0.076 sec)

MySQL [grafana]>


รันคำสั่ง INSERT ข้อมูลลง Table โดยเปลี่ยน "table_name" เป็นชื่อ Table ที่สร้างจากขั้นตอนที่แล้ว (ตัวอย่างนี้จะเพิ่มข้อมูลลงใน Table ที่ชื่อ data1)

INSERT INTO table_name (data) values (1);
INSERT INTO table_name (data) values (2);

Output (example)

root@ip-xx-xx-xx-xx:~

MySQL [grafana]> INSERT INTO data1 (data) values (1);
Query OK, 1 row affected (0.005 sec)

MySQL [grafana]> INSERT INTO data1 (data) values (2);
Query OK, 1 row affected (0.006 sec)

MySQL [grafana]>


รันคำสั่งแสดงข้อมูลใน Table โดยเปลี่ยน "table_name" เป็นชื่อ Table ที่สร้างเมื่อสักครู่นี้ (ตัวอย่างนี้จะแสดงข้อมูลของ Table ที่ชื่อ data1)

SELECT * from table_name;

Output (example)

root@ip-xx-xx-xx-xx:~

MySQL [grafana]> SELECT * from data1;
+----+---------------------+------+
| id | time                | data |
+----+---------------------+------+
|  7 | 2023-09-22 05:11:20 |    1 |
|  8 | 2023-09-22 05:11:22 |    2 |
+----+---------------------+------+
2 rows in set (0.001 sec)

MySQL [grafana]>

การเชื่อมต่อ RDS จาก AMG

*จากนี้ไปเป็นการใช้งาน AMG ฝั่งที่ไม่ใช่ AWS Management Console แต่เป็นการใช้งาน AMG ฝั่งที่เข้าสู่ระบบด้วย SAML !

กลับมาที่หน้าจอ AMG ที่เข้าสู่ระบบด้วย SAML แล้วทำการเชื่อมต่อ RDS จาก AMG ดังนี้

คลิก ☰ (Toggle menu) ด้านซ้ายบน แล้วเลือก ⚙ Administration ด้านล่าง

แล้วเลือก Data sources จากเมนูด้านซ้าย แล้วคลิก Add data source

ค้นหา MySQL และเลือก MySQL

ป้อนข้อมูลของ RDS เพื่อให้สามารถเชื่อมต่อจาก AMG ได้ดังนี้
หัวข้อ MySQL Connection
・Host: tinnakorn-test-rds.xxxxxxxxxx.ap-southeast-1.rds.amazonaws.com (ป้อน Endpoint ของ RDS)
・Database: grafana (ป้อน Database ที่สร้างใน Query Editor)
・User: admin (ป้อน Master username ตามที่ตั้งค่าตอนสร้าง RDS)
・Password: PassW0rd (ป้อน Master password ตามที่ตั้งค่าตอนสร้าง RDS)

เลื่อนลงมาด้านล่างสุด แล้วคลิก Save & test แล้วรอสักครู่ ถ้าแสดงข้อความ "✅ Database Connection OK" แบบนี้ถือว่าการเชื่อมต่อสำเร็จ

เลือก Data sources จากเมนูด้านซ้ายอีกครั้ง จะเห็นว่ามี Data source ที่เราบันทึกการเชื่อมต่อไว้แล้ว

การสร้าง Dashboard ใน AMG

คลิก ☰ (Toggle menu) ด้านซ้ายบน แล้วเลือก Dashboards

คลิก New และเลือก New Dashboard ด้านขวา

เลือก Add a new panel

ดูที่ด้านล่างซ้าย แล้วตั้งค่าตามนี้
・Dataset: grafana
・Table: data1
・Column: *
・คลิก ▶ Run query
・คลิก Apply ด้านบนขวาสุด

เมื่อสร้างเสร็จแล้วจะแสดงหน้าจอแบบนี้ เส้นสีเหลืองตรงช่วงเวลา 12:30 นี้คือข้อมูลของช่วงเวลาที่รันคำสั่งใน Terminal ของ EC2 Linux ตอนแรก

การทดสอบ Dashboard ใน AMG

รันคำสั่ง SQL ใน Terminal ของ EC2 Linux 2023 เพื่อทดสอบการแสดงผล Dashboard บน AMG

รันคำสั่ง SQL บน Terminal ของ EC2 Linux 2023

กลับมาที่หน้าจอ Terminal ของ EC2 Linux แล้วรันคำสั่ง INSERT ข้อมูลลง Table อีกครั้ง

INSERT INTO table_name (data) values (3);
INSERT INTO table_name (data) values (4);

Output (example)

root@ip-xx-xx-xx-xx:~

MySQL [grafana]> INSERT INTO data1 (data) values (3);
Query OK, 1 row affected (0.005 sec)

MySQL [grafana]> INSERT INTO data1 (data) values (4);
Query OK, 1 row affected (0.005 sec)

MySQL [grafana]>

การตรวจสอบ Dashboard ใน AMG

เข้าไปที่หน้าจอ Dashboard ใน Grafana แล้วตั้งค่า "Quick ranges" และ "Set auto refresh interval" ตามต้องการ เช่น
・เปลี่ยน Quick ranges เป็น Last 30 minutes (ช่วงเวลา 30 นาที)
・เลือก Set auto refresh interval เป็น 5s (Refresh อัตโนมัติทุกๆ 5 วินาที)
แล้วจะแสดงหน้าจอแบบนี้ทุกครั้งตามเวลาที่มีการรันคำสั่งใน Terminal บน EC2 Linux

สรุป

เมื่อทำการเชื่อมต่อ RDS จาก AMG เสร็จแล้ว ถ้ามีการรันคำสั่งใน Terminal ของ EC2 Linux เราก็สามารถตรวจสอบข้อมูลโดยแสดงผลผ่าน Dashboard ของ AMG ตามเวลาที่รันคำสั่งได้อย่างสะดวกและรวดเร็วครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

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