Dernière révision : mai 2026
Configurez les services AWS figurant à l'examen PCD avec Terraform simple — un bloc à la fois, chacun étant lié à un domaine de l'examen. Le même code fonctionne sur OpenTofu.
À la fin de ce laboratoire, vous aurez provisionné, avec du Terraform simple, le substrat d'application événementielle PCD le plus petit et réaliste — un dépôt Docker Artifact Registry pour héberger vos images conteneur, un sujet + abonnement Pub/Sub comme épine dorsale de messagerie asynchrone, un service Cloud Run exécutant une image de substitution, et Secret Manager pour les secrets d'application. Cinq blocs ; chaque scénario d'examen PCD se compose sur cette base.
Déposez les extraits dans un seul main.tf, exécutez terraform init, puis terraform apply étape par étape.
>= 1.5 ou OpenTofu >= 1.6.your-project-id dans le bloc fournisseur.Tout est gratuit ou presque gratuit dans le cadre du laboratoire :
min_instances = 0 — coût d'inactivité nul.~0 $/mois au volume du laboratoire. Cloud Run avec min_instances = 0 est le réglage par défaut recommandé par le PCD — pas de facturation d'inactivité.
Activez les API Cloud Run, Artifact Registry, Pub/Sub et 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 est le registre de conteneurs + paquets de GCP — le remplacement moderne du Container Registry (gcr.io) déprécié. L'examen PCD teste ce modèle de poussée vers Artifact Registry → déploiement depuis Artifact Registry comme forme canonique de CI/CD.
Nous créons un dépôt régional au format Docker. Poussez-y après terraform apply via :
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 est le service de messagerie géré de GCP — le fondement de toute application événementielle suivant le modèle PCD. Les sujets sont des cibles de publication ; les abonnements sont des points de terminaison de consommateur (pull ou push). L'examen PCD teste la livraison au moins une fois + les consommateurs idempotents comme sémantique principale.
Nous créons :
orders — où les producteurs publient.orders-worker — les consommateurs tirent de celui-ci. Les déploiements en production utilisent souvent des abonnements push vers des points de terminaison Cloud Run à la place (la forme événementielle canonique PCD : Pub/Sub push → Cloud Run) ; nous restons en mode pull ici pour simplifier IAM.ack_deadline_seconds = 60 donne aux consommateurs 60 secondes pour accuser réception ; plus long que le délai d'attente de requête par défaut de Cloud Run et un paramètre de réglage récurrent de l'examen PCD.
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 est le "conteneur en tant que service" de GCP — il exécute des conteneurs Docker sur l'infrastructure serverless de Google et se met à l'échelle jusqu'à zéro. Modèle recommandé par le PCD : chaque service Cloud Run s'exécute en tant que son propre compte de service, jamais le compte de service Compute par défaut.
Nous déployons un service exécutant l'image publique hello comme substitut, attachons un compte de service par service avec roles/pubsub.subscriber sur le sujet de l'étape 3, et accordons roles/run.invoker à allUsers pour un accès non authentifié. Passez à un invocateur contrôlé par IAM pour la production — l'examen PCD teste cette bascule allUsers ↔ identité spécifique.
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 est le magasin de secrets de GCP — valeurs versionnées, accès contrôlé par IAM, crochets de rotation automatique. Modèle recommandé par le PCD : la configuration d'application qui n'est pas un secret va dans les variables d'environnement ; la configuration d'application qui est un secret (clés API, mots de passe de base de données, jetons OAuth) va dans Secret Manager, référencée par le service Cloud Run.
Nous créons un secret + une version initiale, puis accordons au compte de service Cloud Run de l'étape 4 le rôle roles/secretmanager.secretAccessor sur celui-ci. Pour intégrer le secret dans Cloud Run en tant que variable d'environnement, vous ajouteriez un bloc env { name = "..."; value_source { secret_key_ref { ... } } } dans le modèle de service (délibérément omis pour maintenir l'objectif de cette étape).
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 démolit tout. Le service Cloud Run est détruit (avec min_instances = 0 il ne coûtait déjà rien). Le dépôt Artifact Registry est détruit (le force_destroy est implicite puisque le laboratoire ne pousse aucune image). Les ressources Pub/Sub + Secret Manager sont détruites proprement.
Le PCD couvre de nombreuses surfaces de développement d'applications GCP que ce laboratoire ne peut pas inclure — Cloud Functions (l'alternative plus ancienne / légère à Cloud Run), Cloud Tasks (file d'attente asynchrone durable), Cloud Scheduler (cron en tant que service), Cloud Endpoints / API Gateway (surface API gérée devant Cloud Run), Cloud Trace + Cloud Profiler + Cloud Debugger (télémétrie de performance d'application — le niveau [[gcp-pcde]]), Firebase (la plateforme d'applications mobiles/web), Cloud Storage (utilisé comme hébergement d'actifs statiques pour les SPA), Cloud Build (CI/CD — [[gcp-pcde]]), Cloud Deploy (CD — [[gcp-pcde]]), Eventarc (routeur d'événements des services GCP vers Cloud Run / Functions), Workflows (orchestration), Firestore (base de données NoSQL pour les applications), Memorystore (Redis), Vertex AI pour la GenAI intégrée aux applications, et l'ensemble du produit App Engine (hérité mais toujours présent dans le plan d'examen PCD).
Nous nous en tenons aux primitives Artifact Registry + Pub/Sub + Cloud Run + Secret Manager car elles constituent l'épine dorsale canonique des applications événementielles PCD. Cloud Functions + Cloud Run partagent le même substrat d'images Artifact Registry. Eventarc achemine les événements vers Cloud Run / Functions. Cloud Tasks est la variante RPC synchrone de Pub/Sub. Maîtrisez le substrat ; les alternatives s'inséreront.
Pour une couverture conceptuelle service par service, consultez les sections Parcourir, Guide et Editorial de cette page de certification.