บทนำ
AWS พึ่งเปิดตัว Amazon S3 Metadata (Preview) เป็น service ใหม่ที่ช่วยจัดการ metadata ของไฟล์ใน S3 bucket แบบอัตโนมัติ ทำให้เราค้นหาและวิเคราะห์ข้อมูลได้ง่ายขึ้นกว่าเมื่อก่อน ผมเดาว่าบางคนอาจสงสัยว่า “แล้วมันต่างจาก S3 Inventory + Athena ที่เคยใช้อยู่ยังไง?” เดี๋ยวเรามาลองดูกันครับ
Amazon S3 Metadata คืออะไร?
Amazon S3 Metadata เป็น service ใหม่ที่ AWS พัฒนาขึ้นเพื่อช่วยจัดการข้อมูล metadata ของไฟล์ที่เก็บใน S3 bucket โดยทำงานแบบอัตโนมัติและ AWS เป็นผู้ดูแลระบบให้ทั้งหมด
การทำงานหลักๆ คือ:
- เมื่อมีการเปลี่ยนแปลงใดๆ กับไฟล์ใน S3 bucket (เช่น upload ไฟล์ใหม่, แก้ไขไฟล์, ลบไฟล์) ระบบจะตรวจจับข้อมูลการเปลี่ยนแปลงนั้น
- ข้อมูลจะถูกเก็บเป็น Apache Iceberg tables ซึ่งเป็น format ที่เหมาะกับการทำ data analytics และเชื่อมต่อกับเครื่องมือวิเคราะห์ข้อมูลต่างๆ ได้ง่าย
- ข้อมูลจะถูกเก็บในอีก bucket หนึ่ง เรียกว่า “S3 table bucket”
- การอัพเดทข้อมูลทำแบบ near real-time คือใช้เวลาเพียงไม่กี่นาทีหลังจากมีการเปลี่ยนแปลง
เราจัดการกับ Metadata ของไฟล์ใน S3 กันยังไงบ้าง?
การจัดการ metadata ของไฟล์ใน S3 เรามีทางเลือกหลักๆ 2 (+1) แบบ:
1. S3 Inventory + Athena (แบบเดิม)
เป็นการใช้ S3 Inventory สร้าง report รายวันของไฟล์ทั้งหมดใน bucket แล้วใช้ Athena query ข้อมูล
ข้อดี:
- Setup ง่าย เพราะเป็น service ของ AWS ทั้งหมด
- ค่าใช้จ่ายต่ำ เพราะสร้าง report แค่วันละ 1-2 ครั้ง
- เหมาะกับการทำ report หรืองานที่นานๆทีจะทำ เช่น เกิดปัญหาขึ้นและต้องการวิเคราะห์หาไฟล์ที่มีขนาดใหญ่เกิน 5 GB
ข้อจำกัด:
- อัพเดทช้า เพราะสร้าง report แค่วันละ 1-2 ครั้ง ทำให้ไม่เห็นการเปลี่ยนแปลงแบบ real-time
- ไม่มีข้อมูลว่าใครเป็นคนเปลี่ยนแปลงไฟล์ หรือเปลี่ยนจากที่ไหน
- ไม่เก็บประวัติการเปลี่ยนแปลง เห็นแค่สถานะปัจจุบัน
2. Custom Metadata System (แบบเดิม)
เป็นการพัฒนาระบบจัดการ metadata ขึ้นมาเอง โดยอาจใช้ database หรือ service อื่นๆ ช่วย
ข้อดี:
- ปรับแต่งได้ตามใจชอบ เช่น เก็บ metadata แบบไหนก็ได้ จัดโครงสร้างยังไงก็ได้
- เชื่อมต่อกับระบบอื่นๆ ในองค์กรได้อย่างยืดหยุ่น
- ทำ real-time update ได้ถ้าต้องการ
ข้อจำกัด:
- ต้องใช้เวลาและ resource มากในการพัฒนา (ทั้งคนและงบประมาณ)
- ต้องดูแลระบบเอง ทั้ง infrastructure และ application
- ถ้าออกแบบไม่ดีพอ อาจมีปัญหาเมื่อข้อมูลเยอะขึ้น
และนี่คือแบบที่ 3 ซึ่งก็คือ S3 Metadata ที่เราพูดถึงกันในบทความนี้
3. S3 Metadata (ของใหม่)
เป็นระบบที่ AWS พัฒนาขึ้นเพื่อแก้ปัญหาและอำนวยความสะดวกให้กับผู้ใช้อย่างเรา (หาเงินจากเรา 😂)
ข้อดี:
- อัพเดทแบบ near real-time ภายในไม่กี่นาที ทำให้เห็นการเปลี่ยนแปลงได้เร็ว
- AWS จัดการ infrastructure ให้ทั้งหมด ไม่ต้องดูแลเอง
- มี event metadata เพิ่มเติม เช่น ใครเป็นคนแก้ไข หรือ แก้ไขโดย IP ไหน
- เชื่อมต่อกับ analytics tools ของ AWS ได้ง่าย เช่น Athena, QuickSight หรือ EMR
ข้อจำกัด:
- ยังเป็น preview ใช้ได้เฉพาะ 3 regions คือ US East (Ohio), US East (N. Virginia) และ US West (Oregon)
- เก็บข้อมูลเฉพาะหลังจากเปิดใช้งานเท่านั้น ไฟล์เก่าจะไม่มีข้อมูล
- ปรับแต่งได้น้อยกว่าการพัฒนาเอง เพราะต้องใช้โครงสร้างตามที่ AWS กำหนด
Metadata ที่เก็บมีอะไรบ้าง?
S3 Metadata จะเก็บข้อมูล 3 ประเภท ดังนี้:
1. System-defined Metadata
ข้อมูลพื้นฐานของไฟล์ที่ S3 จัดเก็บให้อัตโนมัติ เช่น:
- Object size: ขนาดไฟล์เป็น bytes
- Creation/modification time: เวลาที่สร้างหรือแก้ไขล่าสุด
- Storage class: ประเภทการจัดเก็บ เช่น STANDARD, GLACIER
- Encryption status: สถานะการเข้ารหัส เช่น SSE-S3, SSE-KMS
- ETag: ค่า hash ที่ใช้ตรวจสอบความถูกต้องของไฟล์
- Version ID: ID ของเวอร์ชันไฟล์ (ถ้าเปิดใช้ versioning)
- Checksum algorithm: อัลกอริทึมที่ใช้ในการตรวจสอบความถูกต้อง
ตัวอย่างการใช้งาน: ใช้ตรวจสอบว่าไฟล์ขนาดใหญ่ถูกเก็บใน storage class ที่เหมาะสมหรือไม่ หรือใช้หาไฟล์ที่ซ้ำกันใน bucket
2. Custom Metadata
ข้อมูลที่ผู้ใช้กำหนดเองตามความต้องการ:
- Object tags: key-value pairs ที่ใช้จัดหมวดหมู่ข้อมูล เช่น
environment: production
หรือdata-type: customer-data
- User-defined metadata: metadata ที่กำหนดตอน upload เช่น content-type หรือ project-id
ตัวอย่างการใช้งาน: จัดกลุ่มไฟล์ตามโปรเจคหรือ application ใช้กำหนดประเภทเพื่อจำแนกข้อมูลสำหรับการประมวลผล
3. Event Metadata
อันนี้แหละที่เพิ่มเข้ามา เป็นข้อมูลเกี่ยวกับการเปลี่ยนแปลงและการเข้าถึงไฟล์:
- AWS account ID: Account ที่ทำการเปลี่ยนแปลง
- Source IP address: IP ต้นทางที่เข้าถึงข้อมูล
- Request ID: ID ของ request ที่ทำให้เกิดการเปลี่ยนแปลง
- Record type: ประเภทการเปลี่ยนแปลง (CREATE/UPDATE/DELETE)
- Sequence number: ลำดับการเปลี่ยนแปลง ใช้ติดตามประวัติ
วิธีการเปิดใช้งาน S3 Metadata
หากต้องการใช้งาน S3 Metadata ตามนี้ไปเลยครับ:
ตัวอย่าง SQL Query สำหรับ S3 Metadata
ตัวอย่างที่ 1: ค้นหาไฟล์ที่มีขนาดใหญ่กว่า 1MB และจัดเรียงตามวันที่แก้ไขล่าสุด
SELECT key, size, storage_class, encryption_status
FROM mytablebucket.aws_s3_metadata.my_s3_bucket_table
WHERE size > 1000000
ORDER BY last_modified_date DESC
LIMIT 10;
ตัวอย่างที่ 2: ค้นหาไฟล์ที่ถูก upload พร้อมเข้ารหัสด้วย SSE-KMS
SELECT key, size, kms_key_arn, encryption_status
FROM mytablebucket.aws_s3_metadata.my_s3_bucket_table
WHERE encryption_status = 'SSE-KMS'
ORDER BY size DESC;
ตัวอย่างที่ 3: ค้นหาไฟล์ที่มี tag “project=alpha”
SELECT key, size, object_tags
FROM mytablebucket.aws_s3_metadata.my_s3_bucket_table
WHERE object_tags['project'] = 'alpha'
ORDER BY last_modified_date;
Use Cases จากลูกค้าจริง
AWS ได้พูดถึง use cases จากลูกค้าที่ใช้งาน S3 Metadata ในช่วง preview ไว้ดังนี้:
1. Cambridge Mobile Telematics
- ใช้จัดการข้อมูลหลาย petabytes จากอุปกรณ์ IoT ทั่วโลก
- ใช้ custom metadata จัดหมวดหมู่และค้นหาข้อมูลสำหรับพัฒนา insights ใหม่ๆ
- ลดเวลาค้นหาข้อมูลให้เหลือแค่การ query SQL ครั้งเดียว
2. PayPal
- ใช้วิเคราะห์ข้อมูลระดับ trillions objects (ล้านล้านไฟล์)
- ใช้งานร่วมกับ Amazon Athena และ QuickSight
- ลดเวลาที่ใช้ในการสร้างและดูแล data pipeline
3. Roche
- ใช้กับงาน generative AI และ chatbot ภายในองค์กร
- จัดการข้อมูล unstructured เช่น PDF สำหรับ RAG application
- ใช้ Lambda เพิ่ม business-specific metadata และ query ร่วมกับ S3 Metadata
การคิดค่าบริการ
AWS คิดค่าบริการ S3 Metadata จาก 2 ส่วนหลัก:
- จำนวน Updates
- นับเมื่อมีการสร้างไฟล์ใหม่
- นับเมื่อมีการลบไฟล์
- นับเมื่อมีการเปลี่ยนแปลง metadata
- พื้นที่จัดเก็บ Metadata Table
- คิดตามขนาดของ Apache Iceberg table
- รวมพื้นที่ที่ใช้เก็บประวัติการเปลี่ยนแปลงด้วย
หมายเหตุ: รายละเอียดราคาเพิ่มเติมดูได้ที่ S3 Pricing
สรุป
S3 Metadata เป็นทางเลือกที่น่าสนใจสำหรับคนที่:
- มีข้อมูลจำนวนมากใน S3 bucket
- ต้องการระบบจัดการ metadata แบบ near real-time
- ไม่อยากดูแล infrastructure เอง
- ใช้ analytics tools ของ AWS อยู่แล้ว
แต่ถ้าแค่ต้องการ report รายวัน ผมคิดว่า S3 Inventory + Athena ก็ยังเป็นตัวเลือกที่ดีอยู่ หรือถ้าต้องการระบบที่ customize ได้ตามต้องการ การสร้าง Custom Metadata System ก็อาจเป็นทางเลือกที่เหมาะสมกว่า