Última revisión: mayo de 2026
Crea los servicios de AWS del examen ADP 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ás aprovisionado, con Terraform simple, el sustrato de datos ADP más pequeño y realista: un bucket de aterrizaje de Cloud Storage, un conjunto de datos de BigQuery con una tabla particionada por fecha de ingesta y una consulta programada de BigQuery que se ejecuta cada hora, leyendo de un conjunto de datos público y escribiendo en la tabla. Cuatro bloques; la rampa de acceso a la analítica de GCP.
Inserta los fragmentos en un único main.tf, ejecuta terraform init y luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.your-project-id en el bloque del proveedor.Todo gratis en el ámbito del laboratorio:
~$0/mes al volumen del laboratorio. Las cargas de trabajo reales de BigQuery se facturan por los bytes escaneados — particiona + agrupa agresivamente y SELECT solo lo que necesites.
Habilita Cloud Storage, BigQuery y BigQuery Data Transfer Service (que impulsa las consultas programadas).
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-adp"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bigquery" {
service = "bigquery.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bqdts" {
service = "bigquerydatatransfer.googleapis.com"
disable_on_destroy = false
}Cada pipeline de datos con patrón ADP comienza con un bucket de aterrizaje — los archivos sin procesar (CSV / JSON / Parquet / Avro) se depositan aquí, y los trabajos posteriores leen de él. El bucket es el límite entre fuera del lago y dentro del lago. El examen ADP vuelve a evaluar la elección de la clase de almacenamiento aquí — Estándar para la capa de aterrizaje (lecturas frecuentes en los primeros 30 días), con una regla de ciclo de vida que transiciona a Coldline después de 90 días.
El acceso uniforme a nivel de bucket está activado (la configuración de seguridad predeterminada recomendada por ADP).
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "landing" {
name = "certlabpro-adp-landing-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only
lifecycle_rule {
condition {
age = 90
}
action {
type = "SetStorageClass"
storage_class = "COLDLINE"
}
}
labels = local.labels
depends_on = [google_project_service.storage]
}BigQuery es el data warehouse sin servidor de GCP — paga por byte escaneado en la consulta, paga por byte almacenado en los datos. El examen ADP evalúa la partición + el clustering como palancas de control de costos: las tablas particionadas permiten que las consultas omitan datos irrelevantes; las tablas agrupadas colocan filas relacionadas juntas en el almacenamiento.
Creamos:
analytics — el contenedor de BigQuery (el equivalente de GCP de un esquema / base de datos). Establece delete_contents_on_destroy = true para facilitar la limpieza del laboratorio.events con partición por tiempo de ingesta (pseudo-columna _PARTITIONTIME) y expiración de partición de 30 días. Las tablas de producción suelen particionar por una columna (time_partitioning.field) para la selectividad de la consulta.resource "google_bigquery_dataset" "analytics" {
dataset_id = "analytics"
location = "US"
delete_contents_on_destroy = true # lab-only
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 # lab-only
time_partitioning {
type = "DAY"
expiration_ms = 30 * 24 * 60 * 60 * 1000 # 30 days
require_partition_filter = true
}
schema = jsonencode([
{ name = "event_id", type = "STRING", mode = "REQUIRED" },
{ name = "event_type", type = "STRING", mode = "REQUIRED" },
{ name = "event_time", type = "TIMESTAMP", mode = "REQUIRED" },
{ name = "user_id", type = "STRING", mode = "NULLABLE" },
{ name = "payload", type = "JSON", mode = "NULLABLE" },
])
labels = local.labels
}Las consultas programadas son la primitiva del patrón ADP para ingestar de un conjunto de datos de BigQuery a otro con una cadencia fija. Se ejecutan en la infraestructura del BigQuery Data Transfer Service (separado de las consultas bq ad-hoc) y facturan la misma tarifa por byte escaneado.
Programamos una consulta que se ejecuta cada hora, lee del conjunto de datos público bigquery-public-data.samples.shakespeare y escribe en la tabla events del Paso 3. La forma MERGE (upsert) es la respuesta canónica de ADP para la ingesta idempotente — volver a ejecutar la misma hora no inserta duplicados.
La consulta programada se ejecuta como la cuenta de servicio predeterminada del proyecto; las implementaciones de producción utilizan una cuenta de servicio de transferencia dedicada con roles/bigquery.dataEditor en el destino.
resource "google_bigquery_data_transfer_config" "hourly_load" {
display_name = "certlabpro-adp-hourly-load"
data_source_id = "scheduled_query"
location = "US"
schedule = "every 1 hours"
destination_dataset_id = google_bigquery_dataset.analytics.dataset_id
params = {
query = "INSERT INTO `${google_bigquery_dataset.analytics.dataset_id}.${google_bigquery_table.events.table_id}` (event_id, event_type, event_time, user_id, payload) SELECT GENERATE_UUID() AS event_id, \"shakespeare-line\" AS event_type, CURRENT_TIMESTAMP() AS event_time, NULL AS user_id, TO_JSON(STRUCT(word, word_count, corpus)) AS payload FROM `bigquery-public-data.samples.shakespeare` WHERE word_count > 100 LIMIT 100"
}
depends_on = [
google_project_service.bqdts,
google_bigquery_table.events,
]
}terraform destroy destruye todo. El bucket se destruye (solo para laboratorio force_destroy). El conjunto de datos se destruye (solo para laboratorio delete_contents_on_destroy) — sus tablas se van con él. La consulta programada se desvincula y deja de ejecutarse inmediatamente. Los servicios del proyecto permanecen habilitados (gratuitos).
ADP cubre muchas superficies de datos de GCP que este laboratorio no puede abarcar — Dataflow (cubierto en [[gcp-pde]] en el nivel Pro), Dataproc, Pub/Sub, Cloud Composer (Airflow gestionado), Dataform (el IDE de transformación SQL construido sobre BigQuery), Looker Studio, Vertex AI, Cloud Data Fusion, Database Migration Service, Datastream, toda la superficie multi-nube de BigLake / BigQuery Omni, y BigQuery ML (entrenamiento de ML en la base de datos).
Nos ceñimos a las primitivas de GCS + BigQuery + consulta programada porque son la base de la que parten todos los pipelines con patrón ADP. Dataflow / Dataproc transmite o procesa por lotes hacia GCS o BigQuery. Composer / Workflows orquestan las consultas programadas anteriores. Looker lee de BigQuery. Establece la base correctamente; luego añade motores especializados.
Para la cobertura conceptual servicio por servicio, consulta las secciones Buscar, Manual y Editorial de esta página de certificación.