Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена ACE с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы с помощью чистого Terraform подготовите наименьшую реалистичную административную подложку GCP в стиле ACE — VPC в настраиваемом режиме с одной региональной подсетью, двумя правилами брандмауэра (разрешить внутренний трафик + IAP SSH), ВМ Compute Engine, работающую с учетной записью службы IAM с минимальными привилегиями, и политику оповещений Cloud Logging, которая уведомляет об ошибках квот. Это стандартный набор администратора IaaS первого дня.
Поместите фрагменты кода в один файл main.tf, выполните terraform init, затем terraform apply шаг за шагом.
>= 1.5 или OpenTofu >= 1.6.gcloud auth application-default login.your-project-id в приведенном ниже фрагменте на ваш фактический идентификатор проекта.gcloud compute ssh certlabpro-ace-vm --tunnel-through-iap.e2-micro: ~$6.50/месяц в us-central1 (1 всегда бесплатный уровень на аккаунт, если применимо).Примерно ~$6.50/месяц, пока ВМ работает. Остановите или удалите ВМ, когда активно ею не пользуетесь — работающие ВМ являются главной причиной неожиданных затрат на лабораторные работы в GCP.
Включите API Compute Engine, IAM и Cloud Logging. Экзамен ACE постоянно проверяет эту модель включения API для каждого ресурса.
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
}Сети GCP являются глобальными — одна VPC охватывает все регионы, а подсети — это региональные примитивы, выделенные из нее. Это повторяющийся вопрос на экзамене ACE: AWS имеет региональные VPC; Azure имеет региональные VNet; GCP имеет глобальную VPC с региональными подсетями.
Мы отключаем auto_create_subnetworks (VPC в настраиваемом режиме, рекомендуемый по умолчанию ACE) и выделяем одну подсеть /24 в us-central1 с включенным Частным доступом Google, чтобы ВМ без внешних IP-адресов могли по-прежнему обращаться к API 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
}Правила брандмауэра GCP привязаны к VPC (не к подсети) и имеют явное направление: входящий (по умолчанию) или исходящий трафик. Входящий трафик по умолчанию — запретить все; исходящий трафик по умолчанию — разрешить все. Экзамен ACE неустанно проверяет этот инвариант направление + запрет по умолчанию.
Мы добавляем:
10.10.1.0/24.35.235.240.0/20), чтобы вы могли подключаться по SSH, не выставляя ВМ в интернет.Правило IAP-SSH — это рекомендуемый ACE шаблон — оно требует roles/iap.tunnelResourceAccessor для ВМ (привязка обрабатывается на Шаге 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"]
}
}ВМ Compute Engine работают с привязанной учетной записью службы — эквивалентом профиля экземпляра AWS EC2 или управляемого удостоверения ВМ Azure в GCP. Рекомендуемый ACE шаблон: никогда не используйте учетную запись службы Compute по умолчанию (слишком много привилегий); всегда создавайте учетную запись службы для каждой рабочей нагрузки с только теми ролями IAM, которые необходимы рабочей нагрузке.
Мы создаем учетную запись службы, предоставляем ей roles/logging.logWriter + roles/monitoring.metricWriter (минимум для отправки журналов/метрик агентом Ops Agent) и привязываем ее к ВМ Debian e2-micro без внешнего IP-адреса. Правило брандмауэра IAP-SSH из Шага 3 позволяет вам получить к ней доступ через туннель.
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
}Рекомендуемая ACE схема наблюдаемости: метрика на основе журналов подсчитывает совпадения фильтра Cloud Logging, затем политика оповещений Cloud Monitoring срабатывает, когда метрика пересекает пороговое значение. Мы отслеживаем строки журнала severity >= ERROR от любой ВМ GCE в этом проекте, подсчитываем их каждую минуту и оповещаем, когда более 5 попадают в 5-минутное окно.
Канал уведомлений оставлен неявным — политики оповещений требуют массив notification_channels, но сам канал (электронная почта, Slack, PagerDuty) обычно настраивается один раз для каждого проекта в консоли. Экзамен ACE проверяет этот треугольник метрика журнала → политика оповещений → канал уведомлений как стандартный примитив наблюдаемости.
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 удаляет все. ВМ прекращает тарификацию сразу после удаления (диск удаляется вместе с ней). Учетная запись службы удаляется; привязки IAM отсоединяются. VPC + подсеть + брандмауэры удаляются без остатка. Метрика на основе журналов + политика оповещений отсоединяются чисто. Службы проекта остаются включенными (их можно оставить включенными бесплатно).
ACE охватывает множество административных поверхностей GCP, которые не могут быть включены в эту лабораторную работу — Cloud Load Balancing (глобальный HTTP(S) LB, региональный внутренний LB, сетевой LB), управляемые группы экземпляров + автомасштабирование, Cloud Run, кластеры GKE, Cloud Storage (рассмотрено в [[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, пользовательские роли IAM, иерархия Resource Manager (папки + организации), Cloud Asset Inventory, Cloud Deployment Manager (устаревший, замененный на Terraform).
Мы придерживаемся примитивов VPC + GCE + IAM + Logging, потому что они являются основой для всех более продвинутых административных шаблонов GCP. MIG масштабируют экземпляры GCE; LB размещаются перед MIG; GKE / Cloud Run работают поверх вычислений; все записывается в Cloud Logging.
Для концептуального обзора каждой службы см. разделы Просмотр, Справочник и Editorial на этой странице сертификации.