Amazon DynamoDB คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「AWS再入門ブログリレー2022 Amazon DynamoDB編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.06.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับทุกคน ทาคาคุนิ ครับ

รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว

เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ

งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "Amazon DynamoDB" ครับ

Amazon DynamoDB คืออะไร

ถ้าจะให้พูดเกี่ยวกับ Amazon DynamoDB ในคำเดียวก็คือ "Fully managed NoSQL database Service" ครับ

Fully managed หมายความว่าอย่างไร

Fully managed Service หมายถึง Service ที่ AWS จะดูแลจัดการและดำเนินการเอง
เช่น

  • Hardware provisioning, configuration, replication
  • Software patch application
  • Cluster scaling

NoSQL หมายความว่า

NoSQL เป็นคำที่ถูกย่อมาจาก "Not Only SQL" บ่อยๆ ด้วยการที่มันเป็น "Not Only SQL" ทำให้สามารถบันทึกข้อมูลอื่นที่ไม่ใช่รูปแบบ SQL ได้ด้วยนั่นเอง
หรือก็คือ NoSQL สามารถกำหนดเป็น Database สำหรับแบบ Data Model หลายๆแบบได้

โดยสามารถอ่านรายละเอียดเพิ่มเติมได้ที่

โครงสร้าง

Table, Item, Attributes

ภาพประกอบตามด้านล่างนี้ครับ

Table คืออะไร

Table คือ ตารางเป็นทรัพยากรที่รวบรวมรายการ Resource ต่างๆ เช่นเดียวกับ Databases อื่นๆ โดย DynamoDB จะบันทึกเก็บข้อมูลไว้ที่ Table(ไว้ในตาราง)  

Item คืออะไร

ถ้าจะเปรียบเทียบให้เข้าใจ Item ก็คือ ส่วนที่เรียกว่า "row" ของ SQL ครับ

แต่ละ Item จะมี Primary key อยู่เสมอ

Primary key คือตัวระบุที่ไม่ซ้ำ ใช้เพื่อแยกแยะ Item ใน Table

กรณีอย่างในรูปด้านบน "id" "LastName" เป็นส่วนที่ไม่ซ้ำกัน สามารถนำมาเป็น Primary key ได้

แต่ว่า "LastName" เป็นส่วนที่โอกาสที่จะซ้ำสูงเมื่อเพิ่ม Item ใหม่เข้าไป ส่วนใหญ่จึงแนะนำให้ใช้ "id" เป็น Primary key

Table เป็น Schemaless ครับ หมายความว่า ไม่จำเป็นต้องกำหนด Attributes หรือ Data Type ล่วงหน้าครับ
แต่ละ Item สามารถมี Attributes ที่ไม่ซ้ำ และ ไม่เหมือนใครได้ (ถ้าในรูปภาพก็ให้สังเกต Attributes"County")

Item บางส่วน มี Attributes ที่ซ้อนกัน (Address)
DynamoDB ซัพพอร์ต Attributes ที่ซ้อนกันได้ลึกถึง 32 Level

Attributes คืออะไร

ถ้าจะเปรียบเทียบให้เข้าใจ Attributes ก็คือ ส่วนที่เรียกว่า "column" ของ SQL ครับ

ค่าใน Attributes สามารถใส่ซ็ำกันได้ แล้วมีการซัพพอร์ตความลึกถึง 32 Level ครับ

Primary key

ตามที่เขียนข้อความไว้ด้านบนว่า Primary key คือตัวระบุที่ไม่ซ้ำ ใช้เพื่อแยกแยะ Item ใน Table

DynamoDB มีการซัพพอร์ต Primary key 2 ชนิดที่แตกต่างกัน

Partition key

Primary key อย่างง่ายที่ประกอบด้วย Attribute เดียว

Partition key นอกจากที่จะใช้เป็น Primary key แล้ว ยังสามารถใช้เพื่อแบ่ง Partition ที่เก็บข้อมูล ได้ด้วย

Composite primary key


Composite primary key หรือที่รู้จักกันในอีกชื่อ "Partition key and sort key" เป็นรูปแบบการเชื่อมต่อ Partition กับ sort key และใช้เป็น primary key ครับ

โดยสามารถอ่านข้อมูลเพิ่มเติมได้ที่

Availability

DynamoDB จะถูกเก็บไว้ใน 3 AZ(Availability Zone) เป็นรูปแบบที่สามารถป้องกันเมื่อตัวใดตัวนึงเสียหาย
แล้วยังมีการ Partitioning โดยอัตโนมัติ ทำให้สามารถแก้ไขปัญหาในเรื่องพื้นที่เก็บข้อมูลไม่พอได้โดยอัตโนมัติ
โดยสามารถดู ADVANCED DESIGN PATTERNS FOR AMAZON DYNAMODB ได้ที่ลิ้งค์ด้านล่างนะครับ

