การสร้าง dashboard จาก Amazon DynamoDB ด้วย Amazon Quicksight
สิ่งที่ต้องมี
บัญชีที่สามารถใช้งาน Amazon QuickSight ได้สามารถดูวิธีการสร้างได้ที่บทความด้านล่างโดยมีอยู่ 2 วิธี สามารถเลือกวิธีการใช้งานได้ตามสะดวก
- การสร้างโดยไม่ใช้ IAM Identity Center
- การสร้างด้วย IAM Identity Center
สร้าง S3 bucket ตามบทความด้านล่างเพื่อใช้สำหรับเก็บข้อมูลจากการ query ของ Athena
DynamoDB database ที่มีข้อมูล โดยมีชื่อว่า "DeviceTransactions"
รายละเอียดสามารถดูได้ที่ภาพด้านล่าง
สร้าง Athena
โครงสร้างของ Athena ที่เชื่อมต่อกับ DynamoDB มีรูปร่างแบบภาพด้านล่าง
เมื่อเราทำการ query ด้วย Athena
Athena จะทำการ Federated Query (เพื่อแปลง SQL ที่เราสั่งการเป็นรูปแบบการดึงข้อมูลที่เหมาะสมสำหรับดึงข้อมูลของแหล่งข้อมูลนั้นๆ) ไปยัง DynamoDB เพื่อดึงข้อมูลที่เราสั่งออกมา
อ้างอิง Access, query, and join Amazon DynamoDB tables using Athena
เริ่มด้วยเข้ามาที่ Athena console และเลือกหัวข้อ Data sources and catalogs จากนั้นคลิกที่ “Create data source”
เลือก DynamoDB จากนั้นคลิก “Next”
ตั้งชื่อ Data source name ได้ตามที่ต้องการโดยไม่ซ้ำกับชื่อที่มีอยู่แล้ว จากนั้นเลือก S3 bucket ที่จะเก็บ query และคลิก “Next”
ตามด้วยคลิก “Create data source” หลังจากตรวจสอบข้อมูลเสร็จแล้ว
เมื่อสร้าง data source ขึ้นมาแล้ว Lambda จะถูกสร้างขึ้นมาด้วย
ที่แถบด้านซ้ายเลือก Query editor
(กรณีที่ยังไม่ตั้งค่า S3 bucket เพื่อเก็บ query) จากนั้นเลือกหน้า Settings เพื่อเลือก S3 bucket สำหรับเก็บข้อมูล
กลับมาที่หน้า Editor ในส่วนของ Data source ให้เลือกอันที่เราเพิ่งสร้างมา
จากนั้นในส่วนของ query ผมได้ลองใช้คำสั่งตามด้านล่างเพื่อดึงข้อมูลมาจาก table
select * from "ชื่อ data source"."default"."table จาก DynamoDB";
ผลลัพธ์
รายละเอียดของข้อมูลใน DynamoDB
ลองเชื่อมต่อ Amazon QuickSight
เข้ามาที่ Amazon QuickSight และคลิกที่ “Manage QuickSight”
ในแถบด้านซ้าย ให้เลือก Security & permissions จากนั้นคลิก “Manage”
เลือกรายการตามรูปด้านล่าง โดยตอนเลือก Amazon S3 และ Amazon Athena จะมีให้เลือก S3 bucket
ให้เราเลือก S3 bucket ที่เราสร้างไว้ จากนั้นคลิก “Save”
ให้มาที่ Datasets และคลิกที่ “New dataset”
คลิก "Athena"
ตั้งชื่อ Data source name ตามที่ต้องการ จากนั้นคลิก “Validate connection” และตามด้วยคลิก “Create data source”
จากนั้นเลือก Data source ที่เราสร้าง
จะพบว่าเราไม่มีสิทธ์ที่จะเข้าถึงข้อมูลนี้ได้ ให้ลองสำรวจโดยคลิกที่ “Show details”
รายละเอียดบอกว่า QuickSight role ไม่สามารถเรียกใช้งาน lambda ได้
ดังนั้นเราจะมาเพิ่มสิทธิ์ให้กับ role ของ QuickSight เริ่มจากการคัดลอก arn ของ data source
จากนั้นไปที่ role ของ QuickSight คือ aws-quicksight-service-role-v0 และเพิ่ม policy ด้วยการคลิกที่ “Create inline policy”
คลิกที่ JSON
จากนั้นเพิ่ม policy ตามนี้ โดยนำ arn ที่เราคัดลอกมาใส่ด้วย และคลิก “Create policy”
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn ของ data source"
]
}
]
}
กลับมาที่ QuickSight และลองทำการ refresh จากนั้นลองเชื่อมต่ออีกรอบ
จะพบว่าสามารถเข้าถึงข้อมูลได้แล้ว ให้ทำการเลือก table และคลิก “Select”
คลิก “Visualize”
จะเห็นว่าเราได้เลือก "Import to SPICE for quicker analytics" เพื่อทำการเก็บข้อมูลที่ Athena ทำการ query ไปเอาไว้
สำหรับผู้ที่ไม่ทราบ : SPICE คือแหล่งเก็บข้อมูลสำหรับ Quicksight สามารถอ่านข้อมูลเพิ่มเติมได้ที่นี่
เพียงเท่านี้การดึงข้อมูลมาแสดงที่ QuickSight ก็สำเร็จเรียบร้อย
เราสามารถตกแต่ง dashboard ได้ตามที่เราต้องการ
ค่าใช้จ่าย
สำหรับค่าใช้จ่ายจะมีอยู่ 2 แบบคือ On-Demand Capacity และ Provisioned Capacity
โดยในบทความนี้ได้สร้าง database เป็นแบบ On-Demand Capacity ใน Singapore region
ประเภทปริมาณการประมวลผลแบบ Provisioned
ราคาต่อชั่วโมง
หน่วยความจุในการเขียน (WCU)
USD 0.00074 ต่อ WCU
หน่วยความจุในการอ่าน (RCU)
USD 0.000148 ต่อ RCU
อ้างอิง ราคาสำหรับความจุที่เตรียมใช้งาน
ประเภทปริมาณการประมวลผลแบบ On-Demand
ราคา
หน่วยคำขอเขียน (WRU)
USD 0.71 ต่อหนึ่งล้านหน่วยคำขอเขียน
หน่วยคำขออ่าน (RRU)
USD 0.1425 ต่อหนึ่งล้านหน่วยคำขออ่าน
อ้างอิง ราคาสำหรับความจุตามต้องการ
การคิดค่าใช้จ่ายจะคำนวณจาก RCU (Read capacity Unit) คือหน่วยการอ่านบล็อกข้อมูลที่ขนาดสูงสุดที่ 4 KB โดยจะมีการอ่านอยู่ 2 แบบคือ
Strongly consistent reads ใช้ 1 RCU เพื่ออ่านบล็อกข้อมูลขนาด 4 KB
Eventually consistent reads ใช้ 0.5 RCU เพื่ออ่านบล็อกข้อมูลขนาด 4 KB
โดยทั่วไป DynamoDB จะใช้ Eventually consistent reads สำหรับการอ่านข้อมูล
อ้างอิงจาก DynamoDB read consistency
เราสามารถคำนวณ RCU โดยประมาณได้จาก Table size ของ DynamoDB (ในกรณีที่ query มาทั้งหมดโดยไม่ได้ระบุเจาะจง)
ตัวอย่าง Table size 1.4 MB = 1400 KB
1400 KB / 4 = 350 block
350 block * 0.5 (Eventually consistent reads) = 175 RCU
เมื่อทดลองใช้ Athena ทำการ query ไปที่ DynamoDB จากนั้นไปตรวจสอบที่ CloudWatch จะใช้ 168 RCU จากการอ่านข้อมูลขนาด 1.4 MB
ลองสำรวจใน Cost explorer ค่าใช้จ่ายจะอยู่ที่ 0.00002394 USD
เมื่อลองคำนวณโดยใช้เกณฑ์ USD 0.1425 ต่อหนึ่งล้านหน่วยคำขออ่าน
168 / 1,000,000 = 0.000168
0.000168×0.1425 = $0.00002394
ก็จะได้ค่าใช้จ่ายตรงกับที่แสดงใน Cost explorer
สรุป
บทความนี้สอนวิธีสร้าง Dashboard จากข้อมูลใน Amazon DynamoDB โดยใช้ Amazon QuickSight เริ่มจากการสร้าง Data Source ใน Athena เพื่อเชื่อมต่อกับ DynamoDB แล้วทำการ Query ข้อมูล จากนั้นเชื่อมต่อ QuickSight กับ Athena เพื่อดึงข้อมูลมาสร้างเป็น Dataset และ Visualization ต่างๆ ใน Dashboard ได้ นอกจากนี้ยังอธิบายถึงวิธีการแก้ไขปัญหาเรื่องสิทธิ์การเข้าถึงข้อมูล และการคำนวณค่าใช้จ่ายที่อาจเกิดขึ้นจากการใช้งาน DynamoDB หวังว่าบทความนี้จะช่วยทำให้อยากใช้งาน QuickSight มากขึ้นนะครับ