נבדק לאחרונה: מאי 2026
בנו את שירותי AWS של בחינת DEA-C01 עם Terraform פשוט — בלוק אחד בכל פעם, כאשר כל אחד מהם מקושר בחזרה לתחום במבחן. אותו הקוד עובד גם ב-OpenTofu.
בסוף מעבדה זו, תספק באמצעות Terraform פשוט את התשתית המשותפת לכל אגם נתונים ב-AWS – דלי S3 עם מדיניות מחזור חיים מדורגת, מסד נתונים של Glue Data Catalog, זחלן Glue המגלה סכימה מאובייקטים הנוחתים ב-S3, וקבוצת עבודה של Athena המאפשרת לך לשלוף נתונים מאגם הנתונים מבלי לספק שרתים. זוהי הארכיטקטורה ש-DEA-C01 מכנה אגם-נתונים-על-S3, והיא מופיעה בכרבע משאלות הבחינה.
כל המשאבים הם Terraform פשוט – אותו קוד עובד ללא שינוי ב-OpenTofu. שחרר את המקטעים לקובץ main.tf אחד, הרץ terraform init, ולאחר מכן terraform apply צעד אחר צעד.
>= 1.5 או OpenTofu >= 1.6.us-east-1 (כל אזור יעבוד; אנו בוחרים בברירת מחדל ב-us-east-1).כל המשאבים כאן בעלות של 0$ במצב סרק:
הדבר היחיד שיש להיזהר ממנו בחשבון הוא השארת זחלן ה-Glue בלוח זמנים. אם תגדיר schedule לביטוי cron בשלב 4 ותשכח להשמיד, הזחלן ירוץ לנצח – עדיין אגורות להרצה, אבל זה מצטבר אם זה יומיומי למשך שנה. השמד בסיום.
פתיחה סטנדרטית. Glue ו-Athena הם שירותים אזוריים – בחר את האזור שבו נמצאים כבר נתוני הגלם שלך, מכיוון שעלויות העברת נתונים בין אזורים מצטברות במהירות בקנה מידה של פטאבייט. אנו בוחרים בברירת מחדל ב-us-east-1.
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
Project = "certlabpro-dea-c01"
ManagedBy = "terraform"
}
}
}דלי S3 הוא התשתית כולה של אגם נתונים. DEA-C01 בודק באופן ספציפי את מחזור החיים של מחלקת האחסון – ניתן לחסוך 80%+ בנתונים קרים על ידי מעבר דרך Standard → Standard-IA → Glacier Flexible → Glacier Deep Archive ככל שהם מתיישנים. אנו מפעילים הצפנה, נועלים גישה ציבורית ומגדירים כלל מחזור חיים תלת-שכבתי המשקף את דפוס העלות הנפוץ ביותר שנבדק ב-DEA-C01.
המעברים הם 30 יום → IA, 90 יום → Glacier Flexible Retrieval, 180 יום → Deep Archive. מספרים אלה הם מינימום לבחינה (לא ניתן לעבור ל-IA לפני 30 יום – זו מגבלה קשה של S3, ו-DEA-C01 בודק אותה). עבור אגם נתונים המשלב נתונים עדכניים וארכיוניים, מחזור חיים זה חוסך 60–90% באחסון ללא כל שינוי ביישום.
resource "aws_s3_bucket" "lake" {
bucket_prefix = "certlabpro-dea-c01-"
}
resource "aws_s3_bucket_public_access_block" "lake" {
bucket = aws_s3_bucket.lake.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "lake" {
bucket = aws_s3_bucket.lake.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_lifecycle_configuration" "lake" {
bucket = aws_s3_bucket.lake.id
rule {
id = "tier-cold-data"
status = "Enabled"
filter { prefix = "raw/" }
transition {
days = 30
storage_class = "STANDARD_IA"
}
transition {
days = 90
storage_class = "GLACIER"
}
transition {
days = 180
storage_class = "DEEP_ARCHIVE"
}
}
}Glue Data Catalog הוא מאגר המטא-נתונים המרכזי שכל שירותי הניתוח האחרים של AWS קוראים ממנו – Athena, EMR, Redshift Spectrum, Lake Formation ו-SageMaker Feature Store, כולם חולקים קטלוג אחד זה. DEA-C01 בודק את מודל הקטלוג המרכזי הזה ללא הרף: אתה מספק את הקטלוג פעם אחת, וכל משטח ניתוח בחשבונך קולט אותו אוטומטית.
database ב-Glue הוא מרחב שמות (חשוב על schema ב-PostgreSQL); table הוא המטא-נתונים המתארים כיצד לקרוא אובייקטים ב-S3 כנתונים מובנים. אנו יוצרים את מסד הנתונים כאן; הזחלן בשלב 4 יאכלס טבלאות תחתיו.
resource "aws_glue_catalog_database" "main" {
name = "certlabpro_dea_c01"
description = "Glue Catalog database for the certlabpro DEA-C01 lab."
location_uri = "s3://${aws_s3_bucket.lake.bucket}/raw/"
}זחלן Glue סורק נתיב S3, מסיק שמות ועמודות מהתארוך של הקבצים, וכותב את הסכימה למסד הנתונים של הקטלוג משלב 3. בכל פעם שנוחתים קבצים חדשים, אתה מריץ מחדש את הזחלן והטבלה קולטת מחיצות חדשות או התפתחות סכימה אוטומטית. DEA-C01 בודק דפוס גילוי זה תחת תחום אחסון וניהול נתונים – זה ההבדל בין מהנדס נתונים הכותב DDL ידנית לבין מהנדס נתונים המאפשר ל-Glue לעשות זאת.
תפקיד ה-IAM שאנו מצרפים נותן לזחלן הרשאה לקרוא מהדלי משלב 2 ולכתוב לקטלוג משלב 3. AWS מפרסמת מדיניות מנוהלת AWSGlueServiceRole המכסה את רוב זה; אנו מצרפים אותה ומוסיפים גישת קריאה פנימית ל-S3 לדלי הספציפי שלנו. בכוונה איננו מגדירים schedule כאן – הכנס schedule = "cron(0 5 * * ? *)" מאוחר יותר אם אתה רוצה רענון קטלוג יומי.
resource "aws_iam_role" "glue_crawler" {
name = "certlabpro-dea-c01-glue-crawler"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "glue.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "glue_service" {
role = aws_iam_role.glue_crawler.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole"
}
resource "aws_iam_role_policy" "glue_lake_read" {
name = "read-lake-bucket"
role = aws_iam_role.glue_crawler.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:ListBucket"]
Resource = [aws_s3_bucket.lake.arn, "${aws_s3_bucket.lake.arn}/*"]
}]
})
}
resource "aws_glue_crawler" "raw_data" {
name = "certlabpro-dea-c01-raw-data"
database_name = aws_glue_catalog_database.main.name
role = aws_iam_role.glue_crawler.arn
s3_target {
path = "s3://${aws_s3_bucket.lake.bucket}/raw/"
}
schema_change_policy {
update_behavior = "UPDATE_IN_DATABASE"
delete_behavior = "LOG"
}
}Athena שולחת שאילתות לקטלוג משלבים 3–4 באמצעות SQL – ללא שרתים, תשלום לפי TB שנסרק. תחום פעולות נתונים של DEA-C01 בודק שני מאפיינים ספציפיים של Athena באופן קפדני: מגבלת נתונים שנסרקו לכל שאילתה (מוגבלת כאן ל-1 GB כך ששאילתה שיצאה משליטה לא תוכל לסרוק בטעות 100 TB), ודלי תוצאות נפרד (Athena כותבת את פלט השאילתה בחזרה ל-S3; ערבוב תוצאות לדלי המקור הוא דפוס אנטי חוזר ונשנה בבחינה).
קבוצת העבודה היא יחידת הממשל – יכולה להיות לך קבוצת עבודה production עם מגבלות סריקה מחמירות וקבוצת עבודה analytics-power-users עם מגבלות גבוהות יותר, ואז לצרף עקרונות IAM לכל אחת מהן לפי הצורך. עם השלמת החלק האחרון הזה, תשתית אגם הנתונים מוכנה: נתונים נוחתים ב-s3://<bucket>/raw/, הזחלן משלב 4 מקטלג אותם, ו-Athena שולחת שאילתות אליהם בגבולות העלות שקבוצת עבודה זו מגדירה.
resource "aws_s3_bucket" "athena_results" {
bucket_prefix = "certlabpro-dea-c01-athena-results-"
}
resource "aws_s3_bucket_public_access_block" "athena_results" {
bucket = aws_s3_bucket.athena_results.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_athena_workgroup" "main" {
name = "certlabpro-dea-c01"
state = "ENABLED"
configuration {
enforce_workgroup_configuration = true
publish_cloudwatch_metrics_enabled = true
bytes_scanned_cutoff_per_query = 1073741824 # 1 GB per query — runaway-query guardrail
result_configuration {
output_location = "s3://${aws_s3_bucket.athena_results.bucket}/output/"
encryption_configuration {
encryption_option = "SSE_S3"
}
}
}
}terraform destroy מפרק את כל מה שבמעבדה זו. שתי הערות:
force_destroy = false (ברירת המחדל הבטוחה), כך שפעולת destroy תיכשל אם אחד מהם מכיל אובייקטים (דלי האגם משלב 2 יאסוף קבצי גלם; Athena כותבת תוצאות לדלי של שלב 5). רוקן את שניהם דרך המסוף (או aws s3 rm s3://<bucket> --recursive) לפני ההשמדה.DEA-C01 מכסה שטח ניתוח נרחב יותר ממה שמעבדה זו יכולה להראות בחמישה שלבי Terraform פשוטים – Kinesis Data Streams + Kinesis Data Firehose להזרמת נתונים, Amazon EMR עבור Spark מבוזר, AWS Lambda לטרנספורמציה ללא שרתים, Step Functions לתיאום צינורות נתונים, Redshift לאחסון נתונים, MSK עבור Kafka מנוהל, OpenSearch לניתוח יומנים, QuickSight עבור לוחות מחוונים של BI, AWS DMS להעברת מסדי נתונים, ו-Lake Formation להרשאות אגם נתונים מפורטות.
אנו נצמדים ליסוד הנבדק ביותר – S3 + Glue Catalog + Glue Crawler + Athena – מכיוון שזו התשתית שעליה נבנים כל שאר דפוסי DEA-C01. Kinesis Firehose כותב לדלי S3 זה; EMR קורא מ-Glue Catalog זה; Lake Formation שומר על קבוצת עבודה זו של Athena. ברגע שתוכל לבנות תשתית זו באופן נקי, השאר הם הרחבות.
מעבדת ידיים נוספת המכסה Kinesis Firehose → S3 → Glue → Athena (וריאנט הזרמת הנתונים של אותה שרשרת) תהיה המשך טבעי. סיקור מושגי של השאר נמצא בחוצצים עיון, מדריך ו-Editorial בדף הסמכה זה.