अंतिम समीक्षा: मई 2026
साधारण Terraform के साथ PDE परीक्षा के AWS संसाधनों को बनाएं — एक समय में एक ब्लॉक, प्रत्येक परीक्षा डोमेन से जुड़ा हुआ। यही कोड OpenTofu पर भी काम करता है।
इस लैब के अंत तक, आप सादे टेराफ़ॉर्म के साथ, कैनॉनिकल पीडीई स्ट्रीमिंग पाइपलाइन को प्रावधानित कर चुके होंगे — एक क्लाउड स्टोरेज इनजेस्ट बकेट, इवेंट इनग्रेस के रूप में एक पब/सब टॉपिक, क्वेरी-लागत नियंत्रण के लिए विभाजित और क्लस्टर किया गया एक बिगक्वेरी डेटासेट + टेबल, और पब/सब → बिगक्वेरी को स्ट्रीम करने वाली एक डेटाफ़्लो फ्लेक्स टेम्प्लेट जॉब। पाँच ब्लॉक; पीडीई हर परीक्षा में पब/सब → डेटाफ़्लो → बिगक्वेरी पैटर्न का परीक्षण करता है।
स्निपेट्स को एक ही main.tf में डालें, terraform init चलाएँ, फिर terraform apply को स्टेप-बाय-स्टेप चलाएँ।
>= 1.5 या ओपनटोफू >= 1.6।your-project-id को बदलें।डेटाफ़्लो वह मद है जिस पर ध्यान देना है:
n1-standard-1 वर्कर): चलने के दौरान ~$50/महीना। प्रत्येक लैब सत्र के बाद तुरंत नष्ट करें।डेटाफ़्लो जॉब के चलने के दौरान ~$50/महीना। यदि आप इसे चलते हुए नहीं छोड़ना चाहते हैं, तो इसे gcloud dataflow jobs cancel के माध्यम से रोकें।
क्लाउड स्टोरेज, पब/सब, बिगक्वेरी और डेटाफ़्लो एपीआई सक्षम करें।
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
}डेटाफ़्लो जॉब्स को अस्थायी फ़ाइलों (पायथन व्हील्स, जार अपलोड, मध्यवर्ती स्थिति) के लिए एक GCS स्टेजिंग बकेट की आवश्यकता होती है। पीडीई-अनुशंसित पैटर्न: प्रति डेटा डोमेन एक बकेट, जिसमें 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]
}पीडीई-कैनॉनिकल स्ट्रीमिंग इनग्रेस: प्रकाशक (क्लिकस्ट्रीम, IoT, CDC) पब/सब टॉपिक पर इवेंट्स भेजते हैं; डेटाफ़्लो सदस्यता लेता है और बिगक्वेरी में लिखता है। पब/सब आपको टिकाऊ, कम से कम एक बार डिलीवरी और डिकपलिंग लेयर प्रदान करता है जो आपको उत्पादकों को छुए बिना उपभोक्ताओं को बदलने की सुविधा देता है।
हम events टॉपिक + डेटाफ़्लो-स्वामित्व वाली सदस्यता events-to-bq बनाते हैं। सदस्यता का ack_deadline_seconds = 60 पीडीई-अनुशंसित डेटाफ़्लो सेटिंग है; यह सामान्य डेटाफ़्लो विंडो-एमिशन कैडेंस से अधिक लंबा है।
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
}पीडीई परीक्षा इस पार्टिशन + क्लस्टर विकल्प का अथक परीक्षण करती है। हम events टेबल को event_time (DAY ग्रैन्युलैरिटी, बार-बार आने वाला पीडीई-कैनॉनिकल चयन) द्वारा विभाजित करते हैं और event_type द्वारा क्लस्टर करते हैं — event_time पर फ़िल्टर करने वाली हर क्वेरी अप्रासंगिक विभाजनों को छोड़ देती है, event_type पर फ़िल्टर करने वाली हर क्वेरी विभाजन के भीतर अप्रासंगिक ब्लॉकों को छोड़ देती है।
require_partition_filter = true क्वेरी को WHERE event_time >= ... क्लॉज शामिल करने के लिए मजबूर करता है — जो गलती से महंगी फुल-टेबल स्कैन के खिलाफ पीडीई-अनुशंसित सुरक्षा है।
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
}डेटाफ़्लो फ्लेक्स टेम्प्लेट पीडीई-कैनॉनिकल जॉब-एज-रिसोर्स आकार हैं — Google सामान्य पैटर्न (पब/सब → बिगक्वेरी, पब/सब → GCS, JDBC → बिगक्वेरी, आदि) के लिए पहले से बने टेम्प्लेट भेजता है और आप उन्हें पैरामीटर के साथ लॉन्च करते हैं।
हम स्टेप 3 से सदस्यता और स्टेप 4 से टेबल के खिलाफ Google-प्रदत्त Pubsub_Subscription_to_BigQuery टेम्प्लेट लॉन्च करते हैं। जॉब terraform apply पर तुरंत शुरू हो जाती है; यह डेटाफ़्लो → जॉब्स के तहत दिखाई देगी। ~$50/माह के वर्कर बिलिंग को रोकने के लिए gcloud dataflow jobs cancel <job-id> --region us-central1 के माध्यम से हो जाने पर इसे रद्द करें।
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 सब कुछ नष्ट कर देता है। डेटाफ़्लो जॉब रद्द कर दी जाती है (on_delete = "cancel") और वर्कर बिलिंग कुछ ही मिनटों में बंद हो जाती है। पब/सब + बिगक्वेरी + GCS संसाधन साफ-सुथरे तरीके से नष्ट हो जाते हैं। इनजेस्टेड इवेंट्स वाली बिगक्वेरी टेबल डेटासेट के साथ हटा दी जाती है (delete_contents_on_destroy)।
पीडीई कई जीसीपी डेटा सतहों को कवर करता है जिन्हें यह लैब फिट नहीं कर सकती है — डेटाप्रो (प्रबंधित हडूप / स्पार्क), क्लाउड कंपोजर (बैच ऑर्केस्ट्रेशन के लिए प्रबंधित एयरफ्लो), क्लाउड डेटा फ्यूजन (विज़ुअल ईटीएल), डेटाबेस माइग्रेशन सर्विस (DMS), डेटास्ट्रीम (ओरेकल / MySQL / पोस्टग्रेस → बिगक्वेरी से CDC), क्लाउड स्टोरेज ट्रांसफर सर्विस, बिगक्वेरी ओम्नी / बिगलेक (मल्टी-क्लाउड / बाहरी टेबल), बिगक्वेरी एमएल (इन-डेटाबेस एमएल), बिगक्वेरी बीआई इंजन (लुक़र के लिए कैश्ड क्वेरी लेयर), लुक़र / लुक़र स्टूडियो, क्लाउड पब/सब लाइट (सस्ता लेकिन अधिक सीमित), एप्लीकेशन-टियर डेटा के लिए स्पैनर / बिगटेबल / फायरस्टोर ([[gcp-pcdoe]] में कवर किया गया), वर्टेक्स एआई पाइपलाइन्स / फीचर स्टोर / वर्कबेंच ([[gcp-pmle]] में कवर किया गया), पीआईआई रिडक्शन के लिए क्लाउड डीएलपी / संवेदनशील डेटा सुरक्षा।
हम GCS + पब/सब + डेटाफ़्लो + बिगक्वेरी प्रिमिटिव्स पर टिके रहते हैं क्योंकि वे पीडीई-कैनॉनिकल स्ट्रीमिंग पाइपलाइन हैं जिस पर हर परीक्षा का परिदृश्य आधारित होता है। कंपोजर बैच में समान आकृतियों को ऑर्केस्ट्रेट करता है। डेटाप्रो स्पार्क वर्कलोड के लिए वैकल्पिक कंप्यूट इंजन है जो उसी बिगक्वेरी में लिखता है। डेटास्ट्रीम उसी पब/सब → डेटाफ़्लो → बिगक्वेरी आकार का एक प्रबंधित CDC प्रकार है। कैनॉनिकल पाइपलाइन में महारत हासिल करें; विकल्प इसमें फिट हो जाते हैं।
सेवा-दर-सेवा अवधारणात्मक कवरेज के लिए, इस प्रमाणपत्र पृष्ठ के ब्राउज़, मार्गदर्शिका, और Editorial अनुभाग देखें।