अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ DEA-C01 परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक आप सादे टेराफॉर्म के साथ वह नींव तैयार कर चुके होंगे जो हर AWS डेटा लेक साझा करता है — एक टियर वाली लाइफसाइकिल नीति के साथ एक S3 बकेट, एक ग्लू डेटा कैटलॉग डेटाबेस, एक ग्लू क्रॉलर जो S3 में आने वाले ऑब्जेक्ट्स से स्कीमा का पता लगाता है, और एक एथेना वर्कग्रुप जो आपको सर्वर प्रावधान किए बिना लेक को क्वेरी करने देता है। यह वह आर्किटेक्चर है जिसे DEA-C01 डेटा-लेक-ऑन-S3 कहता है, और यह लगभग एक चौथाई परीक्षा प्रश्नों में आता है।
प्रत्येक संसाधन सादा टेराफॉर्म है — वही कोड ओपनटोफू पर बिना किसी संशोधन के काम करता है। स्निपेट्स को एक ही main.tf में डालें, terraform init चलाएँ, फिर terraform apply को चरण-दर-चरण चलाएँ।
>= 1.5 या ओपनटोफू >= 1.6।us-east-1 के लिए AWS CLI प्रमाणित (कोई भी क्षेत्र काम करता है; हम डिफ़ॉल्ट रूप से us-east-1 का उपयोग करते हैं)।यहाँ सभी संसाधन $0 पर निष्क्रिय रहते हैं:
एक बिल-संबंधी सावधानी यह है कि ग्लू क्रॉलर को शेड्यूल पर छोड़ना। यदि आप स्टेप 4 में schedule को एक क्रॉन एक्सप्रेशन पर सेट करते हैं और नष्ट करना भूल जाते हैं, तो क्रॉलर हमेशा चलता रहेगा — अभी भी प्रति रन कुछ पैसे लगते हैं, लेकिन यदि यह एक साल तक रोज़ चलता है तो यह जुड़ जाता है। काम पूरा होने पर नष्ट कर दें।
मानक शुरुआती चरण। ग्लू और एथेना क्षेत्रीय सेवाएँ हैं — वह क्षेत्र चुनें जहाँ आपका कच्चा डेटा पहले से मौजूद है, क्योंकि पेटाबाइट स्केल पर क्रॉस-रीजन डेटा ट्रांसफर शुल्क तेज़ी से जुड़ जाते हैं। हम 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 दिन → ग्लेशियर फ्लेक्सिबल रिट्रीवल, 180 दिन → डीप आर्काइव हैं। ये संख्याएँ परीक्षा न्यूनतम हैं (आप 30 दिनों से पहले IA में ट्रांजिशन नहीं कर सकते — यह एक 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"
}
}
}ग्लू डेटा कैटलॉग वह केंद्रीय मेटाडेटा स्टोर है जिससे अन्य सभी AWS एनालिटिक्स सेवाएँ पढ़ती हैं — एथेना, EMR, रेडशिफ्ट स्पेक्ट्रम, लेक फॉर्मेशन, और सेजमेकर फीचर स्टोर सभी इस एक कैटलॉग को साझा करते हैं। DEA-C01 इस केंद्रीय-कैटलॉग मॉडल का लगातार परीक्षण करता है: आप कैटलॉग को एक बार प्रोविज़न करते हैं, और आपके खाते में प्रत्येक एनालिटिक्स सतह इसे स्वचालित रूप से उठा लेती है।
ग्लू में एक database एक नेमस्पेस है (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/"
}एक ग्लू क्रॉलर एक S3 पाथ पर चलता है, फ़ाइल सामग्री से कॉलम के नाम और प्रकार का अनुमान लगाता है, और स्टेप 3 से कैटलॉग डेटाबेस में स्कीमा लिखता है। जब भी नई फ़ाइलें आती हैं, आप क्रॉलर को फिर से चलाते हैं और टेबल स्वचालित रूप से नए पार्टिशन या स्कीमा विकास को उठा लेती है। DEA-C01 डेटा स्टोरेज और प्रबंधन डोमेन के तहत इस खोज पैटर्न का परीक्षण करता है — यह एक डेटा इंजीनियर द्वारा मैन्युअल रूप से DDL लिखने और एक डेटा इंजीनियर द्वारा ग्लू को यह करने देने के बीच का अंतर है।
हम जो 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"
}
}एथेना SQL के साथ स्टेप 3-4 से कैटलॉग को क्वेरी करता है — कोई सर्वर नहीं, प्रति-TB-स्कैन के आधार पर भुगतान। DEA-C01 डेटा ऑपरेशंस डोमेन दो विशिष्ट एथेना विशेषताओं का कड़ाई से परीक्षण करता है: प्रति-क्वेरी डेटा-स्कैन सीमा (यहां 1 GB पर कैप की गई है ताकि एक अनियंत्रित क्वेरी गलती से 100 TB स्कैन न कर सके), और अलग परिणाम बकेट (एथेना क्वेरी आउटपुट को वापस S3 में लिखता है; परिणामों को स्रोत बकेट में मिलाना एक आवर्ती परीक्षा एंटी-पैटर्न है)।
वर्कग्रुप शासन की इकाई है — आपके पास सख्त स्कैन सीमाओं वाला एक production वर्कग्रुप और उच्च सीमाओं वाला एक analytics-power-users वर्कग्रुप हो सकता है, फिर IAM प्रिंसिपल्स को जो भी फिट बैठता है, उससे संलग्न करें। इस अंतिम टुकड़े के साथ, डेटा-लेक की नींव पूरी हो गई है: डेटा s3://<bucket>/raw/ में आता है, स्टेप 4 का क्रॉलर इसे कैटलॉग करता है, एथेना इस वर्कग्रुप द्वारा निर्धारित लागत सुरक्षा उपायों के भीतर इसे क्वेरी करता है।
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 (सुरक्षित डिफ़ॉल्ट) है, इसलिए यदि किसी में ऑब्जेक्ट्स हैं (स्टेप 2 से लेक बकेट में रॉ फ़ाइलें जमा होंगी; एथेना स्टेप 5 के बकेट में परिणाम लिखता है) तो destroy विफल हो जाएगा। नष्ट करने से पहले कंसोल के माध्यम से (या aws s3 rm s3://<bucket> --recursive) दोनों को खाली करें।DEA-C01 इस लैब में पाँच सादे-टेराफॉर्म चरणों में दिखाए जाने वाले से अधिक एनालिटिक्स क्षेत्र को कवर करता है — स्ट्रीमिंग इन्जेस्टियन के लिए किनेसिस डेटा स्ट्रीम्स + किनेसिस डेटा फायरहोस, वितरित स्पार्क के लिए अमेज़न EMR, सर्वरलेस ट्रांसफॉर्मेशन के लिए AWS लैम्ब्डा, पाइपलाइन ऑर्केस्ट्रेशन के लिए स्टेप फंक्शन्स, डेटा वेयरहाउसिंग के लिए रेडशिफ्ट, प्रबंधित काफ्का के लिए MSK, लॉग एनालिटिक्स के लिए ओपनसर्च, BI डैशबोर्ड के लिए क्विकसाइट, डेटाबेस माइग्रेशन के लिए AWS DMS, और फाइन-ग्रेन्ड डेटा लेक परमिशन के लिए लेक फॉर्मेशन।
हम सबसे अधिक परीक्षण किए गए एकल नींव — S3 + Glue कैटलॉग + Glue क्रॉलर + एथेना — पर टिके रहते हैं, क्योंकि यह वह आधार है जिस पर अन्य सभी DEA-C01 पैटर्न बनते हैं। किनेसिस फायरहोस इस S3 बकेट में लिखता है; EMR इस Glue कैटलॉग से पढ़ता है; लेक फॉर्मेशन इस एथेना वर्कग्रुप को गेट करता है। एक बार जब आप इस नींव को सफाई से बना सकते हैं, तो बाकी सब जोड़ हैं।
किनेसिस फायरहोस → S3 → ग्लू → एथेना (उसी श्रृंखला का स्ट्रीमिंग वैरिएंट) को कवर करने वाली एक दूसरी हैंड्स-ऑन लैब एक स्वाभाविक अनुवर्ती होगी। बाकी की अवधारणात्मक कवरेज इस प्रमाणन पृष्ठ के ब्राउज़, मार्गदर्शिका, और Editorial अनुभागों पर रहती है।