0Pricing
AWS Solutions Architect · บทเรียน

การสร้างดาต้าเลคบน S3

ออกแบบดาต้าเลคบน S3 ด้วยโซนรับข้อมูล ประมวลผล และคัดสรร ใช้นโยบายบักเก็ต และจัดระเบียบข้อมูลตามพาร์ทิชันเพื่อเพิ่มประสิทธิภาพการค้นหา

การสร้างดาต้าเลคบน S3 เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

Data Lake คืออะไร

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

สถาปัตยกรรมโซนของ Data Lake

Data Lake บน S3 ที่ออกแบบมาอย่างดีจะใช้ สามโซนเชิงตรรกะ ได้แก่ Landing Zone (รับข้อมูลดิบเข้ามาโดยไม่แก้ไข), Processing Zone (ทำความสะอาดและแปลงข้อมูล) และ Curated Zone (พร้อมสำหรับการวิเคราะห์และการใช้งานทางธุรกิจ) โดยทั่วไปแต่ละโซนจะเป็นคำนำหน้า S3 หรือบักเก็ตแยกกัน รูปแบบนี้บางครั้งเรียกว่า สถาปัตยกรรมเมดัลเลียน (บรอนซ์ เงิน ทอง)

# Example zone structure inside one S3 bucket
# s3://my-data-lake/
#   landing/    <- raw ingest from source systems
#   processing/ <- cleansed, validated data
#   curated/    <- aggregated, analytics-ready

การสร้างโครงสร้างบักเก็ต S3

ใช้ AWS CLI เพื่อสร้างบักเก็ต S3 ที่เปิดใช้การกำหนดเวอร์ชันและการเข้ารหัส แล้วใช้คำนำหน้าสำหรับแต่ละโซน เปิดใช้ การกำหนดเวอร์ชัน เพื่อให้สามารถย้อนกลับไปยังแหล่งข้อมูลดิบได้เสมอเมื่อประมวลผลใหม่ และเปิดใช้ การเข้ารหัสฝั่งเซิร์ฟเวอร์ (SSE-S3 หรือ SSE-KMS) สำหรับข้อมูลที่จัดเก็บอยู่ ปิดกั้นการเข้าถึงแบบสาธารณะทั้งหมดเพื่อรักษาความเป็นส่วนตัวของข้อมูล

aws s3api create-bucket \
  --bucket my-data-lake-123 \
  --region us-east-1

aws s3api put-bucket-versioning \
  --bucket my-data-lake-123 \
  --versioning-configuration Status=Enabled

aws s3api put-bucket-encryption \
  --bucket my-data-lake-123 \
  --server-side-encryption-configuration \
    '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'

การใช้นโยบายบักเก็ตเพื่อควบคุมการเข้าถึงโซน

แต่ละโซนควรมี นโยบายการเข้าถึง ของตนเอง เพื่อให้ทีมและบริการต่าง ๆ เข้าถึงได้เฉพาะสิ่งที่จำเป็น ตัวอย่างเช่น บทบาทการรับข้อมูลจะได้รับสิทธิ์ s3:PutObject บนคำนำหน้าของโซน Landing บทบาท ETL จะได้รับสิทธิ์อ่านในโซน Landing และสิทธิ์เขียนในโซน Processing ส่วนบทบาทการวิเคราะห์จะได้รับสิทธิ์อ่านอย่างเดียวในโซน Curated วิธีนี้ช่วยบังคับใช้หลักสิทธิ์เท่าที่จำเป็นภายใน Data Lake

