Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der PCD-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 das kleinste realistische ereignisgesteuerte Anwendungs-Substrat für PCD bereitgestellt – ein Artifact Registry Docker-Repo zum Hosten Ihrer Container-Images, ein Pub/Sub-Topic + Abonnement als asynchrones Messaging-Rückgrat, einen Cloud Run-Dienst, der ein Platzhalter-Image ausführt, und Secret Manager für Anwendungsgeheimnisse. Fünf Blöcke; jedes PCD-Prüfungsszenario baut auf dieser Basis auf.
Legen Sie die Snippets in einer einzigen main.tf-Datei ab, führen Sie terraform init aus und anschließend terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.your-project-id im Provider-Block.Alle im Rahmen des Labs kostenlos oder nahezu kostenlos:
min_instances = 0 bereit – keine Kosten im Leerlauf.Ca. 0 $/Monat bei Lab-Nutzung. Cloud Run mit min_instances = 0 ist die von PCD empfohlene Standardeinstellung – keine Abrechnung im Leerlauf.
Aktivieren Sie die APIs für Cloud Run, Artifact Registry, Pub/Sub und Secret Manager.
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-pcd"
managed_by = "terraform"
}
}
resource "google_project_service" "run" {
service = "run.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "artifactregistry" {
service = "artifactregistry.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "pubsub" {
service = "pubsub.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "secretmanager" {
service = "secretmanager.googleapis.com"
disable_on_destroy = false
}Artifact Registry ist GCPs Container- und Paket-Registry – der moderne Ersatz für die veraltete Container Registry (gcr.io). Die PCD-Prüfung testet dieses Muster Push zu Artifact Registry → Bereitstellung von Artifact Registry als kanonische CI/CD-Form.
Wir erstellen ein regionales Docker-Format-Repository. Pushen Sie danach mit terraform apply über:
gcloud auth configure-docker us-central1-docker.pkg.dev
docker tag my-app:latest us-central1-docker.pkg.dev/$PROJECT/certlabpro-pcd-images/my-app:latest
docker push us-central1-docker.pkg.dev/$PROJECT/certlabpro-pcd-images/my-app:latest
resource "google_artifact_registry_repository" "images" {
repository_id = "certlabpro-pcd-images"
location = "us-central1"
format = "DOCKER"
description = "PCD lab Docker images"
labels = local.labels
depends_on = [google_project_service.artifactregistry]
}Pub/Sub ist GCPs verwalteter Messaging-Dienst – die Grundlage jeder ereignisgesteuerten Anwendung nach dem PCD-Muster. Topics sind Veröffentlichungsziele; Abonnements sind Konsumenten-Endpunkte (Pull oder Push). Die PCD-Prüfung testet mindestens einmalige Zustellung + idempotente Konsumenten als die tragenden Semantiken.
Wir erstellen:
orders – wo Produzenten veröffentlichen.orders-worker – Konsumenten ziehen Daten von hier. Produktionsbereitstellungen verwenden stattdessen oft Push-Abonnements für Cloud Run-Endpunkte (die PCD-kanonische ereignisgesteuerte Form: Pub/Sub Push → Cloud Run); wir bleiben hier beim Pull-Verfahren, um IAM einfacher zu halten.ack_deadline_seconds = 60 gibt Konsumenten 60 Sekunden zum Bestätigen; länger als das Standard-Anfrage-Timeout von Cloud Run und ein wiederkehrender Einstellungs-Knopf in der PCD-Prüfung.
resource "google_pubsub_topic" "orders" {
name = "orders"
labels = local.labels
depends_on = [google_project_service.pubsub]
}
resource "google_pubsub_subscription" "orders_worker" {
name = "orders-worker"
topic = google_pubsub_topic.orders.id
ack_deadline_seconds = 60
message_retention_duration = "604800s" # 7 days (max)
retry_policy {
minimum_backoff = "10s"
maximum_backoff = "600s"
}
labels = local.labels
}Cloud Run ist GCPs Container-as-a-Service – es führt Docker-Container auf Googles serverloser Infrastruktur aus und skaliert auf null. Das von PCD empfohlene Muster: Jeder Cloud Run-Dienst läuft als eigenes Service-Konto, niemals als das Standard-Compute-Service-Konto.
Wir stellen einen Dienst bereit, der das öffentliche hello-Image als Platzhalter ausführt, weisen ein pro-Dienst-Service-Konto mit roles/pubsub.subscriber auf dem Topic aus Schritt 3 zu und erteilen allUsers die Rolle roles/run.invoker für nicht authentifizierten Zugriff. Wechseln Sie für die Produktion zu einem IAM-gesteuerten Invoker – die PCD-Prüfung testet diesen allUsers ↔ spezifische-Identität-Wechsel.
resource "google_service_account" "worker" {
account_id = "certlabpro-pcd-worker"
display_name = "PCD lab Cloud Run worker"
}
resource "google_pubsub_subscription_iam_member" "worker_subscriber" {
subscription = google_pubsub_subscription.orders_worker.name
role = "roles/pubsub.subscriber"
member = "serviceAccount:${google_service_account.worker.email}"
}
resource "google_cloud_run_v2_service" "worker" {
name = "certlabpro-pcd-worker"
location = "us-central1"
template {
service_account = google_service_account.worker.email
scaling {
min_instance_count = 0 # scale-to-zero — no idle billing
max_instance_count = 5
}
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
resources {
limits = {
cpu = "1"
memory = "512Mi"
}
}
}
}
labels = local.labels
depends_on = [google_project_service.run]
}
resource "google_cloud_run_v2_service_iam_member" "public_invoker" {
name = google_cloud_run_v2_service.worker.name
location = google_cloud_run_v2_service.worker.location
role = "roles/run.invoker"
member = "allUsers" # lab-only; production = specific identity
}Secret Manager ist GCPs Secret-Speicher – versionierte Werte, IAM-kontrollierter Zugriff, automatische Rotations-Hooks. Das von PCD empfohlene Muster: App-Konfigurationen, die keine Secrets sind, kommen in Umgebungsvariablen; App-Konfigurationen, die Secrets sind (API-Schlüssel, DB-Passwörter, OAuth-Token), kommen in den Secret Manager und werden vom Cloud Run-Dienst referenziert.
Wir erstellen ein Secret + eine initiale Version und gewähren dem Cloud Run-Service-Konto aus Schritt 4 anschließend roles/secretmanager.secretAccessor. Um das Secret als Umgebungsvariable in Cloud Run einzubinden, würden Sie einen env { name = "..."; value_source { secret_key_ref { ... } } }-Block in der Dienstvorlage hinzufügen (absichtlich weggelassen, um diesen Schritt fokussiert zu halten).
resource "google_secret_manager_secret" "db_password" {
secret_id = "certlabpro-pcd-db-password"
replication {
auto {}
}
labels = local.labels
depends_on = [google_project_service.secretmanager]
}
resource "google_secret_manager_secret_version" "db_password_v1" {
secret = google_secret_manager_secret.db_password.id
secret_data = "lab-placeholder-rotate-me"
}
resource "google_secret_manager_secret_iam_member" "worker_reader" {
secret_id = google_secret_manager_secret.db_password.id
role = "roles/secretmanager.secretAccessor"
member = "serviceAccount:${google_service_account.worker.email}"
}terraform destroy reißt alles ab. Der Cloud Run-Dienst wird zerstört (mit min_instances = 0 kostete er bereits nichts). Das Artifact Registry Repo wird zerstört (force_destroy ist implizit, da das Lab keine Images pusht). Pub/Sub- und Secret Manager-Ressourcen werden sauber zerstört.
PCD deckt viele GCP-App-Entwickler-Oberflächen ab, die dieses Lab nicht alle behandeln kann – Cloud Functions (die ältere / leichtere Alternative zu Cloud Run), Cloud Tasks (persistente asynchrone Warteschlange), Cloud Scheduler (Cron-as-a-Service), Cloud Endpoints / API Gateway (verwaltete API-Oberfläche vor Cloud Run), Cloud Trace + Cloud Profiler + Cloud Debugger (App-Leistungs-Telemetrie – die [[gcp-pcde]]-Ebene), Firebase (die mobile/Web-App-Plattform), Cloud Storage (als Hosting für statische Assets für SPAs verwendet), Cloud Build (CI/CD – [[gcp-pcde]]), Cloud Deploy (CD – [[gcp-pcde]]), Eventarc (Ereignis-Router von GCP-Diensten zu Cloud Run / Functions), Workflows (Orchestrierung), Firestore (NoSQL-DB für Apps), Memorystore (Redis), Vertex AI für In-App GenAI und das gesamte App Engine-Produkt (veraltet, aber immer noch im PCD-Prüfungsplan).
Wir beschränken uns auf die Primitive Artifact Registry + Pub/Sub + Cloud Run + Secret Manager, da sie das PCD-kanonische Rückgrat ereignisgesteuerter Apps bilden. Cloud Functions + Cloud Run teilen sich dasselbe Artifact Registry Image-Substrat. Eventarc leitet Ereignisse an Cloud Run / Functions weiter. Cloud Tasks ist die synchrone RPC-Variante von Pub/Sub. Meistern Sie das Substrat; die Alternativen fügen sich dann ein.
Für eine konzeptionelle Abdeckung Dienst für Dienst siehe die Abschnitte Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.