Última revisión: mayo de 2026
Crea los servicios de AWS del examen PCD 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 aplicación event-driven de PCD más pequeño y realista: un repositorio de Docker en Artifact Registry para alojar tus imágenes de contenedor, un tema + suscripción de Pub/Sub como la columna vertebral de mensajería asíncrona, un servicio de Cloud Run ejecutando una imagen de marcador de posición, y Secret Manager para los secretos de la aplicación. Cinco bloques; cada escenario del examen PCD se construye sobre esta base.
Coloca los fragmentos en un único main.tf, ejecuta terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.your-project-id en el bloque del proveedor.Todo gratuito o casi gratuito en el alcance del laboratorio:
min_instances = 0 — costo inactivo cero.~$0/mes al volumen del laboratorio. Cloud Run con min_instances = 0 es el valor predeterminado recomendado por PCD — sin facturación por inactividad.
Habilita las API de Cloud Run, Artifact Registry, Pub/Sub y Secret Manager.
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-pcd"
managed_by = "terraform"
}
}
resource "google_project_service" "run" {
service = "run.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "artifactregistry" {
service = "artifactregistry.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "pubsub" {
service = "pubsub.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "secretmanager" {
service = "secretmanager.googleapis.com"
disable_on_destroy = false
}Artifact Registry es el registro de contenedores + paquetes de GCP — el reemplazo moderno para el deprecated Container Registry (gcr.io). El examen PCD evalúa este patrón de push a Artifact Registry → desplegar desde Artifact Registry como la forma canónica de CI/CD.
Creamos un repositorio regional en formato Docker. Empuja a él después de terraform apply mediante:
gcloud auth configure-docker us-central1-docker.pkg.dev
docker tag my-app:latest us-central1-docker.pkg.dev/$PROJECT/certlabpro-pcd-images/my-app:latest
docker push us-central1-docker.pkg.dev/$PROJECT/certlabpro-pcd-images/my-app:latest
resource "google_artifact_registry_repository" "images" {
repository_id = "certlabpro-pcd-images"
location = "us-central1"
format = "DOCKER"
description = "PCD lab Docker images"
labels = local.labels
depends_on = [google_project_service.artifactregistry]
}Pub/Sub es el servicio de mensajería gestionado de GCP — la base de cada aplicación event-driven con patrón PCD. Los temas son destinos de publicación; las suscripciones son puntos finales de consumidor (pull o push). El examen PCD evalúa la entrega al menos una vez + consumidores idempotentes como la semántica fundamental.
Creamos:
orders — donde los productores publican.orders-worker — los consumidores extraen de ella. Las implementaciones de producción a menudo utilizan suscripciones push a los puntos finales de Cloud Run en su lugar (la forma canónica event-driven de PCD: Pub/Sub push → Cloud Run); aquí nos quedamos con pull para simplificar IAM.ack_deadline_seconds = 60 da a los consumidores 60 segundos para confirmar; más tiempo que el tiempo de espera predeterminado de solicitud de Cloud Run y un parámetro de ajuste recurrente en el examen PCD.
resource "google_pubsub_topic" "orders" {
name = "orders"
labels = local.labels
depends_on = [google_project_service.pubsub]
}
resource "google_pubsub_subscription" "orders_worker" {
name = "orders-worker"
topic = google_pubsub_topic.orders.id
ack_deadline_seconds = 60
message_retention_duration = "604800s" # 7 days (max)
retry_policy {
minimum_backoff = "10s"
maximum_backoff = "600s"
}
labels = local.labels
}Cloud Run es el contenedor como servicio de GCP — ejecuta contenedores Docker en la infraestructura sin servidor de Google, escala a cero. Patrón recomendado por PCD: cada servicio de Cloud Run se ejecuta como su propia cuenta de servicio, nunca la cuenta de servicio predeterminada de Compute.
Desplegamos un servicio que ejecuta la imagen pública hello como marcador de posición, adjuntamos una cuenta de servicio por servicio con roles/pubsub.subscriber en el tema del Paso 3, y otorgamos roles/run.invoker a allUsers para acceso no autenticado. Cambia a un invocador restringido por IAM para producción — el examen PCD evalúa esta alternancia entre allUsers y una identidad específica.
resource "google_service_account" "worker" {
account_id = "certlabpro-pcd-worker"
display_name = "PCD lab Cloud Run worker"
}
resource "google_pubsub_subscription_iam_member" "worker_subscriber" {
subscription = google_pubsub_subscription.orders_worker.name
role = "roles/pubsub.subscriber"
member = "serviceAccount:${google_service_account.worker.email}"
}
resource "google_cloud_run_v2_service" "worker" {
name = "certlabpro-pcd-worker"
location = "us-central1"
template {
service_account = google_service_account.worker.email
scaling {
min_instance_count = 0 # scale-to-zero — no idle billing
max_instance_count = 5
}
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
resources {
limits = {
cpu = "1"
memory = "512Mi"
}
}
}
}
labels = local.labels
depends_on = [google_project_service.run]
}
resource "google_cloud_run_v2_service_iam_member" "public_invoker" {
name = google_cloud_run_v2_service.worker.name
location = google_cloud_run_v2_service.worker.location
role = "roles/run.invoker"
member = "allUsers" # lab-only; production = specific identity
}Secret Manager es el almacén de secretos de GCP — valores versionados, acceso controlado por IAM, ganchos de rotación automática. Patrón recomendado por PCD: la configuración de la aplicación que no es un secreto se guarda en variables de entorno; la configuración de la aplicación que es un secreto (claves de API, contraseñas de bases de datos, tokens de OAuth) se guarda en Secret Manager, referenciada por el servicio de Cloud Run.
Creamos un secreto + una versión inicial, luego otorgamos a la cuenta de servicio de Cloud Run del Paso 4 roles/secretmanager.secretAccessor sobre él. Para vincular el secreto a Cloud Run como una variable de entorno, añadirías un bloque env { name = "..."; value_source { secret_key_ref { ... } } } en la plantilla del servicio (omitido deliberadamente para mantener este paso enfocado).
resource "google_secret_manager_secret" "db_password" {
secret_id = "certlabpro-pcd-db-password"
replication {
auto {}
}
labels = local.labels
depends_on = [google_project_service.secretmanager]
}
resource "google_secret_manager_secret_version" "db_password_v1" {
secret = google_secret_manager_secret.db_password.id
secret_data = "lab-placeholder-rotate-me"
}
resource "google_secret_manager_secret_iam_member" "worker_reader" {
secret_id = google_secret_manager_secret.db_password.id
role = "roles/secretmanager.secretAccessor"
member = "serviceAccount:${google_service_account.worker.email}"
}terraform destroy derriba todo. El servicio de Cloud Run se destruye (con min_instances = 0 ya no costaba nada). El repositorio de Artifact Registry se destruye (force_destroy es implícito ya que el laboratorio no sube ninguna imagen). Los recursos de Pub/Sub + Secret Manager se destruyen limpiamente.
PCD cubre muchas superficies de desarrollo de aplicaciones de GCP que este laboratorio no puede incluir — Cloud Functions (la alternativa más antigua / ligera a Cloud Run), Cloud Tasks (cola asíncrona duradera), Cloud Scheduler (cron-como-servicio), Cloud Endpoints / API Gateway (superficie de API gestionada frente a Cloud Run), Cloud Trace + Cloud Profiler + Cloud Debugger (telemetría de rendimiento de aplicaciones — la capa [[gcp-pcde]]), Firebase (la plataforma de aplicaciones móviles/web), Cloud Storage (utilizado como alojamiento de activos estáticos para SPAs), Cloud Build (CI/CD — [[gcp-pcde]]), Cloud Deploy (CD — [[gcp-pcde]]), Eventarc (enrutador de eventos de servicios de GCP a Cloud Run / Functions), Workflows (orquestación), Firestore (BD NoSQL para aplicaciones), Memorystore (Redis), Vertex AI para GenAI en aplicaciones, y todo el producto App Engine (legado pero todavía en el temario del examen PCD).
Nos ceñimos a las primitivas de Artifact Registry + Pub/Sub + Cloud Run + Secret Manager porque son la espina dorsal canónica de la aplicación event-driven de PCD. Cloud Functions + Cloud Run comparten el mismo sustrato de imagen de Artifact Registry. Eventarc enruta eventos a Cloud Run / Functions. Cloud Tasks es la variante RPC síncrona de Pub/Sub. Domina el sustrato; las alternativas encajan.
Para una cobertura conceptual servicio por servicio, consulta las secciones de Buscar, Manual y Editorial de esta página de certificación.