Performance

Consistency model(รูปแบบความสม่ำเสมอ)

การเขียนข้อมูล

การเขียนข้อมูลของ DynamoDB เป็นแบบ "eventually consistent" ครับ

ถ้าจะอธิบายให้เห็นภาพก็คือ DynamoDB จะรับทราบ (200 OK) เมื่อได้รับการยืนยันว่าการเขียนอย่างน้อย 2 AZ เสร็จสิ้นแล้ว

ทำให้เวลาเราเลือกอ่านข้อมูลโดยเลือก "Eventual consistency" อาจจะมีบาง AZ ที่ยังไม่ได้รับการอัพเดทข้อมูล

การอ่านข้อมูล

Read Consistency - Amazon DynamoDB
DynamoDB supports eventually consistent and strongly consistent reads.

วิธีการอ่านข้อมูลมี 2 ชนิด คือ "eventually consistent" กับ "strongly consistent" ครับ

โดย Default จะเลือก "eventually consistent" ไว้ให้ครับ

การเลือกอ่านข้อมูลแบบ "strongly consistent" จะเป็นการอ่านแบบมีการรับประกันความสม่ำเสมอ แต่เมื่อเทียบกับ "eventually consistent" แล้วอาจจะมี Latency ที่มากขึ้น

Security

Data encryption

DynamoDB สามารถรองรับการเข้ารหัส KMS เมื่อไม่ได้ใช้งาน

  • AWS-owned key: คีย์ที่จัดการโดย AWS, DynamoDB เป็นเจ้าของ
  • AWS Managed Key: คีย์ที่จัดการโดย AWS, KMS เป็นเจ้าของ
  • Customer managed key: คีย์ที่สามารถสร้าง, เป็นเจ้าของ, ควบคุม โดยตัวลูกค้าเอง User ยังสามารถตั้งค่าการควบคุมการเข้าถึงสำหรับคีย์ได้ด้วย

Access control

โดยพื้นฐานแล้ว การเข้าควบคุม Tables ของ DynamoDB จำเป็นต้องผ่าน API

ทำให้เราสามารถควบคุมการเข้าใช้(Access control)ได้โดยการใช้ IAM Policy ครับ

โดย Policy ด้านล่างนี้จะเป็นการอณุญาตให้ Account (123456789012) เข้าไปอ่าน Table Books ได้ครับ

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ReadOnlyAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        }
    ]
}

Network Security

การเชื่อมต่อจาก private network โดยไม่ต้องผ่าน internet

สำหรับ On-premise สามารถใช้ AWS Site-to-Site VPN หรือ AWS Direct Connect เพื่อเข้าใช้งานได้

คุณสามารถใช้ Gateway ของ VPC Endpoint เพื่อเข้าไปใช้งานข้างใน VPC ได้

กรุณาระวัง DynamoDB ไม่ทำการซัพพอร์ตการเชื่อมต่อจาก On-premise ด้วย VGW, VPC Endpoint

Monitoring และ logging

logging

เราสามารถเข้าถึง Table ของ DynamoDB ผ่าน API

ทำให้เราสามารถดู Access Logs จะถูกเก็บอยู่ที่ "CloudTrail" ครับ

Logs ที่ถูกเก็บไว้จะถูก API แบ่งออกเป็น 2 ชนิดคือ "Control Plane" กับ "Data Plane"
ให้ระวังกันต้องที่เปิดดู Logs นะครับ
Logging DynamoDB Operations by Using AWS CloudTrail - Amazon DynamoDB

Metrics

เราสามารถดู Metrics ของ DynamoDB ได้ที่ CloudWatch ครับ

และยังสามารถปรับขนาดปริมาณงานการอ่าน/เขียนตามเกณฑ์ Metrics ได้โดยอัตโนมัติอีกด้วย
DynamoDB Metrics and Dimensions - Amazon DynamoDB
Managing Throughput Capacity Automatically with DynamoDB Auto Scaling - Amazon DynamoDB

สรุป

เป็นยังไงกันบ้างครับกับ Amazon DynamoDB ถ้าใครถามว่า AWS มี NoSQL ไหม เจ้านี้คือตัวแรกที่ผมนึกถึงครับ
เป็นตัวมีที่ความสามารถในด้าน Availability เหมือนกับ Database ตัวอื่น(AZ 3โซน) ถ้าใครมีโอกาสที่จะใช้ Amazon DynamoDB ในอนาคต หรือ อยากรู็เกี่ยวกับ Amazon DynamoDB แล้วเข้ามาอ่านบทความนี้ ผมก็หวังว่าจะเป็นประโยชน์ได้ความรู้กลับไปนะครับ แล้วเจอกันใหม่ในบทความต่อไปครับ

บทความต้นฉบับ

AWS再入門ブログリレー2022 Amazon DynamoDB編 | DevelopersIO

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