Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена PDE с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы настроите с помощью чистого Terraform канонический потоковый конвейер PDE — корзину Cloud Storage для приема данных, тему Pub/Sub в качестве входной точки для событий, набор данных BigQuery + таблицу, разделенную на секции и кластеризованную для контроля стоимости запросов, и задание Dataflow Flex Template, передающее данные из Pub/Sub → BigQuery. Пять блоков; шаблон Pub/Sub → Dataflow → BigQuery проверяется на каждом экзамене PDE.
Вставьте фрагменты кода в один файл main.tf, выполните terraform init, затем terraform apply шаг за шагом.
>= 1.5 или OpenTofu >= 1.6.your-project-id в блоке провайдера.Dataflow — это строка расходов, за которой нужно следить:
n1-standard-1): ~$50/месяц во время работы. Незамедлительно удаляйте после каждой лабораторной сессии.Приблизительно $50/месяц, пока задание Dataflow работает. Остановите его с помощью gcloud dataflow jobs cancel, если не собираетесь оставлять его запущенным.
Включите API Cloud Storage, Pub/Sub, BigQuery и Dataflow.
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-pde"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "pubsub" {
service = "pubsub.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bigquery" {
service = "bigquery.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "dataflow" {
service = "dataflow.googleapis.com"
disable_on_destroy = false
}Для заданий Dataflow требуется промежуточная корзина GCS для временных файлов (Python wheels, загрузки JAR, промежуточное состояние). Рекомендуемый PDE шаблон: одна корзина на домен данных с подпапками для staging/, temp/ и templates/ для отделения операционного состояния от реальных данных.
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "ingest" {
name = "certlabpro-pde-ingest-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only
labels = local.labels
depends_on = [google_project_service.storage]
}Канонический потоковый ввод PDE: издатели (кликстрим, IoT, CDC) отправляют события в тему Pub/Sub; Dataflow подписывается и записывает их в BigQuery. Pub/Sub обеспечивает надежную доставку с гарантией как минимум однократной доставки и слой декуплинга, который позволяет изменять потребителей, не затрагивая производителей.
Мы создаем тему events + подписку events-to-bq, принадлежащую Dataflow. ack_deadline_seconds = 60 для подписки — это рекомендуемая PDE настройка Dataflow; она дольше, чем типичная частота выдачи окон Dataflow.
resource "google_pubsub_topic" "events" {
name = "events"
labels = local.labels
depends_on = [google_project_service.pubsub]
}
resource "google_pubsub_subscription" "events_to_bq" {
name = "events-to-bq"
topic = google_pubsub_topic.events.id
ack_deadline_seconds = 60
message_retention_duration = "604800s" # 7 days
labels = local.labels
}Экзамен PDE неустанно проверяет этот выбор секционирования и кластеризации. Мы создаем таблицу events, секционированную по event_time (с детализацией DAY, что является часто повторяющимся каноническим выбором PDE) и кластеризованную по event_type — каждый запрос, фильтрующий по event_time, пропускает ненужные секции, а каждый запрос, фильтрующий по event_type, пропускает ненужные блоки внутри секции.
require_partition_filter = true принуждает запросы включать условие WHERE event_time >= ... — это рекомендуемый PDE механизм защиты от случайно дорогих сканирований всей таблицы.
resource "google_bigquery_dataset" "analytics" {
dataset_id = "analytics"
location = "US"
delete_contents_on_destroy = true
labels = local.labels
depends_on = [google_project_service.bigquery]
}
resource "google_bigquery_table" "events" {
dataset_id = google_bigquery_dataset.analytics.dataset_id
table_id = "events"
deletion_protection = false
time_partitioning {
type = "DAY"
field = "event_time"
require_partition_filter = true
}
clustering = ["event_type"]
schema = jsonencode([
{ name = "event_time", type = "TIMESTAMP", mode = "REQUIRED" },
{ name = "event_type", type = "STRING", mode = "REQUIRED" },
{ name = "event_id", type = "STRING", mode = "REQUIRED" },
{ name = "payload", type = "JSON", mode = "NULLABLE" },
])
labels = local.labels
}Dataflow Flex Templates — это каноническая форма задания как ресурса PDE: Google поставляет готовые шаблоны для распространенных сценариев (Pub/Sub → BigQuery, Pub/Sub → GCS, JDBC → BigQuery и т. д.), и вы запускаете их с параметрами.
Мы запускаем предоставленный Google шаблон Pubsub_Subscription_to_BigQuery для подписки из Шага 3 и таблицы из Шага 4. Задание запускается немедленно при выполнении terraform apply; оно появится в разделе Dataflow → Jobs. Отмените его по завершении с помощью gcloud dataflow jobs cancel <job-id> --region us-central1, чтобы остановить начисление платы за рабочих ~$50/месяц.
data "google_project" "current" {}
resource "google_dataflow_flex_template_job" "pubsub_to_bq" {
provider = google-beta
name = "certlabpro-pde-pubsub-to-bq"
container_spec_gcs_path = "gs://dataflow-templates-us-central1/latest/flex/PubSub_Subscription_to_BigQuery"
region = "us-central1"
parameters = {
inputSubscription = google_pubsub_subscription.events_to_bq.id
outputTableSpec = "${data.google_project.current.project_id}:${google_bigquery_dataset.analytics.dataset_id}.${google_bigquery_table.events.table_id}"
}
temp_location = "gs://${google_storage_bucket.ingest.name}/temp"
staging_location = "gs://${google_storage_bucket.ingest.name}/staging"
on_delete = "cancel"
depends_on = [google_project_service.dataflow]
}terraform destroy уничтожает все. Задание Dataflow отменяется (on_delete = "cancel"), и оплата за рабочие ресурсы прекращается в течение нескольких минут. Ресурсы Pub/Sub + BigQuery + GCS удаляются без проблем. Таблица BigQuery, содержащая принятые события, удаляется вместе с набором данных (delete_contents_on_destroy).
PDE охватывает многие поверхности данных GCP, которые не помещаются в эту лабораторную работу — Dataproc (управляемый Hadoop / Spark), Cloud Composer (управляемый Airflow для пакетной оркестрации), Cloud Data Fusion (визуальный ETL), Database Migration Service (DMS), Datastream (CDC из Oracle / MySQL / Postgres → BigQuery), Cloud Storage Transfer Service, BigQuery Omni / BigLake (мультиоблачные / внешние таблицы), BigQuery ML (машинное обучение в базе данных), BigQuery BI Engine (уровень кэшированных запросов для Looker), Looker / Looker Studio, Cloud Pub/Sub Lite (дешевле, но более ограниченный), Spanner / Bigtable / Firestore для данных прикладного уровня (рассмотрено в [[gcp-pcdoe]]), Vertex AI Pipelines / Feature Store / Workbench (рассмотрено в [[gcp-pmle]]), Cloud DLP / Sensitive Data Protection для обезличивания PII.
Мы придерживаемся примитивов GCS + Pub/Sub + Dataflow + BigQuery, потому что они являются каноническим потоковым конвейером PDE, на котором строятся все сценарии экзамена. Composer оркестрирует те же формы в пакетном режиме. Dataproc — это альтернативный вычислительный движок для рабочих нагрузок Spark, записывающих данные в тот же BigQuery. Datastream — это управляемый вариант CDC той же формы Pub/Sub → Dataflow → BigQuery. Освойте канонический конвейер; альтернативы встраиваются.
Для концептуального обзора каждого сервиса см. разделы Просмотр, Справочник и Editorial этой страницы сертификации.