נבדק לאחרונה: מאי 2026
בנו את שירותי AWS של בחינת PDE עם Terraform פשוט — בלוק אחד בכל פעם, כאשר כל אחד מהם מקושר בחזרה לתחום במבחן. אותו הקוד עובד גם ב-OpenTofu.
עד סוף מעבדה זו, תהיה לכם תשתית צינור הזרמה (streaming pipeline) קנוני של PDE, מוגדר באמצעות Terraform פשוט: דלי איסוף ב-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 בבלוק ה-provider.Dataflow הוא הפריט שיש לשים לב אליו:
n1-standard-1): כ-$50 לחודש בזמן פעילות. הרסו במהירות לאחר כל סשן מעבדה.כ-$50 לחודש בזמן שמשימת Dataflow פועלת. עצרו אותה באמצעות gcloud dataflow jobs cancel אם אין בכוונתכם להשאיר אותה פועלת.
אפשרו את ה-APIs של 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 staging bucket עבור קבצים זמניים (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 + מנוי בבעלות Dataflow בשם events-to-bq. ה-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 — גוגל מספקת תבניות מובנות מראש עבור דפוסים נפוצים (Pub/Sub → BigQuery, Pub/Sub → GCS, JDBC → BigQuery וכו') ואתם מפעילים אותם עם פרמטרים.
אנו משיקים את התבנית 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 (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 בדף אישור זה.