Última revisión: mayo de 2026
Crea los servicios de AWS del examen ACE 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 puro, el sustrato de administración de GCP más pequeño y realista con sabor ACE: una VPC en modo personalizado con una subred regional, dos reglas de firewall (permitir SSH interno + IAP), una VM de Compute Engine que ejecuta una cuenta de servicio con IAM de privilegio mínimo, y una política de alerta de Cloud Logging que avisa sobre errores de cuota. Esta es la configuración del administrador de IaaS del primer día.
Coloca los fragmentos en un único main.tf, ejecuta terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.gcloud auth application-default login.your-project-id en el fragmento siguiente con tu ID de proyecto real.gcloud compute ssh certlabpro-ace-vm --tunnel-through-iap.e2-micro: ~$6.50/mes en us-central1 (1 nivel siempre gratuito por cuenta si es elegible).~$6.50/mes mientras la VM está en ejecución. Detén o destruye la VM cuando no la estés usando activamente, ya que las VMs en ejecución son la sorpresa de costo número 1 en los laboratorios de GCP.
Habilita las API de Compute Engine, IAM y Cloud Logging. El examen ACE evalúa este patrón de habilitar-API-por-recurso repetidamente.
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
}Las redes de GCP son globales: una única VPC abarca todas las regiones, y las subredes son primitivas regionales que se crean a partir de ella. Esta es una forma recurrente de pregunta en el examen ACE: AWS tiene VPCs regionales; Azure tiene VNets regionales; GCP tiene una VPC global con subredes regionales.
Deshabilitamos auto_create_subnetworks (VPC en modo personalizado, el valor predeterminado recomendado por ACE) y creamos una única subred /24 en us-central1 con Acceso privado de Google habilitado para que las VMs sin IPs externas puedan seguir llegando a las APIs de 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
}Las reglas de firewall de GCP tienen un ámbito de VPC (no por subred) y tienen una dirección explícita: entrada (por defecto) o salida. El ingreso predeterminado es denegar todo; el egreso predeterminado es permitir todo. El examen ACE evalúa implacablemente este invariante de dirección + denegación predeterminada.
Añadimos:
10.10.1.0/24.35.235.240.0/20) para que puedas conectarte por SSH sin exponer la VM a internet.La regla IAP-SSH es el patrón recomendado por ACE: requiere roles/iap.tunnelResourceAccessor en la VM (el binding se maneja en el Paso 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"]
}
}Las VMs de Compute Engine se ejecutan con una cuenta de servicio adjunta, el equivalente en GCP de un perfil de instancia de AWS EC2 o una identidad administrada de VM de Azure. Patrón recomendado por ACE: nunca uses la cuenta de servicio predeterminada de Compute (con demasiados privilegios); siempre crea una cuenta de servicio por carga de trabajo con solo los roles de IAM que la carga de trabajo necesita.
Creamos una cuenta de servicio, le otorgamos roles/logging.logWriter + roles/monitoring.metricWriter (lo mínimo para que el Ops Agent envíe logs/métricas), y la adjuntamos a una VM Debian e2-micro sin IP externa. La regla de firewall IAP-SSH del Paso 3 te permite acceder a ella a través de un 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
}Forma de observabilidad recomendada por ACE: una métrica basada en logs cuenta las coincidencias de un filtro de Cloud Logging, luego una política de alerta de Cloud Monitoring se activa cuando la métrica cruza un umbral. Observamos las líneas de log con severity >= ERROR de cualquier VM de GCE en este proyecto, las contamos por minuto y alertamos cuando más de 5 se registran en una ventana de 5 minutos.
El canal de notificación se deja implícito: las políticas de alerta necesitan un array notification_channels, pero el canal en sí (correo electrónico, Slack, PagerDuty) se configura típicamente una vez por proyecto en la consola. El examen ACE evalúa este triángulo de métrica de log → política de alerta → canal de notificación como la primitiva de observabilidad estándar.
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 elimina todo. La VM detiene la facturación inmediatamente al destruirse (el disco se elimina con ella). La cuenta de servicio se destruye; los bindings de IAM se desvinculan. La VPC + subred + firewalls se destruyen limpiamente. La métrica basada en logs + política de alerta se desvinculan limpiamente. Los servicios del proyecto permanecen habilitados (es gratis dejarlos activados).
ACE cubre muchas superficies de administración de GCP que este laboratorio no puede abarcar: Cloud Load Balancing (LB HTTP(S) global, LB interno regional, LB de red), grupos de instancias administradas + autoescalado, Cloud Run, clusters de GKE, Cloud Storage (cubierto en [[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, roles personalizados de IAM, jerarquía de Resource Manager (carpetas + organizaciones), Cloud Asset Inventory, Cloud Deployment Manager (obsoleto a favor de Terraform).
Nos ceñimos a las primitivas VPC + GCE + IAM + Logging porque son la base sobre la que se construyen todos los patrones de administración más avanzados de GCP. Los MIGs escalan instancias de GCE; los LBs están frente a los MIGs; GKE / Cloud Run se ejecutan sobre la computación; todo escribe en Cloud Logging.
Para la cobertura conceptual servicio por servicio, consulta las secciones Buscar, Manual y Editorial de esta página de certificación.