Última revisão: maio de 2026
Construa os serviços da AWS do exame ACE com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Ao final deste laboratório, você terá provisionado, com Terraform puro, o menor substrato administrativo GCP realista com sabor ACE — uma VPC em modo personalizado com uma sub-rede regional, duas regras de firewall (permitir interno + IAP SSH), uma VM do Compute Engine executando uma conta de serviço com IAM de menor privilégio e uma política de alerta do Cloud Logging que avisa sobre erros de cota. Este é o equipamento de administrador de IaaS do primeiro dia.
Solte os snippets em um único main.tf, execute terraform init e, em seguida, terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.gcloud auth application-default login.your-project-id no snippet abaixo pelo seu ID de projeto real.gcloud compute ssh certlabpro-ace-vm --tunnel-through-iap.e2-micro: ~$6.50/mês em us-central1 (1 nível sempre gratuito por conta, se elegível).~$6.50/mês enquanto a VM estiver em execução. Pare ou destrua a VM quando não estiver usando ativamente — VMs em execução são a surpresa número 1 de custos de laboratório no GCP.
Habilite as APIs do Compute Engine, IAM e Cloud Logging. O exame ACE testa repetidamente este padrão de habilitação de API por recurso.
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE
region = "us-central1"
zone = "us-central1-a"
}
locals {
labels = {
project = "certlabpro-ace"
managed_by = "terraform"
}
}
resource "google_project_service" "compute" {
service = "compute.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "iam" {
service = "iam.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "logging" {
service = "logging.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "monitoring" {
service = "monitoring.googleapis.com"
disable_on_destroy = false
}As redes GCP são globais — uma única VPC abrange todas as regiões, e as sub-redes são primitivos regionais esculpidos a partir dela. Esta é uma forma recorrente de questão no exame ACE: a AWS tem VPCs regionais; o Azure tem VNets regionais; o GCP tem uma VPC global com sub-redes regionais.
Desabilitamos auto_create_subnetworks (VPC em modo personalizado, o padrão recomendado pelo ACE) e criamos uma única sub-rede /24 em us-central1 com Acesso Privado do Google habilitado para que VMs sem IPs externos ainda possam acessar as APIs do GCP.
resource "google_compute_network" "main" {
name = "certlabpro-ace-vpc"
auto_create_subnetworks = false
routing_mode = "REGIONAL"
depends_on = [google_project_service.compute]
}
resource "google_compute_subnetwork" "main" {
name = "certlabpro-ace-subnet"
ip_cidr_range = "10.10.1.0/24"
region = "us-central1"
network = google_compute_network.main.id
private_ip_google_access = true
}As regras de firewall do GCP são no escopo da VPC (não por sub-rede) e têm uma direção explícita: entrada (padrão) ou saída. A entrada padrão é negar tudo; a saída padrão é permitir tudo. O exame ACE testa incessantemente este invariante direção + negação padrão.
Nós adicionamos:
10.10.1.0/24.35.235.240.0/20) para que você possa fazer SSH sem expor a VM à internet.A regra IAP-SSH é o padrão recomendado pelo ACE — ela exige roles/iap.tunnelResourceAccessor na VM (associação tratada na Etapa 4).
resource "google_compute_firewall" "allow_internal" {
name = "certlabpro-ace-allow-internal"
network = google_compute_network.main.name
direction = "INGRESS"
source_ranges = ["10.10.1.0/24"]
allow {
protocol = "tcp"
}
allow {
protocol = "udp"
}
allow {
protocol = "icmp"
}
}
resource "google_compute_firewall" "allow_iap_ssh" {
name = "certlabpro-ace-allow-iap-ssh"
network = google_compute_network.main.name
direction = "INGRESS"
source_ranges = ["35.235.240.0/20"] # IAP gateway range
allow {
protocol = "tcp"
ports = ["22"]
}
}As VMs do Compute Engine são executadas com uma conta de serviço anexada — o equivalente GCP de um perfil de instância EC2 da AWS ou uma identidade gerenciada de VM do Azure. Padrão recomendado pelo ACE: nunca use a conta de serviço padrão do Compute (com privilégios excessivos); sempre crie uma conta de serviço por carga de trabalho com apenas os papéis IAM que a carga de trabalho necessita.
Criamos uma conta de serviço, concedemos a ela roles/logging.logWriter + roles/monitoring.metricWriter (o mínimo para o Ops Agent enviar logs/métricas), e a anexamos a uma VM Debian e2-micro sem IP externo. A regra de firewall IAP-SSH da Etapa 3 permite que você a acesse via túnel.
resource "google_service_account" "vm" {
account_id = "certlabpro-ace-vm-sa"
display_name = "ACE lab VM service account"
}
resource "google_project_iam_member" "vm_log_writer" {
project = data.google_project.current.project_id
role = "roles/logging.logWriter"
member = "serviceAccount:${google_service_account.vm.email}"
}
resource "google_project_iam_member" "vm_metric_writer" {
project = data.google_project.current.project_id
role = "roles/monitoring.metricWriter"
member = "serviceAccount:${google_service_account.vm.email}"
}
data "google_project" "current" {}
resource "google_compute_instance" "vm" {
name = "certlabpro-ace-vm"
machine_type = "e2-micro"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
network_interface {
subnetwork = google_compute_subnetwork.main.id
# No access_config block = no external IP. SSH via IAP only.
}
service_account {
email = google_service_account.vm.email
scopes = ["cloud-platform"] # API scope; IAM does the real gating
}
labels = local.labels
}Formato de observabilidade recomendado pelo ACE: uma métrica baseada em log conta correspondências de um filtro do Cloud Logging, então uma política de alerta do Cloud Monitoring dispara quando a métrica ultrapassa um limite. Monitoramos linhas de log com severity >= ERROR de qualquer VM GCE neste projeto, as contamos por minuto e alertamos quando mais de 5 ocorrem em uma janela de 5 minutos.
O canal de notificação é deixado implícito — as políticas de alerta precisam de um array notification_channels, mas o próprio canal (e-mail, Slack, PagerDuty) é tipicamente configurado uma vez por projeto no console. O exame ACE testa este triângulo métrica de log → política de alerta → canal de notificação como o primitivo de observabilidade padrão.
resource "google_logging_metric" "vm_errors" {
name = "certlabpro_ace_vm_errors"
filter = "resource.type=\"gce_instance\" AND severity >= ERROR"
metric_descriptor {
metric_kind = "DELTA"
value_type = "INT64"
}
depends_on = [google_project_service.logging]
}
resource "google_monitoring_alert_policy" "vm_error_burst" {
display_name = "ACE lab — VM error burst"
combiner = "OR"
conditions {
display_name = "More than 5 ERROR lines per 5 minutes"
condition_threshold {
filter = "metric.type=\"logging.googleapis.com/user/${google_logging_metric.vm_errors.name}\" AND resource.type=\"gce_instance\""
duration = "300s"
comparison = "COMPARISON_GT"
threshold_value = 5
aggregations {
alignment_period = "60s"
per_series_aligner = "ALIGN_DELTA"
}
}
}
# notification_channels = [] # add channels via the console or as a separate TF resource
depends_on = [google_project_service.monitoring]
}terraform destroy derruba tudo. A VM para de ser cobrada imediatamente após a destruição (o disco é removido junto). A conta de serviço é destruída; as associações IAM são desvinculadas. A VPC + sub-rede + firewalls são destruídos de forma limpa. A métrica baseada em log + política de alerta são desvinculadas de forma limpa. Os serviços do projeto permanecem habilitados (grátis para deixar ativados).
O ACE cobre muitas superfícies administrativas do GCP que este laboratório não pode abranger — Cloud Load Balancing (LB HTTP(S) global, LB interno regional, LB de rede), Managed Instance Groups + autoscaling, Cloud Run, clusters GKE, Cloud Storage (coberto em [[gcp-cdl]]), Cloud SQL, Cloud Spanner, Cloud Bigtable, Pub/Sub, Cloud Functions, Cloud Scheduler, Cloud Tasks, Cloud KMS, VPC Peering / Shared VPC ([[gcp-pcne]]), Cloud NAT, Cloud VPN / Interconnect, Cloud DNS, Cloud Armor, funções personalizadas do IAM, hierarquia do Resource Manager (pastas + organizações), Cloud Asset Inventory, Cloud Deployment Manager (obsoleto em favor do Terraform).
Nós nos apegamos aos primitivos VPC + GCE + IAM + Logging porque eles são a base sobre a qual todos os padrões administrativos mais avançados do GCP são compostos. MIGs escalam instâncias GCE; LBs ficam na frente dos MIGs; GKE / Cloud Run rodam sobre a computação; tudo escreve para o Cloud Logging.
Para a cobertura conceitual serviço por serviço, consulte as seções Navegar, Guia e Editorial desta página de certificação.