Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen DEA-C01 avec Terraform simple — un bloc à la fois, chacun étant lié à un domaine de l'examen. Le même code fonctionne sur OpenTofu.
À la fin de ce laboratoire, vous aurez provisionné, avec du Terraform simple, la fondation partagée par chaque lac de données AWS — un bucket S3 avec une politique de cycle de vie à plusieurs niveaux, une base de données du catalogue de données Glue, un crawler Glue qui découvre le schéma des objets atterrissant dans S3, et un groupe de travail Athena qui vous permet d'interroger le lac sans provisionner de serveurs. C'est l'architecture que le DEA-C01 appelle data-lake-on-S3, et elle apparaît dans environ un quart des questions d'examen.
Chaque ressource est du Terraform simple — le même code fonctionne sans modification sur OpenTofu. Déposez les extraits dans un seul fichier main.tf, exécutez terraform init, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.us-east-1 (toute région fonctionne ; nous utilisons par défaut us-east-1).Toutes les ressources ici sont au repos à 0 $ :
Le seul point d'attention de la facture est de laisser le crawler Glue planifié. Si vous définissez schedule à une expression cron à l'étape 4 et oubliez de le détruire, le crawler s'exécute indéfiniment — toujours quelques centimes par exécution, mais cela s'accumule si c'est quotidien pendant un an. Détruisez une fois terminé.
Introduction standard. Glue et Athena sont des services régionaux — choisissez la région où se trouvent déjà vos données brutes, car les frais de transfert de données inter-régions s'accumulent rapidement à l'échelle du pétaoctet. Nous utilisons us-east-1 par défaut.
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"
}
}
}Le bucket S3 est l'intégralité du substrat d'un lac de données. Le DEA-C01 teste spécifiquement le cycle de vie des classes de stockage — vous pouvez économiser plus de 80 % sur les données froides en les faisant passer de Standard → Standard-IA → Glacier Flexible → Glacier Deep Archive à mesure qu'elles vieillissent. Nous activons le chiffrement, verrouillons l'accès public et définissons une règle de cycle de vie à trois niveaux qui reflète le modèle de coût du DEA-C01 le plus fréquemment testé.
Les transitions sont de 30 jours → IA, 90 jours → Glacier Flexible Retrieval, 180 jours → Deep Archive. Ces chiffres sont des minimums d'examen (vous ne pouvez pas passer à IA avant 30 jours — c'est une limite stricte de S3, et le DEA-C01 la teste). Pour un lac de données qui mélange des données récentes et d'archivage, ce cycle de vie permet d'économiser 60 à 90 % sur le stockage sans aucune modification d'application.
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"
}
}
}Le catalogue de données Glue est le référentiel de métadonnées central à partir duquel tous les autres services d'analyse AWS lisent — Athena, EMR, Redshift Spectrum, Lake Formation et SageMaker Feature Store partagent tous ce catalogue unique. Le DEA-C01 teste ce modèle de catalogue central sans relâche : vous provisionnez le catalogue une fois, et chaque surface d'analyse de votre compte le reprend automatiquement.
Une database dans Glue est un espace de noms (pensez au schéma dans PostgreSQL) ; une table est la métadonnées décrivant comment lire les objets dans S3 en tant que données structurées. Nous créons la base de données ici ; le crawler à l'étape 4 la remplira avec des tables.
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/"
}Un crawler Glue parcourt un chemin S3, infère les noms et types de colonnes à partir du contenu des fichiers, et écrit le schéma dans la base de données du catalogue de l'étape 3. Chaque fois que de nouveaux fichiers arrivent, vous relancez le crawler et la table récupère automatiquement de nouvelles partitions ou l'évolution du schéma. Le DEA-C01 teste ce modèle de découverte dans le domaine de la gestion et du stockage des données — c'est la différence entre un ingénieur de données qui écrit manuellement du DDL et un ingénieur de données qui laisse Glue le faire.
Le rôle IAM que nous attachons donne au crawler la permission de lire depuis le bucket de l'étape 2 et d'écrire dans le catalogue de l'étape 3. AWS publie une politique gérée AWSGlueServiceRole qui couvre la majeure partie de cela ; nous l'attachons et ajoutons un accès en lecture S3 en ligne à notre bucket spécifique. Nous ne définissons délibérément pas de schedule ici — ajoutez schedule = "cron(0 5 * * ? *)" plus tard si vous souhaitez une actualisation quotidienne du catalogue.
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 interroge le catalogue des étapes 3-4 avec SQL — pas de serveurs, paiement par To analysé. Le domaine Opérations de données du DEA-C01 teste durement deux attributs spécifiques d'Athena : la limite de données analysées par requête (plafonnée ici à 1 Go afin qu'une requête en fuite ne puisse pas accidentellement analyser 100 To), et le bucket de résultats séparé (Athena écrit la sortie de la requête vers S3 ; mélanger les résultats dans le bucket source est l'anti-pattern d'examen récurrent).
Le groupe de travail est l'unité de gouvernance — vous pouvez avoir un groupe de travail production avec des limites d'analyse strictes et un groupe de travail analytics-power-users avec des limites plus élevées, puis attacher des principaux IAM à celui qui convient le mieux. Avec cette dernière pièce en place, la fondation du lac de données est complète : les données arrivent dans s3://<bucket>/raw/, le crawler de l'étape 4 les catalogue, Athena les interroge dans les limites de coût définies par ce groupe de travail.
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 supprime tout dans ce laboratoire. Deux notes :
force_destroy = false (la valeur par défaut sécurisée), donc destroy échouera si l'un d'eux contient des objets (le bucket du lac de l'étape 2 collectera les fichiers bruts ; Athena écrit les résultats dans le bucket de l'étape 5). Videz les deux via la console (ou aws s3 rm s3://<bucket> --recursive) avant de les détruire.Le DEA-C01 couvre plus de terrains d'analyse que ce que ce laboratoire peut montrer en cinq étapes simples de Terraform — Kinesis Data Streams + Kinesis Data Firehose pour l'ingestion en streaming, Amazon EMR pour Spark distribué, AWS Lambda pour la transformation sans serveur, Step Functions pour l'orchestration de pipeline, Redshift pour l'entreposage de données, MSK pour Kafka géré, OpenSearch pour l'analyse de logs, QuickSight pour les tableaux de bord BI, AWS DMS pour la migration de bases de données, et Lake Formation pour les permissions granulaires de lacs de données.
Nous nous en tenons à la fondation unique la plus testée — S3 + Glue Catalog + Glue Crawler + Athena — car c'est le substrat sur lequel tous les autres modèles DEA-C01 se construisent. Kinesis Firehose écrit dans ce bucket S3 ; EMR lit depuis ce catalogue Glue ; Lake Formation contrôle ce groupe de travail Athena. Une fois que vous pouvez construire cette fondation proprement, le reste n'est que des ajouts.
Un deuxième laboratoire pratique couvrant Kinesis Firehose → S3 → Glue → Athena (la variante de streaming de la même chaîne) serait une suite naturelle. La couverture conceptuelle du reste se trouve dans les sections Parcourir, Guide et Editorial de cette page de certification.