Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen PDE 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 labo, vous aurez provisionné, avec du Terraform simple, le pipeline de streaming PDE canonique — un bucket d'ingestion Cloud Storage, un topic Pub/Sub comme point d'entrée des événements, un dataset + une table BigQuery partitionnés et clusterisés pour le contrôle des coûts de requête, et un job Dataflow Flex Template pour le streaming Pub/Sub → BigQuery. Cinq blocs ; le modèle Pub/Sub → Dataflow → BigQuery que le PDE teste à chaque examen.
Déposez les extraits dans un unique fichier main.tf, exécutez terraform init, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.your-project-id dans le bloc fournisseur.Dataflow est le poste de dépense à surveiller :
n1-standard-1) : environ 50 $/mois pendant son exécution. Détruisez-le rapidement après chaque session de laboratoire.Environ 50 $/mois tant que le job Dataflow est en cours d'exécution. Arrêtez-le via gcloud dataflow jobs cancel si vous n'avez pas l'intention de le laisser tourner.
Activez les API Cloud Storage, Pub/Sub, BigQuery et Dataflow.
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE
region = "us-central1"
}
locals {
labels = {
project = "certlabpro-pde"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "pubsub" {
service = "pubsub.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bigquery" {
service = "bigquery.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "dataflow" {
service = "dataflow.googleapis.com"
disable_on_destroy = false
}Les jobs Dataflow ont besoin d'un bucket de staging GCS pour les fichiers temporaires (roues Python, téléchargements JAR, état intermédiaire). Modèle recommandé par le PDE : un bucket par domaine de données, avec des sous-dossiers pour staging/, temp/ et templates/ afin de séparer l'état opérationnel des données réelles.
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "ingest" {
name = "certlabpro-pde-ingest-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only
labels = local.labels
depends_on = [google_project_service.storage]
}Entrée de streaming canonique PDE : les éditeurs (flux de clics, IoT, CDC) poussent les événements vers un topic Pub/Sub ; Dataflow s'y abonne et écrit dans BigQuery. Pub/Sub vous offre une livraison durable, au moins une fois, et la couche de découplage qui vous permet de modifier les consommateurs sans toucher aux producteurs.
Nous créons le topic events + un abonnement events-to-bq détenu par Dataflow. Le ack_deadline_seconds = 60 de l'abonnement est le paramètre Dataflow recommandé par le PDE ; plus long que la cadence typique d'émission de fenêtre Dataflow.
resource "google_pubsub_topic" "events" {
name = "events"
labels = local.labels
depends_on = [google_project_service.pubsub]
}
resource "google_pubsub_subscription" "events_to_bq" {
name = "events-to-bq"
topic = google_pubsub_topic.events.id
ack_deadline_seconds = 60
message_retention_duration = "604800s" # 7 days
labels = local.labels
}L'examen PDE teste ce choix de partitionnement + clustering sans relâche. Nous créons la table events partitionnée par event_time (granularité JOUR, le choix canonique récurrent du PDE) et clusterisée par event_type — chaque requête filtrant sur event_time ignore les partitions non pertinentes, chaque requête filtrant sur event_type ignore les blocs non pertinents au sein de la partition.
require_partition_filter = true oblige les requêtes à inclure une clause WHERE event_time >= ... — la protection recommandée par le PDE contre les analyses complètes de tables accidentellement coûteuses.
resource "google_bigquery_dataset" "analytics" {
dataset_id = "analytics"
location = "US"
delete_contents_on_destroy = true
labels = local.labels
depends_on = [google_project_service.bigquery]
}
resource "google_bigquery_table" "events" {
dataset_id = google_bigquery_dataset.analytics.dataset_id
table_id = "events"
deletion_protection = false
time_partitioning {
type = "DAY"
field = "event_time"
require_partition_filter = true
}
clustering = ["event_type"]
schema = jsonencode([
{ name = "event_time", type = "TIMESTAMP", mode = "REQUIRED" },
{ name = "event_type", type = "STRING", mode = "REQUIRED" },
{ name = "event_id", type = "STRING", mode = "REQUIRED" },
{ name = "payload", type = "JSON", mode = "NULLABLE" },
])
labels = local.labels
}Les Dataflow Flex Templates sont la forme canonique de job en tant que ressource du PDE — Google fournit des templates pré-construits pour des modèles courants (Pub/Sub → BigQuery, Pub/Sub → GCS, JDBC → BigQuery, etc.) et vous les lancez avec des paramètres.
Nous lançons le template Pubsub_Subscription_to_BigQuery fourni par Google contre l'abonnement de l'étape 3 et la table de l'étape 4. Le job démarre immédiatement après terraform apply ; il apparaîtra sous Dataflow → Jobs. Annulez-le une fois terminé via gcloud dataflow jobs cancel <job-id> --region us-central1 pour arrêter la facturation des workers à environ 50 $/mois.
data "google_project" "current" {}
resource "google_dataflow_flex_template_job" "pubsub_to_bq" {
provider = google-beta
name = "certlabpro-pde-pubsub-to-bq"
container_spec_gcs_path = "gs://dataflow-templates-us-central1/latest/flex/PubSub_Subscription_to_BigQuery"
region = "us-central1"
parameters = {
inputSubscription = google_pubsub_subscription.events_to_bq.id
outputTableSpec = "${data.google_project.current.project_id}:${google_bigquery_dataset.analytics.dataset_id}.${google_bigquery_table.events.table_id}"
}
temp_location = "gs://${google_storage_bucket.ingest.name}/temp"
staging_location = "gs://${google_storage_bucket.ingest.name}/staging"
on_delete = "cancel"
depends_on = [google_project_service.dataflow]
}terraform destroy déconstruit tout. Le job Dataflow est annulé (on_delete = "cancel") et la facturation des workers s'arrête en quelques minutes. Les ressources Pub/Sub + BigQuery + GCS sont supprimées proprement. La table BigQuery contenant les événements ingérés est supprimée avec le dataset (delete_contents_on_destroy).
Le PDE couvre de nombreuses surfaces de données GCP que ce labo ne peut pas inclure — Dataproc (Hadoop / Spark géré), Cloud Composer (Airflow géré pour l'orchestration par lots), Cloud Data Fusion (ETL visuel), Database Migration Service (DMS), Datastream (CDC d'Oracle / MySQL / Postgres → BigQuery), Cloud Storage Transfer Service, BigQuery Omni / BigLake (tables multi-cloud / externes), BigQuery ML (ML en base de données), BigQuery BI Engine (couche de requête mise en cache pour Looker), Looker / Looker Studio, Cloud Pub/Sub Lite (moins cher mais plus limité), Spanner / Bigtable / Firestore pour les données de niveau application (couvert dans [[gcp-pcdoe]]), Vertex AI Pipelines / Feature Store / Workbench (couvert dans [[gcp-pmle]]), Cloud DLP / Sensitive Data Protection pour la rédaction de PII.
Nous nous en tenons aux primitives GCS + Pub/Sub + Dataflow + BigQuery, car elles constituent le pipeline de streaming canonique du PDE sur lequel chaque scénario d'examen s'appuie. Composer orchestre les mêmes formes en mode batch. Dataproc est le moteur de calcul alternatif pour les charges de travail Spark écrivant dans le même BigQuery. Datastream est une variante CDC gérée de la même forme Pub/Sub → Dataflow → BigQuery. Maîtrisez le pipeline canonique ; les alternatives s'intègrent.
Pour une couverture conceptuelle service par service, consultez les sections Parcourir, Guide et Editorial de cette page de certification.