最終確認: 2026年5月
PCD 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボを完了すると、プレーンなTerraformを使用して、PCDイベント駆動型アプリケーションの最小限かつ現実的な基盤をプロビジョニングできます。これには、コンテナイメージをホストするArtifact Registry Dockerリポジトリ、非同期メッセージングバックボーンとしてのPub/Subトピックとサブスクリプション、プレースホルダーイメージを実行するCloud Runサービス、およびアプリケーションシークレット用のSecret Managerが含まれます。5つのブロックで構成されており、すべてのPCD試験シナリオはこの基盤に基づいています。
これらのスニペットを単一のmain.tfに配置し、terraform initを実行してから、terraform applyをステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。your-project-id を置き換えてください。このラボの範囲では、すべて無料またはほぼ無料です。
min_instances = 0 のサービスをプロビジョニングするため、アイドル時のコストはゼロです。ラボの利用量では月額約0ドルです。min_instances = 0 のCloud Runは、PCDが推奨するデフォルト設定であり、アイドル時の課金はありません。
Cloud Run、Artifact Registry、Pub/Sub、およびSecret Manager APIを有効にします。
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 はGCPのコンテナとパッケージのレジストリであり、非推奨となったContainer Registry (gcr.io) の現代的な代替です。PCD試験では、この“Artifact Registryへのプッシュ → Artifact Registryからのデプロイ”パターンを規範的なCI/CDの形式としてテストします。
リージョンごとのDocker形式リポジトリを作成します。terraform apply の後、以下を使用してプッシュします。
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 はGCPのマネージドメッセージングサービスであり、すべてのPCDパターンイベント駆動型アプリケーションの基盤です。トピックは公開ターゲットであり、サブスクリプションはコンシューマエンドポイント(プルまたはプッシュ)です。PCD試験では、負荷分散セマンティクスとして 少なくとも1回の配信 + 冪等なコンシューマ をテストします。
以下を作成します。
orders。orders-worker。本番デプロイでは、代わりにCloud Runエンドポイントへの プッシュサブスクリプション が使用されることがよくあります(PCDの標準的なイベント駆動型形式:Pub/Subプッシュ → Cloud Run)。ここではIAMをよりシンプルに保つため、プルを使用します。ack_deadline_seconds = 60 は、コンシューマに60秒のアック時間を与えます。これはCloud Runのデフォルトのリクエストタイムアウトよりも長く、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 はGCPのコンテナ・アズ・ア・サービスであり、Googleのサーバーレスインフラ上でDockerコンテナを実行し、ゼロにスケーリングします。PCDが推奨するパターン:各Cloud Runサービスは、デフォルトのComputeサービスアカウントではなく、独自の サービスアカウントとして実行されます。
プレースホルダーとしてパブリックな hello イメージを実行するサービスをデプロイし、ステップ3のトピックに対して roles/pubsub.subscriber ロールを持つサービスごとのサービスアカウントをアタッチし、認証なしアクセス用に allUsers に roles/run.invoker を付与します。本番環境ではIAMゲート付きのインボーカーに切り替えてください — PCD試験ではこの allUsers ↔ 特定のIDへの切り替えがテストされます。
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 はGCPのシークレットストアであり、バージョン管理された値、IAM制御アクセス、自動ローテーションフックを提供します。PCDが推奨するパターン:シークレットではないアプリ設定は環境変数に、シークレットであるアプリ設定(APIキー、DBパスワード、OAuthトークンなど)はSecret Managerに保存し、Cloud Runサービスから参照します。
シークレットと最初のバージョンを作成し、ステップ4のCloud Runサービスアカウントに roles/secretmanager.secretAccessor ロールを付与します。シークレットをCloud Runの環境変数として接続するには、サービステンプレート内に env { name = "..."; value_source { secret_key_ref { ... } } } ブロックを追加します(このステップの焦点を保つため意図的に省略されています)。
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 ですべてが削除されます。Cloud Runサービス は破棄されます(min_instances = 0 であったため、すでにコストはかかっていませんでした)。Artifact Registryリポジトリ は破棄されます(ラボではイメージをプッシュしていないため、force_destroy は暗黙的です)。Pub/Sub と Secret Manager リソースはきれいに破棄されます。
PCDは、このラボではカバーしきれない多くのGCPアプリ開発者向けサービスを対象としています — Cloud Functions(Cloud Runの古い/軽量な代替)、Cloud Tasks(耐久性のある非同期キュー)、Cloud Scheduler(cron-as-a-service)、Cloud Endpoints / API Gateway(Cloud Runの前面にあるマネージドAPIサーフェス)、Cloud Trace + Cloud Profiler + Cloud Debugger(アプリパフォーマンステレメトリ — [[gcp-pcde]] ティア)、Firebase(モバイル/ウェブアプリプラットフォーム)、Cloud Storage(SPAの静的アセットホスティングとして使用)、Cloud Build(CI/CD — [[gcp-pcde]])、Cloud Deploy(CD — [[gcp-pcde]])、Eventarc(GCPサービスからCloud Run / Functionsへのイベントルーター)、Workflows(オーケストレーション)、Firestore(アプリ用NoSQL DB)、Memorystore(Redis)、アプリ内GenAI用のVertex AI、そしてApp Engine製品全体(レガシーですがPCD試験のブループリントにはまだ含まれています)。
私たちは Artifact Registry + Pub/Sub + Cloud Run + Secret Manager のプリミティブにこだわります。なぜなら、これらが PCDの標準的なイベント駆動型アプリの基盤 だからです。Cloud FunctionsとCloud Runは同じArtifact Registryイメージ基盤を共有します。EventarcはイベントをCloud Run / Functionsにルーティングします。Cloud TasksはPub/Subの同期RPCバリアントです。基盤をマスターすれば、代替も容易に組み込めます。
サービスごとの概念的な内容は、この認定ページの 閲覧、プレイブック、および Editorial セクションを参照してください。