Última revisão: maio de 2026
Construa os serviços da AWS do exame PCD com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Até o final deste laboratório, você terá provisionado, com Terraform simples, o menor substrato de aplicativo orientado a eventos PCD realista — um repositório Docker do Artifact Registry para hospedar suas imagens de contêiner, um tópico + assinatura do Pub/Sub como a espinha dorsal de mensagens assíncronas, um serviço Cloud Run executando uma imagem de espaço reservado e o Secret Manager para segredos de aplicativo. Cinco blocos; cada cenário de exame PCD se compõe nesta base.
Solte os snippets em um único main.tf, execute terraform init, então terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.your-project-id no bloco do provedor.Tudo gratuito ou quase gratuito no escopo do laboratório:
min_instances = 0 — custo ocioso zero.~$0/mês no volume do laboratório. O Cloud Run com min_instances = 0 é o padrão recomendado pelo PCD — sem cobrança por ociosidade.
Habilite as APIs do Cloud Run, Artifact Registry, Pub/Sub e 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 é o registro de contêineres + pacotes do GCP — o substituto moderno para o Container Registry (gcr.io) obsoleto. O exame PCD testa este padrão de push para Artifact Registry → deploy do Artifact Registry como o formato canônico de CI/CD.
Criamos um repositório regional no formato Docker. Faça o push para ele após terraform apply via:
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 é o serviço de mensagens gerenciado do GCP — a base de todo aplicativo orientado a eventos no padrão PCD. Tópicos são destinos de publicação; assinaturas são endpoints de consumidor (pull ou push). O exame PCD testa a entrega pelo menos uma vez + consumidores idempotentes como a semântica de suporte de carga.
Nós criamos:
orders — onde os produtores publicam.orders-worker — os consumidores puxam dela. Implantações de produção frequentemente usam assinaturas push para endpoints do Cloud Run (o formato canônico de evento do PCD: Pub/Sub push → Cloud Run); ficamos com pull aqui para manter o IAM mais simples.ack_deadline_seconds = 60 dá aos consumidores 60 segundos para confirmar; mais longo que o tempo limite de requisição padrão do Cloud Run e um ajuste recorrente no exame 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 é o contêiner-como-serviço do GCP — executa contêineres Docker na infraestrutura serverless do Google, escalando para zero. Padrão recomendado pelo PCD: cada serviço Cloud Run é executado com sua própria conta de serviço, nunca a conta de serviço padrão do Compute.
Nós implantamos um serviço executando a imagem pública hello como um espaço reservado, anexamos uma conta de serviço por serviço com roles/pubsub.subscriber no tópico da Etapa 3 e concedemos roles/run.invoker para allUsers para acesso não autenticado. Mude para invocador protegido por IAM para produção — o exame PCD testa essa alternância de allUsers ↔ identidade 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 é o armazenamento de segredos do GCP — valores versionados, acesso controlado por IAM, hooks de rotação automática. Padrão recomendado pelo PCD: a configuração do aplicativo que não é um segredo vai em variáveis de ambiente; a configuração do aplicativo que é um segredo (chaves de API, senhas de DB, tokens OAuth) vai no Secret Manager, referenciado pelo serviço Cloud Run.
Nós criamos um segredo + versão inicial, então concedemos à conta de serviço do Cloud Run da Etapa 4 roles/secretmanager.secretAccessor sobre ele. Para integrar o segredo ao Cloud Run como uma variável de ambiente, você adicionaria um bloco env { name = "..."; value_source { secret_key_ref { ... } } } no modelo de serviço (omitido deliberadamente para manter esta etapa focada).
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 derruba tudo. O serviço Cloud Run é destruído (com min_instances = 0 ele já não estava custando nada). O repositório Artifact Registry é destruído (force_destroy é implícito, pois o laboratório não faz push de nenhuma imagem). Os recursos Pub/Sub + Secret Manager são destruídos de forma limpa.
O PCD cobre muitas superfícies de desenvolvedor de aplicativos GCP que este laboratório não pode abranger — Cloud Functions (a alternativa mais antiga / leve ao Cloud Run), Cloud Tasks (fila assíncrona durável), Cloud Scheduler (cron-as-a-service), Cloud Endpoints / API Gateway (superfície de API gerenciada na frente do Cloud Run), Cloud Trace + Cloud Profiler + Cloud Debugger (telemetria de desempenho de aplicativos — o nível [[gcp-pcde]]), Firebase (a plataforma de aplicativos móveis/web), Cloud Storage (usado como hospedagem de ativos estáticos para SPAs), Cloud Build (CI/CD — [[gcp-pcde]]), Cloud Deploy (CD — [[gcp-pcde]]), Eventarc (roteador de eventos de serviços GCP para Cloud Run / Functions), Workflows (orquestração), Firestore (DB NoSQL para aplicativos), Memorystore (Redis), Vertex AI para GenAI no aplicativo e todo o produto App Engine (legado, mas ainda no plano de exame PCD).
Nós nos apegamos aos primitivos Artifact Registry + Pub/Sub + Cloud Run + Secret Manager porque eles são a espinha dorsal de aplicativos orientados a eventos canônica do PCD. O Cloud Functions + Cloud Run compartilham o mesmo substrato de imagem do Artifact Registry. O Eventarc roteia eventos para Cloud Run / Functions. O Cloud Tasks é a variante RPC síncrona do Pub/Sub. Domine o substrato; as alternativas se encaixam.
Para cobertura conceitual serviço por serviço, consulte as seções Navegar, Guia e Editorial desta página de certificação.