Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der DEA-C01-Prüfung mit reinem Terraform — ein Block nach dem anderen, jeweils abgestimmt auf eine Prüfungsdomäne. Derselbe Code funktioniert auch mit OpenTofu.
Am Ende dieses Labs haben Sie mit einfachem Terraform die Grundlage provisioniert, die jeder AWS Data Lake teilt – einen S3-Bucket mit einer gestuften Lebenszyklusrichtlinie, eine Glue Data Catalog-Datenbank, einen Glue Crawler, der Schemas von Objekten, die in S3 landen, erkennt, und eine Athena-Arbeitsgruppe, die es Ihnen ermöglicht, den Data Lake ohne Server-Provisionierung abzufragen. Dies ist die Architektur, die DEA-C01 als Data Lake auf S3 bezeichnet, und sie kommt in etwa einem Viertel der Prüfungsfragen vor.
Jede Ressource ist einfaches Terraform – derselbe Code funktioniert ohne Änderungen mit OpenTofu. Fügen Sie die Code-Snippets in eine einzige main.tf Datei ein, führen Sie terraform init aus, gefolgt von terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.us-east-1 (jede Region funktioniert; wir verwenden standardmäßig us-east-1).Alle hier verwendeten Ressourcen verursachen im Leerlauf Kosten von $0:
Eine Kostenfalle ist, den Glue Crawler mit einem Zeitplan laufen zu lassen. Wenn Sie in Schritt 4 schedule auf einen Cron-Ausdruck setzen und vergessen, die Ressourcen zu zerstören, läuft der Crawler ewig — immer noch Cents pro Lauf, aber es summiert sich, wenn er ein Jahr lang täglich läuft. Nach Abschluss die Ressourcen zerstören.
Standardeinleitung. Glue und Athena sind regionale Dienste — wählen Sie die Region, in der sich Ihre Rohdaten bereits befinden, da Gebühren für die regionsübergreifende Datenübertragung im Petabyte-Maßstab schnell ansteigen können. Wir verwenden standardmäßig 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"
}
}
}Der S3-Bucket ist die gesamte Grundlage eines Data Lakes. DEA-C01 prüft speziell den Speicherklassen-Lebenszyklus — Sie können mehr als 80 % der Kosten für kalte Daten einsparen, indem Sie diese mit zunehmendem Alter durch Standard → Standard-IA → Glacier Flexible → Glacier Deep Archive überführen. Wir aktivieren die Verschlüsselung, sperren den öffentlichen Zugriff und legen eine dreistufige Lebenszyklusregel fest, die dem am häufigsten in DEA-C01-Prüfungen getesteten Kostenmuster entspricht.
Die Übergänge sind 30 Tage → IA, 90 Tage → Glacier Flexible Retrieval, 180 Tage → Deep Archive. Diese Zahlen sind Prüfungs-Mindestwerte (Sie können nicht vor 30 Tagen auf IA umstellen — das ist eine harte S3-Grenze, und DEA-C01 testet dies). Für einen Data Lake, der aktuelle und archivierte Daten mischt, spart dieser Lebenszyklus 60–90 % an Speicherkosten ohne Anwendungsänderungen.
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"
}
}
}Der Glue Data Catalog ist der zentrale Metadaten-Speicher, aus dem alle anderen AWS-Analysedienste lesen — Athena, EMR, Redshift Spectrum, Lake Formation und SageMaker Feature Store teilen sich alle diesen einen Katalog. DEA-C01 testet dieses zentrale Katalogmodell unerbittlich: Sie stellen den Katalog einmal bereit, und jede Analysedienstleistung in Ihrem Konto übernimmt ihn automatisch.
Eine database in Glue ist ein Namespace (vergleichbar mit einem Schema in PostgreSQL); eine table sind die Metadaten, die beschreiben, wie Objekte in S3 als strukturierte Daten gelesen werden. Wir erstellen die Datenbank hier; der Crawler in Schritt 4 wird darunter Tabellen füllen.
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/"
}Ein Glue Crawler durchläuft einen S3-Pfad, leitet Spaltennamen und -typen aus den Dateiinhalten ab und schreibt das Schema in die Katalogdatenbank aus Schritt 3. Wenn neue Dateien landen, starten Sie den Crawler erneut, und die Tabelle übernimmt automatisch neue Partitionen oder Schema-Evolutionen. DEA-C01 testet dieses Erkennungsmuster im Bereich Datenspeicherung und -verwaltung — es ist der Unterschied zwischen einem Dateningenieur, der DDL manuell schreibt, und einem Dateningenieur, der Glue die Arbeit überlässt.
Die IAM-Rolle, die wir zuweisen, gibt dem Crawler die Berechtigung, aus dem Bucket aus Schritt 2 zu lesen und in den Katalog aus Schritt 3 zu schreiben. AWS veröffentlicht eine verwaltete Richtlinie AWSGlueServiceRole, die das meiste davon abdeckt; wir fügen sie an und gewähren inline S3-Lesezugriff auf unseren spezifischen Bucket. Wir setzen hier absichtlich keinen schedule — fügen Sie später schedule = "cron(0 5 * * ? *)" ein, wenn Sie eine tägliche Katalogaktualisierung wünschen.
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 fragt den Katalog aus den Schritten 3–4 mit SQL ab — keine Server, Bezahlung pro gescanntem TB. Der DEA-C01-Bereich Datenoperationen prüft zwei spezifische Athena-Attribute intensiv: das pro-Abfrage-Scanlimit für Daten (hier auf 1 GB begrenzt, damit eine fehlerhafte Abfrage nicht versehentlich 100 TB scannt) und der separate Ergebnis-Bucket (Athena schreibt die Abfrageergebnisse zurück nach S3; das Mischen von Ergebnissen in den Quell-Bucket ist ein wiederkehrendes Anti-Muster in Prüfungen).
Die Arbeitsgruppe ist die Einheit der Governance — Sie können eine production-Arbeitsgruppe mit strengen Scan-Limits und eine analytics-power-users-Arbeitsgruppe mit höheren Limits haben und dann IAM-Prinzipale an die jeweils passende anfügen. Mit diesem letzten Baustein ist die Data Lake-Grundlage vollständig: Daten landen in s3://<bucket>/raw/, der Crawler aus Schritt 4 katalogisiert sie, Athena fragt sie innerhalb der von dieser Arbeitsgruppe festgelegten Kostenbegrenzungen ab.
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 entfernt alle Ressourcen in diesem Lab. Zwei Hinweise:
force_destroy = false (die sichere Standardeinstellung), daher schlägt destroy fehl, wenn einer von ihnen Objekte enthält (der Data Lake-Bucket aus Schritt 2 sammelt Rohdateien; Athena schreibt Ergebnisse in den Bucket von Schritt 5). Leeren Sie beide über die Konsole (oder aws s3 rm s3://<bucket> --recursive), bevor Sie die Zerstörung durchführen.DEA-C01 deckt mehr Analysebereiche ab, als dieses Lab in fünf einfachen Terraform-Schritten zeigen kann — Kinesis Data Streams + Kinesis Data Firehose für Streaming-Ingestion, Amazon EMR für verteiltes Spark, AWS Lambda für serverlose Transformation, Step Functions für Pipeline-Orchestrierung, Redshift für Data Warehousing, MSK für verwaltetes Kafka, OpenSearch für Log-Analyse, QuickSight für BI-Dashboards, AWS DMS für Datenbankmigration und Lake Formation für feingranulare Data Lake-Berechtigungen.
Wir beschränken uns auf die am häufigsten getestete Grundlage — S3 + Glue Catalog + Glue Crawler + Athena — weil es die Basis ist, auf der jedes andere DEA-C01-Muster aufbaut. Kinesis Firehose schreibt in diesen S3-Bucket; EMR liest aus diesem Glue Catalog; Lake Formation regelt den Zugriff auf diese Athena-Arbeitsgruppe. Sobald Sie diese Grundlage sauber aufbauen können, ist der Rest nur noch Zusatz.
Ein zweites Hands-on Lab, das Kinesis Firehose → S3 → Glue → Athena (die Streaming-Variante derselben Kette) abdeckt, wäre eine natürliche Fortsetzung. Eine konzeptionelle Abdeckung des Rests finden Sie in den Abschnitten Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.