Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена CDL с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы развернете с помощью чистого Terraform самый маленький реалистичный след в GCP — две включенные проектные службы, корзину Cloud Storage с унифицированным доступом на уровне корзины + жизненным циклом, а также бюджет Cloud Billing, который отправляет уведомления по электронной почте при превышении порога расходов. Четыре блока, эквивалент GCP создания учетной записи AWS и размещения в ней единственной корзины S3.
Разместите фрагменты кода в одном файле main.tf, запустите terraform init, затем пошагово выполните terraform apply.
>= 1.5 или OpenTofu >= 1.6.provider.gcloud auth application-default login.gcloud beta billing accounts list.your-project-id и your-billing-account-id в приведенных ниже фрагментах кода перед запуском terraform apply.Всё бесплатно в рамках этой работы:
us-*; лабораторная корзина ничего не хранит.Лабораторная работа простаивает примерно за $0/месяц. Смысл в том, чтобы доказать, что система предупреждений о расходах работает — весь экзамен CDL вращается вокруг набора навыков безопасной работы с GCP, из которых «знать, сколько вы тратите» — правило №1.
GCP требует явного включения служб проекта (API) перед тем, как можно будет выделять ресурсы. Мы включаем storage.googleapis.com (для Шага 2) и billingbudgets.googleapis.com (для Шага 4). Сравните с AWS, где поверхности API всегда включены — GCP заставляет вас включать их для каждого проекта.
Замените your-project-id на ваш фактический ID проекта.
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE with your GCP project ID
region = "us-central1"
}
locals {
labels = {
project = "certlabpro-cdl"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "budgets" {
service = "billingbudgets.googleapis.com"
disable_on_destroy = false
}Cloud Storage — это эквивалент S3 в GCP — объектное хранилище с опциями региональной, мультирегиональной и двухрегиональной репликации. Экзамен CDL неоднократно проверяет вопрос какой класс хранения: Standard (горячий), Nearline (>30 дней), Coldline (>90 дней), Archive (>365 дней).
Мы включаем унифицированный доступ на уровне корзины (рекомендуемая CDL настройка безопасности по умолчанию — отключает детальные ACL для каждого объекта в пользу только IAM) и переход жизненного цикла 30 дней → Nearline. Имена должны быть глобально уникальными во всей GCP — мы добавляем случайный шестнадцатеричный суффикс.
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "main" {
name = "certlabpro-cdl-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only — never in production
lifecycle_rule {
condition {
age = 30
}
action {
type = "SetStorageClass"
storage_class = "NEARLINE"
}
}
labels = local.labels
depends_on = [google_project_service.storage]
}Cloud Logging в GCP включено по умолчанию для большинства служб — но экзамен CDL проверяет различие между журналами аудита *Required (Обязательные), Default (По умолчанию) и Data Access (Доступ к данным)_. Обязательные журналы аудита (активность администратора) всегда включены, бесплатны и не могут быть отключены. Журналы по умолчанию (записи данных для некоторых служб) включены, но могут быть отключены. Журналы доступа к данным (чтения данных) по умолчанию отключены — их необходимо явно включить, и они оплачиваются в обычном режиме.
Мы включаем логирование доступа к данным для Cloud Storage, чтобы каждое чтение каждого объекта в корзине из Шага 2 попадало в Cloud Logging. Лабораторная работа является демонстрацией примитива iam-audit-config; производственные развертывания используют этот шаблон на уровне организации через шаблоны [[gcp-pcse]].
resource "google_project_iam_audit_config" "storage_data_access" {
service = "storage.googleapis.com"
audit_log_config {
log_type = "DATA_READ"
}
audit_log_config {
log_type = "DATA_WRITE"
}
}Экзамен CDL очень любит этот шаблон — бюджеты Cloud Billing + оповещения являются повторяющимся типом вопросов на экзамене CDL по контролю затрат. Мы устанавливаем бюджет в $10/месяц и настраиваем оповещения на 50% / 90% / 100% от прогнозируемых расходов. Оповещение доставляется по электронной почте администраторам платежного аккаунта (для электронной почты дополнительная конфигурация не требуется; для Slack / PagerDuty вам потребуется добавить тему Pub/Sub + веерную рассылку через Cloud Function).
Замените your-billing-account-id на ваш фактический ID. Бюджет ограничен только текущим проектом через фильтр projects — экзамен CDL проверяет это различие бюджет на проект против бюджета на всю организацию.
data "google_project" "current" {}
resource "google_billing_budget" "monthly_10" {
billing_account = "your-billing-account-id" # REPLACE — find via `gcloud beta billing accounts list`
display_name = "certlabpro-cdl-$10-monthly"
budget_filter {
projects = ["projects/${data.google_project.current.number}"]
}
amount {
specified_amount {
currency_code = "USD"
units = "10"
}
}
threshold_rules {
threshold_percent = 0.5
spend_basis = "FORECASTED_SPEND"
}
threshold_rules {
threshold_percent = 0.9
spend_basis = "FORECASTED_SPEND"
}
threshold_rules {
threshold_percent = 1.0
spend_basis = "CURRENT_SPEND"
}
depends_on = [google_project_service.budgets]
}terraform destroy полностью удаляет все ресурсы. Корзина удаляется (параметр force_destroy = true, предназначенный только для лабораторных работ, позволяет Terraform удалить ее, даже если она не пуста — никогда не используйте это в производстве). Бюджет отключается; электронные письма прекращаются. Конфигурация аудита IAM возвращается к значениям по умолчанию. Службы проекта остаются включенными (мы установили disable_on_destroy = false — их можно оставить включенными бесплатно, а отключение может нарушить работу несвязанных рабочих нагрузок в том же проекте).
CDL охватывает многие поверхности GCP, которые не могут поместиться в этой лабораторной работе — виртуальные машины Compute Engine, кластеры GKE, Cloud Run, Cloud Functions, App Engine, BigQuery, Cloud SQL, Spanner, Bigtable, Firestore, Cloud Pub/Sub, Dataflow, Dataproc, Vertex AI, Cloud Build, Cloud Deploy, Anthos / Multi-Cloud, Cloud CDN / Cloud Armor, VPC + Cloud NAT, Cloud Interconnect, Cloud IAM / Identity, Cloud KMS, Security Command Center, весь рынок GCP.
Мы придерживаемся примитивов Хранилище + Логирование + Биллинг, потому что они являются наименьшим общим знаменателем, который предполагается во всех сценариях экзамена CDL. Каждая другая служба GCP записывает данные в Cloud Storage / считывает данные из Cloud Storage / отправляет логи в Cloud Logging / отображается на панели управления Cloud Billing. Освойте основу; специальные службы добавляйте позже.
Для концептуального обзора каждой службы см. разделы Просмотр, Справочник и Editorial этой страницы сертификации.