# Attach a policy that allows the ETL role to read landing/ and write processing/
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:role/ETLRole"},
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-data-lake-123/landing/*"
    },
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:role/ETLRole"},
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-data-lake-123/processing/*"
    }
  ]
}

การแบ่งพาร์ติชันข้อมูลเพื่อเพิ่มประสิทธิภาพการสืบค้น

การแบ่งพาร์ติชัน จะจัดระเบียบข้อมูลใน S3 ตามลำดับชั้นของโฟลเดอร์ที่สอดคล้องกับเพรดิเคตของการสืบค้น (เช่น ปี/เดือน/วัน หรือภูมิภาค/บริการ) เมื่อ Athena หรือ Glue อ่านข้อมูลที่แบ่งพาร์ติชัน ระบบจะสแกนเฉพาะพาร์ติชันที่เกี่ยวข้องแทนการสแกนชุดข้อมูลทั้งหมด ซึ่งช่วยลด ค่าใช้จ่ายและเวลาสืบค้น ได้อย่างมาก คีย์พาร์ติชันที่ดีคือคีย์ที่ปรากฏบ่อยในส่วนคำสั่ง WHERE

# Hive-style partition naming for year/month/day
# s3://my-data-lake-123/curated/sales/
#   year=2024/month=01/day=15/part-00000.parquet
#   year=2024/month=01/day=16/part-00000.parquet
#   year=2024/month=02/day=01/part-00000.parquet

# Athena recognises this naming automatically

รูปแบบข้อมูลแบบคอลัมน์: Parquet และ ORC

การจัดเก็บข้อมูลใน รูปแบบแบบคอลัมน์ เช่น Apache Parquet หรือ ORC (Optimised Row Columnar) ช่วยเพิ่มประสิทธิภาพการสืบค้นเชิงวิเคราะห์และลดค่าใช้จ่ายในการสแกนข้อมูลบน S3 ได้อย่างมาก รูปแบบแบบคอลัมน์ช่วยให้เครื่องมือสืบค้นอ่านเฉพาะคอลัมน์ที่จำเป็น บีบอัดค่าที่ซ้ำกันได้อย่างมีประสิทธิภาพ และรองรับการผลักเพรดิเคตลงไปยังแหล่งข้อมูล ควรแปลง CSV หรือ JSON ดิบเป็น Parquet ในโซน Curated เสมอ

# Converting CSV to Parquet with AWS Glue (simplified PySpark)
import sys
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

datasource = glueContext.create_dynamic_frame.from_catalog(
    database='my_db', table_name='raw_sales')

glueContext.write_dynamic_frame.from_options(
    frame=datasource,
    connection_type='s3',
    connection_options={'path': 's3://my-data-lake-123/curated/sales/'},
    format='parquet')

นโยบายวงจรชีวิต S3 เพื่อจัดการค่าใช้จ่าย

ข้อมูลในโซน Landing เพิ่มขึ้นอย่างต่อเนื่อง แต่ไฟล์ดิบเก่ามักไม่ถูกเรียกใช้อีก ใช้ นโยบายวงจรชีวิต S3 เพื่อเปลี่ยนข้อมูลดิบไปยังคลาสพื้นที่จัดเก็บที่มีราคาถูกลงโดยอัตโนมัติตามเวลา ตัวอย่างเช่น ย้ายออบเจ็กต์ใน landing/ ไปยัง S3 Glacier Instant Retrieval หลังผ่านไป 30 วัน และไปยัง Glacier Deep Archive หลังผ่านไป 90 วัน วิธีนี้เพียงอย่างเดียวสามารถลดค่าใช้จ่ายในการจัดเก็บข้อมูลย้อนหลังได้ 70–90%

aws s3api put-bucket-lifecycle-configuration \
  --bucket my-data-lake-123 \
  --lifecycle-configuration '{
    "Rules": [{
      "ID": "ArchiveLanding",
      "Filter": {"Prefix": "landing/"},
      "Status": "Enabled",
      "Transitions": [
        {"Days": 30, "StorageClass": "GLACIER_IR"},
        {"Days": 90, "StorageClass": "DEEP_ARCHIVE"}
      ]
    }]
  }'

Lake Formation สำหรับการควบคุมการเข้าถึงแบบละเอียด

AWS Lake Formation ทำงานอยู่บน S3 และ Glue Data Catalogue เพื่อให้การควบคุมการเข้าถึงระดับตาราง ระดับคอลัมน์ และระดับแถว โดยไม่ต้องเขียนนโยบายบักเก็ตที่ซับซ้อน Lake Formation ผสานรวมกับ Athena, Redshift Spectrum และ EMR แนวทางนี้เหมาะสมที่สุดเมื่อมีหลายทีมสืบค้น Data Lake เดียวกันและต้องการมองเห็นคอลัมน์ที่มีข้อมูลละเอียดอ่อน เช่น PII หรือข้อมูลทางการเงินแตกต่างกัน

# Grant Lake Formation table access via CLI
aws lakeformation grant-permissions \
  --principal DataLakePrincipalIdentifier=arn:aws:iam::123456789012:role/AnalystRole \
  --permissions SELECT \
  --resource '{
    "Table": {
      "DatabaseName": "my_db",
      "Name": "curated_sales"
    }
  }'

การแจ้งเตือนเหตุการณ์ S3 สำหรับทริกเกอร์การรับข้อมูล

เมื่อมีไฟล์ใหม่เข้ามาในโซน Landing ของ S3 คุณจำเป็นต้องทริกเกอร์การประมวลผลโดยอัตโนมัติ ใช้ การแจ้งเตือนเหตุการณ์ S3 เพื่อเผยแพร่เหตุการณ์ไปยัง SQS, SNS หรือ Lambda ทุกครั้งที่มีการสร้างออบเจ็กต์ จากนั้นฟังก์ชัน Lambda หรือเวิร์กโฟลว์ Glue จะรับไฟล์ใหม่ ตรวจสอบความถูกต้อง และส่งไฟล์ผ่านไปตามกระบวนการ วิธีนี้สร้างกระบวนการรับข้อมูลเข้าสู่ Data Lake ที่ทำงานอัตโนมัติทั้งหมดและขับเคลื่อนด้วยเหตุการณ์

# S3 event notification to trigger Lambda on new object
aws s3api put-bucket-notification-configuration \
  --bucket my-data-lake-123 \
  --notification-configuration '{
    "LambdaFunctionConfigurations": [{
      "LambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:ProcessNewFile",
      "Events": ["s3:ObjectCreated:*"],
      "Filter": {
        "Key": {"FilterRules": [{"Name": "prefix", "Value": "landing/"}]}
      }
    }]
  }'

การเข้ารหัสและการปฏิบัติตามข้อกำหนดใน Data Lake

Data Lake ที่ใช้งานจริงต้องบังคับใช้การเข้ารหัสในทุกจุด ใช้ AWS KMS Customer Managed Keys (CMK) สำหรับ SSE-KMS กับข้อมูลที่มีความละเอียดอ่อน และกำหนดให้ผู้ใช้ข้อมูลแต่ละรายต้องได้รับสิทธิ์ Grant ของคีย์อย่างชัดเจน เปิดใช้ S3 Object Lock ในโหมด Compliance สำหรับข้อมูลตามข้อกำหนดที่ห้ามลบหรือเขียนทับ ใช้ Macie เพื่อค้นหาและแจ้งเตือน PII ที่จัดเก็บอยู่ใน Data Lake โดยอัตโนมัติ

# Enforce KMS encryption on all PUT operations via bucket policy
{
  "Effect": "Deny",
  "Principal": "*",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::my-data-lake-123/curated/*",
  "Condition": {
    "StringNotEquals": {
      "s3:x-amz-server-side-encryption": "aws:kms"
    }
  }
}

การเข้าถึง Data Lake ข้ามบัญชี

ในองค์กรขนาดใหญ่ บักเก็ต S3 ของ Data Lake จะอยู่ในบัญชี แพลตฟอร์มข้อมูล ส่วนกลาง ขณะที่ทีมผู้ใช้ดำเนินงานอยู่ในบัญชี AWS แยกกัน ให้สิทธิ์เข้าถึงโดยใช้ทั้ง นโยบายบักเก็ต ซึ่งระบุ Principal ของบัญชีผู้ใช้ และ บทบาท IAM ในบัญชีผู้ใช้ที่สมมติสิทธิ์แบบข้ามบัญชี Resource Access Manager (RAM) เป็นทางเลือกสำหรับการแชร์ที่อ้างอิง Lake Formation

# Bucket policy in central account allows consumer account to read curated/
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::999988887777:root"
  },
  "Action": ["s3:GetObject", "s3:ListBucket"],
  "Resource": [
    "arn:aws:s3:::my-data-lake-123",
    "arn:aws:s3:::my-data-lake-123/curated/*"
  ]
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า Data Lake ใช้ S3 ร่วมกับโซน Landing, Processing และ Curated, การแบ่งพาร์ติชันและรูปแบบ Parquet ช่วยลดค่าใช้จ่ายในการสืบค้น Athena และ Lake Formation ให้การควบคุมการเข้าถึงระดับคอลัมน์และแถวแบบละเอียด บทถัดไปเราจะสำรวจ AWS Glue สำหรับ ETL แบบไร้เซิร์ฟเวอร์และ Glue Data Catalogue

คำถามที่พบบ่อย

บทเรียน “การสร้างดาต้าเลคบน S3” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างดาต้าเลคบน S3” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างดาต้าเลคบน S3”

ออกแบบดาต้าเลคบน S3 ด้วยโซนรับข้อมูล ประมวลผล และคัดสรร ใช้นโยบายบักเก็ต และจัดระเบียบข้อมูลตามพาร์ทิชันเพื่อเพิ่มประสิทธิภาพการค้นหา คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้างดาต้าเลคบน S3” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม

ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างดาต้าเลคบน S3
  2. AWS Glue: ETL และแค็ตตาล็อกข้อมูล
  3. Amazon Athena: SQL แบบไร้เซิร์ฟเวอร์บน S3
  4. Kinesis Streams, Firehose และการวิเคราะห์แบบเรียลไทม์
← กลับไปที่ AWS Solutions Architect