Última revisión: mayo de 2026
Crea los servicios de AWS del examen PDE con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al final de este laboratorio, habrá aprovisionado, con Terraform simple, el pipeline de streaming canónico de PDE: un bucket de ingesta de Cloud Storage, un tema de Pub/Sub como entrada de eventos, un conjunto de datos y tabla de BigQuery particionados y agrupados para el control de costos de consulta, y un trabajo de Dataflow Flex Template que transmite de Pub/Sub → BigQuery. Cinco bloques; el patrón Pub/Sub → Dataflow → BigQuery que PDE evalúa en cada examen.
Coloque los fragmentos en un solo main.tf, ejecute terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.your-project-id en el bloque del proveedor.Dataflow es el elemento a observar:
n1-standard-1): ~$50/mes mientras se ejecuta. Destrúyalo rápidamente después de cada sesión de laboratorio.~$50/mes mientras el trabajo de Dataflow esté en ejecución. Deténgalo mediante gcloud dataflow jobs cancel si no tiene intención de dejarlo funcionando.
Habilite las API de Cloud Storage, Pub/Sub, BigQuery y 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
}Los trabajos de Dataflow necesitan un bucket de preparación de GCS para archivos temporales (wheels de Python, cargas de JAR, estado intermedio). Patrón recomendado por PDE: un bucket por dominio de datos, con subcarpetas para staging/, temp/ y templates/ para mantener el estado operativo separado de los datos reales.
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]
}Entrada de streaming canónica de PDE: los publicadores (clickstream, IoT, CDC) envían eventos a un tema de Pub/Sub; Dataflow se suscribe y escribe en BigQuery. Pub/Sub le proporciona entrega duradera y al menos una vez, y la capa de desacoplamiento que le permite cambiar los consumidores sin afectar a los productores.
Creamos el tema events + una suscripción propiedad de Dataflow events-to-bq. El ack_deadline_seconds = 60 de la suscripción es la configuración de Dataflow recomendada por PDE; más larga que la cadencia típica de emisión de ventanas de 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
}El examen PDE evalúa sin cesar esta elección de partición + agrupación. Creamos la tabla events particionada por event_time (granularidad de DÍA, la elección canónica recurrente de PDE) y agrupada por event_type — cada consulta que filtra por event_time omite particiones irrelevantes, cada consulta que filtra por event_type omite bloques irrelevantes dentro de la partición.
require_partition_filter = true obliga a las consultas a incluir una cláusula WHERE event_time >= ... — la protección recomendada por PDE contra escaneos de tablas completas accidentalmente costosos.
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
}Dataflow Flex Templates son la forma canónica de trabajo como recurso en PDE — Google ofrece plantillas predefinidas para patrones comunes (Pub/Sub → BigQuery, Pub/Sub → GCS, JDBC → BigQuery, etc.) y las lanza con parámetros.
Lanzamos la plantilla Pubsub_Subscription_to_BigQuery proporcionada por Google contra la suscripción del Paso 3 y la tabla del Paso 4. El trabajo comienza inmediatamente con terraform apply; aparecerá en Dataflow → Trabajos. Cancélelo cuando termine a través de gcloud dataflow jobs cancel <job-id> --region us-central1 para detener la facturación de ~$50/mes del trabajador.
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 desmantela todo. El trabajo de Dataflow se cancela (on_delete = "cancel") y la facturación de los trabajadores se detiene en pocos minutos. Los recursos de Pub/Sub + BigQuery + GCS se destruyen limpiamente. La tabla de BigQuery que contiene los eventos ingeridos se elimina junto con el conjunto de datos (delete_contents_on_destroy).
PDE cubre muchas superficies de datos de GCP que este laboratorio no puede abarcar — Dataproc (Hadoop/Spark gestionado), Cloud Composer (Airflow gestionado para orquestación por lotes), Cloud Data Fusion (ETL visual), Database Migration Service (DMS), Datastream (CDC de Oracle / MySQL / Postgres → BigQuery), Cloud Storage Transfer Service, BigQuery Omni / BigLake (tablas multi-nube / externas), BigQuery ML (ML en base de datos), BigQuery BI Engine (capa de consulta en caché para Looker), Looker / Looker Studio, Cloud Pub/Sub Lite (más económico pero más limitado), Spanner / Bigtable / Firestore para datos a nivel de aplicación (cubierto en [[gcp-pcdoe]]), Vertex AI Pipelines / Feature Store / Workbench (cubierto en [[gcp-pmle]]), Cloud DLP / Sensitive Data Protection para la redacción de PII.
Nos ceñimos a las primitivas de GCS + Pub/Sub + Dataflow + BigQuery porque son el pipeline de streaming canónico de PDE sobre el que se construye cada escenario de examen. Composer orquesta las mismas formas en lotes. Dataproc es el motor de cómputo alternativo para cargas de trabajo de Spark que escriben en el mismo BigQuery. Datastream es una variante CDC gestionada de la misma forma Pub/Sub → Dataflow → BigQuery. Domine el pipeline canónico; las alternativas se insertan.
Para una cobertura conceptual servicio por servicio, consulte las secciones Buscar, Manual y Editorial de esta página de certificación.