Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена PCD с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы с помощью чистого Terraform подготовите минимально реалистичную основу для управляемого событиями приложения PCD — репозиторий Docker в Artifact Registry для хранения образов контейнеров, тему + подписку Pub/Sub в качестве основы для асинхронного обмена сообщениями, сервис Cloud Run, запускающий образ-заполнитель, и Secret Manager для секретов приложения. Пять блоков; каждый сценарий экзамена PCD строится на этой базе.
Вставьте фрагменты кода в один файл main.tf, затем запустите terraform init, а затем terraform apply пошагово.
>= 1.5 или OpenTofu >= 1.6.your-project-id в блоке провайдера.Все бесплатно или почти бесплатно в рамках лабораторной работы:
min_instances = 0 — нулевая стоимость простоя.При объеме лабораторной работы стоимость составляет ~$0/месяц. Cloud Run с min_instances = 0 является рекомендуемым по умолчанию для PCD — отсутствие оплаты за простой.
Включите API Cloud Run, Artifact Registry, Pub/Sub и 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 — это реестр контейнеров и пакетов GCP, современная замена устаревшего Container Registry (gcr.io). Экзамен PCD проверяет этот шаблон передачи в Artifact Registry → развертывания из Artifact Registry как каноническую форму CI/CD.
Мы создаем региональный репозиторий в формате Docker. Отправьте в него образы после terraform apply с помощью:
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 — это управляемый сервис обмена сообщениями GCP — основа каждого управляемого событиями приложения по шаблону PCD. Темы — это цели для публикации; подписки — это конечные точки для потребителей (pull или push). Экзамен PCD проверяет доставку не менее одного раза + идемпотентных потребителей как несущую семантику.
Мы создаем:
orders — куда публикуют производители.orders-worker — потребители получают сообщения из нее. В производственных развертываниях часто используются push-подписки на конечные точки Cloud Run (каноническая управляемая событиями форма PCD: Pub/Sub push → Cloud Run); здесь мы используем pull, чтобы упростить IAM.ack_deadline_seconds = 60 дает потребителям 60 секунд на подтверждение; это дольше, чем тайм-аут запроса по умолчанию в Cloud Run, и является часто встречающимся параметром настройки на экзамене 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 — это контейнер как услуга от GCP — запускает контейнеры Docker на бессерверной инфраструктуре Google, масштабируется до нуля. Рекомендуемый шаблон PCD: каждый сервис Cloud Run запускается под собственной учетной записью службы, а не под учетной записью службы Compute по умолчанию.
Мы развертываем сервис, запускающий публичный образ hello в качестве заполнителя, прикрепляем учетную запись службы для каждого сервиса с roles/pubsub.subscriber к теме из Шага 3 и предоставляем roles/run.invoker для allUsers для неаутентифицированного доступа. Переключитесь на вызов, ограниченный IAM, для производственной среды — экзамен PCD проверяет этот переход allUsers ↔ конкретная_идентификация.
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 — это хранилище секретов GCP: версионированные значения, доступ, контролируемый IAM, автоматические хуки ротации. Рекомендуемый шаблон PCD: конфигурация приложения, которая не является секретом, хранится в переменных среды; конфигурация приложения, которая является секретом (ключи API, пароли к БД, токены OAuth), хранится в Secret Manager, на который ссылается сервис Cloud Run.
Мы создаем секрет + начальную версию, затем предоставляем учетной записи службы Cloud Run из Шага 4 роль roles/secretmanager.secretAccessor для этого секрета. Чтобы подключить секрет к Cloud Run как переменную среды, вам нужно было бы добавить блок env { name = "..."; value_source { secret_key_ref { ... } } } в шаблон сервиса (намеренно опущено, чтобы сосредоточиться на этом шаге).
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 удаляет все. Сервис Cloud Run будет удален (с min_instances = 0 он и так ничего не стоил). Репозиторий Artifact Registry будет удален (force_destroy подразумевается, так как в лабораторной работе не загружаются никакие образы). Ресурсы Pub/Sub + Secret Manager удаляются без проблем.
PCD охватывает множество поверхностей разработчика приложений GCP, которые не помещаются в эту лабораторную работу: Cloud Functions (более старая/легкая альтернатива Cloud Run), Cloud Tasks (надежная асинхронная очередь), Cloud Scheduler (cron как услуга), Cloud Endpoints / API Gateway (управляемая поверхность API перед Cloud Run), Cloud Trace + Cloud Profiler + Cloud Debugger (телеметрия производительности приложений — уровень [[gcp-pcde]]), Firebase (платформа для мобильных/веб-приложений), Cloud Storage (используется как хостинг статических ресурсов для SPA), Cloud Build (CI/CD — [[gcp-pcde]]), Cloud Deploy (CD — [[gcp-pcde]]), Eventarc (маршрутизатор событий от сервисов GCP к Cloud Run / Functions), Workflows (оркестрация), Firestore (NoSQL БД для приложений), Memorystore (Redis), Vertex AI для встроенного генеративного ИИ, а также весь продукт App Engine (устаревший, но все еще в плане экзамена PCD).
Мы придерживаемся примитивов Artifact Registry + Pub/Sub + Cloud Run + Secret Manager, потому что они являются канонической основой управляемого событиями приложения PCD. Cloud Functions + Cloud Run используют одну и ту же основу образов Artifact Registry. Eventarc маршрутизирует события в Cloud Run / Functions. Cloud Tasks — это синхронный RPC-вариант Pub/Sub. Освойте основу; альтернативы впишутся.
Для концептуального обзора сервисов см. разделы Просмотр, Справочник и Editorial на этой странице сертификации.