Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена ADP с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы настроите с помощью простого Terraform минимально реалистичную основу данных ADP — бакет Cloud Storage для входящих данных, набор данных BigQuery с одной таблицей, разделенной по дате приема, и запланированный запрос BigQuery, который запускается каждый час, читая данные из общедоступного набора данных и записывая их в таблицу. Четыре блока; начальный этап аналитики GCP.
Вставьте фрагменты в один файл main.tf, запустите terraform init, затем terraform apply пошагово.
>= 1.5 или OpenTofu >= 1.6.your-project-id в блоке провайдера.Всё бесплатно в рамках этой лабораторной работы:
При объеме этой лабораторной работы ~0 $/месяц. Реальные рабочие нагрузки BigQuery оплачиваются по объему сканированных байтов — агрессивно разделяйте + кластеризуйте и выбирайте только то, что вам нужно.
Включите Cloud Storage, BigQuery и BigQuery Data Transfer Service (который обеспечивает работу запланированных запросов).
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-adp"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bigquery" {
service = "bigquery.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "bqdts" {
service = "bigquerydatatransfer.googleapis.com"
disable_on_destroy = false
}Каждый конвейер данных по шаблону ADP начинается с бакета для входящих данных — сюда помещаются необработанные файлы (CSV / JSON / Parquet / Avro), а последующие задания считывают их отсюда. Бакет является границей между внешней частью озера и внутренней частью озера. Экзамен ADP снова проверяет выбор класса хранения здесь — Standard для уровня входящих данных (частые чтения в первые 30 дней), с правилом жизненного цикла, переходящим в Coldline через 90 дней.
Включен унифицированный доступ на уровне бакета (рекомендуемая ADP настройка безопасности по умолчанию).
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "landing" {
name = "certlabpro-adp-landing-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only
lifecycle_rule {
condition {
age = 90
}
action {
type = "SetStorageClass"
storage_class = "COLDLINE"
}
}
labels = local.labels
depends_on = [google_project_service.storage]
}BigQuery — это бессерверное хранилище данных GCP: оплата за сканированный байт при запросе, оплата за хранимый байт данных. Экзамен ADP проверяет разделение на партиции + кластеризацию как рычаги контроля затрат: таблицы, разделенные на партиции, позволяют запросам пропускать нерелевантные данные; кластеризованные таблицы группируют связанные строки в хранилище.
Мы создаем:
analytics — контейнер BigQuery (эквивалент схемы / базы данных GCP). Установите delete_contents_on_destroy = true для удобства очистки в лаборатории.events с разделением по времени приема данных (псевдостолбец _PARTITIONTIME) и сроком действия партиции 30 дней. Производственные таблицы обычно разделяются по столбцу (time_partitioning.field) для селективности запросов.resource "google_bigquery_dataset" "analytics" {
dataset_id = "analytics"
location = "US"
delete_contents_on_destroy = true # lab-only
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 # lab-only
time_partitioning {
type = "DAY"
expiration_ms = 30 * 24 * 60 * 60 * 1000 # 30 days
require_partition_filter = true
}
schema = jsonencode([
{ name = "event_id", type = "STRING", mode = "REQUIRED" },
{ name = "event_type", type = "STRING", mode = "REQUIRED" },
{ name = "event_time", type = "TIMESTAMP", mode = "REQUIRED" },
{ name = "user_id", type = "STRING", mode = "NULLABLE" },
{ name = "payload", type = "JSON", mode = "NULLABLE" },
])
labels = local.labels
}Запланированные запросы — это примитив по шаблону ADP для приема данных из одного набора данных BigQuery в другой с фиксированной периодичностью. Они выполняются на инфраструктуре BigQuery Data Transfer Service (отдельно от специальных запросов bq) и тарифицируются по той же ставке за сканированный байт.
Мы планируем запрос, который запускается каждый час, считывает данные из общедоступного набора данных bigquery-public-data.samples.shakespeare и записывает их в таблицу events из Шага 3. Форма MERGE (обновление или вставка) является каноническим ответом ADP для идемпотентного приема данных — повторный запуск в тот же час не приводит к двойной вставке.
Запланированный запрос выполняется от имени сервисного аккаунта проекта по умолчанию; в производственных развертываниях используется выделенный сервисный аккаунт для передачи данных с roles/bigquery.dataEditor на целевом ресурсе.
resource "google_bigquery_data_transfer_config" "hourly_load" {
display_name = "certlabpro-adp-hourly-load"
data_source_id = "scheduled_query"
location = "US"
schedule = "every 1 hours"
destination_dataset_id = google_bigquery_dataset.analytics.dataset_id
params = {
query = "INSERT INTO `${google_bigquery_dataset.analytics.dataset_id}.${google_bigquery_table.events.table_id}` (event_id, event_type, event_time, user_id, payload) SELECT GENERATE_UUID() AS event_id, \"shakespeare-line\" AS event_type, CURRENT_TIMESTAMP() AS event_time, NULL AS user_id, TO_JSON(STRUCT(word, word_count, corpus)) AS payload FROM `bigquery-public-data.samples.shakespeare` WHERE word_count > 100 LIMIT 100"
}
depends_on = [
google_project_service.bqdts,
google_bigquery_table.events,
]
}terraform destroy удаляет всё. Бакет удаляется (только для лаборатории force_destroy). Набор данных удаляется (только для лаборатории delete_contents_on_destroy) — его таблицы также удаляются. Запланированный запрос отключается и немедленно прекращает выполнение. Сервисы проекта остаются включенными (бесплатно).
ADP охватывает множество поверхностей данных GCP, которые не могут быть включены в эту лабораторию — Dataflow (рассматривается в [[gcp-pde]] на уровне Pro), Dataproc, Pub/Sub, Cloud Composer (управляемый Airflow), Dataform (IDE для SQL-преобразований, построенная на BigQuery), Looker Studio, Vertex AI, Cloud Data Fusion, Database Migration Service, Datastream, вся мультиоблачная поверхность BigLake / BigQuery Omni и BigQuery ML (обучение ML в базе данных).
Мы придерживаемся примитивов GCS + BigQuery + запланированный запрос, потому что они являются основой, с которой начинается каждый конвейер по шаблону ADP. Dataflow / Dataproc передают потоки или пакеты данных в GCS или BigQuery. Composer / Workflows оркестрируют вышеуказанные запланированные запросы. Looker читает данные из BigQuery. Освойте основу; затем надстраивайте специализированные движки.
Для концептуального обзора по каждому сервису см. разделы Просмотр, Справочник и Editorial на этой странице сертификации.