Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der PDE-Prüfung mit reinem Terraform — ein Block nach dem anderen, jeweils abgestimmt auf eine Prüfungsdomäne. Derselbe Code funktioniert auch mit OpenTofu.
Am Ende dieses Labs haben Sie mit einfachem Terraform die kanonische PDE-Streaming-Pipeline bereitgestellt – einen Cloud Storage Ingest Bucket, ein Pub/Sub-Thema als Ereigniseingang, ein BigQuery-Dataset + Tabelle, partitioniert und geclustert zur Steuerung der Abfragekosten, und einen Dataflow Flex Template Job, der Pub/Sub → BigQuery streamt. Fünf Blöcke; das Pub/Sub → Dataflow → BigQuery-Muster, das PDE in jeder Prüfung testet.
Fügen Sie die Snippets in eine einzelne main.tf ein, führen Sie terraform init aus und dann terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.your-project-id im Provider-Block.Dataflow ist der Kostenfaktor, den Sie beachten sollten:
n1-standard-1 Worker): ~$50/Monat während der Ausführung. Unbedingt löschen nach jeder Labsitzung.~$50/Monat, solange der Dataflow-Job läuft. Beenden Sie ihn über gcloud dataflow jobs cancel, wenn Sie ihn nicht weiterlaufen lassen möchten.
Aktivieren Sie die Cloud Storage, Pub/Sub, BigQuery und Dataflow APIs.
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-Jobs benötigen einen GCS Staging-Bucket für temporäre Dateien (Python Wheels, JAR-Uploads, Zwischenzustand). Das von PDE empfohlene Muster: ein Bucket pro Datenbereich, mit Unterordnern für staging/, temp/ und templates/, um den Betriebsstatus von den realen Daten zu trennen.
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]
}Der PDE-kanonische Streaming-Eingang: Publisher (Clickstream, IoT, CDC) senden Ereignisse an ein Pub/Sub-Thema; Dataflow abonniert und schreibt in BigQuery. Pub/Sub bietet Ihnen eine dauerhafte, mindestens einmalige Zustellung und die Entkopplungsschicht, die es Ihnen ermöglicht, Konsumenten zu ändern, ohne Produzenten zu berühren.
Wir erstellen das Thema events + ein Dataflow-eigenes Abonnement events-to-bq. Die ack_deadline_seconds = 60 des Abonnements ist die von PDE empfohlene Dataflow-Einstellung; länger als die typische Dataflow-Fenster-Emissionskadenz.
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
}Die PDE-Prüfung testet diese Partitionierungs- + Clustering-Wahl unerbittlich. Wir erstellen die events-Tabelle, partitioniert nach event_time (Granularität TAG, die wiederkehrende PDE-kanonische Wahl) und geclustert nach event_type – jede Abfrage, die nach event_time filtert, überspringt irrelevante Partitionen, jede Abfrage, die nach event_type filtert, überspringt irrelevante Blöcke innerhalb der Partition.
require_partition_filter = true erzwingt, dass Abfragen eine WHERE event_time >= ...-Klausel enthalten – die von PDE empfohlene Schutzmaßnahme gegen versehentlich teure Full-Table-Scans.
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 sind die PDE-kanonische Job-als-Ressource-Form – Google liefert vorgefertigte Vorlagen für gängige Muster (Pub/Sub → BigQuery, Pub/Sub → GCS, JDBC → BigQuery usw.), die Sie mit Parametern starten können.
Wir starten die von Google bereitgestellte Pubsub_Subscription_to_BigQuery-Vorlage gegen das Abonnement aus Schritt 3 und die Tabelle aus Schritt 4. Der Job startet sofort bei terraform apply; er wird unter Dataflow → Jobs angezeigt. Brechen Sie ihn ab, wenn Sie fertig sind, über gcloud dataflow jobs cancel <job-id> --region us-central1, um die monatliche Worker-Abrechnung von ~$50 zu stoppen.
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 reißt alles ab. Der Dataflow-Job wird abgebrochen (on_delete = "cancel") und die Worker-Abrechnung stoppt innerhalb weniger Minuten. Pub/Sub + BigQuery + GCS-Ressourcen werden sauber zerstört. Die BigQuery-Tabelle, die aufgenommene Ereignisse enthält, wird zusammen mit dem Dataset gelöscht (delete_contents_on_destroy).
PDE deckt viele GCP-Datenoberflächen ab, die dieses Lab nicht behandeln kann — Dataproc (verwaltetes Hadoop / Spark), Cloud Composer (verwaltetes Airflow für Batch-Orchestrierung), Cloud Data Fusion (visuelles ETL), Database Migration Service (DMS), Datastream (CDC von Oracle / MySQL / Postgres → BigQuery), Cloud Storage Transfer Service, BigQuery Omni / BigLake (Multi-Cloud / externe Tabellen), BigQuery ML (In-Database ML), BigQuery BI Engine (gecachte Abfrageschicht für Looker), Looker / Looker Studio, Cloud Pub/Sub Lite (günstiger, aber eingeschränkter), Spanner / Bigtable / Firestore für Anwendungsdaten (behandelt in [[gcp-pcdoe]]), Vertex AI Pipelines / Feature Store / Workbench (behandelt in [[gcp-pmle]]), Cloud DLP / Sensitive Data Protection für PII-Redaktion.
Wir bleiben bei den Primitiven GCS + Pub/Sub + Dataflow + BigQuery, da dies die PDE-kanonische Streaming-Pipeline ist, auf der jedes Prüfungsszenario aufbaut. Composer orchestriert dieselben Formen im Batch. Dataproc ist die alternative Compute-Engine für Spark-Workloads, die in dasselbe BigQuery schreiben. Datastream ist eine verwaltete CDC-Variante derselben Pub/Sub → Dataflow → BigQuery-Form. Meistern Sie die kanonische Pipeline; die Alternativen fügen sich dann ein.
Eine konzeptionelle Abdeckung der einzelnen Dienste finden Sie in den Abschnitten Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.