最終確認: 2026年5月
PCDE 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終了までに、プレーンなTerraformを使用して、PCDE形式のCI/CDと可観測性基盤をプロビジョニングします。具体的には、ビルド済みイメージ用のArtifact Registryリポジトリ、スタブGitHubソースを監視するCloud Buildトリガー、2つのCloud Runターゲット(ステージング+本番)を持つCloud Deployデリバリーパイプライン、そして本番ターゲットに対するCloud MonitoringのSLO + アラートポリシーです。これら5つのブロックは、PCDEがテストするコミット → ビルド → デプロイ → 監視のループを構成します。
これらのスニペットを単一の main.tf にドロップし、terraform init を実行してから、terraform apply をステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。your-project-id (およびオプションでステップ3の github-owner / github-repo)を置き換えてください。このラボの範囲では無料またはほぼ無料です。
min_instances = 0 のCloud Runターゲット: アイドル時は$0。ラボのボリュームであれば、月額約$0です。
Cloud Build、Cloud Deploy、Cloud Run、Artifact Registry、およびCloud Monitoringの各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-pcde"
managed_by = "terraform"
}
}
resource "google_project_service" "cloudbuild" {
service = "cloudbuild.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "clouddeploy" {
service = "clouddeploy.googleapis.com"
disable_on_destroy = false
}
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" "monitoring" {
service = "monitoring.googleapis.com"
disable_on_destroy = false
}PCDEの標準的なCI/CD形式:Cloud BuildはイメージをArtifact Registryに出力し、Cloud Deployは同じイメージSHAを複数の環境にプロモートします。リポジトリはすべての環境における唯一の真実のソースとなります — 不変のイメージ、可変のタグ。
resource "google_artifact_registry_repository" "images" {
repository_id = "certlabpro-pcde-images"
location = "us-central1"
format = "DOCKER"
labels = local.labels
depends_on = [google_project_service.artifactregistry]
}Cloud Buildトリガーは、PCDEのコミットからビルドへのプリミティブです。GitHubリポジトリの main ブランチに対するトリガーを定義します。プッシュするたびにリポジトリルートの cloudbuild.yaml が実行され、ステップ2のArtifact Registryに docker build + docker push します。
github-owner と github-repo を実際のレポに置き換えてください。トリガーはプロビジョニングされますが、GitHub Cloud Buildアプリがレポにインストールされるまで(一度限りの手動コンソール設定)、実行されません。
resource "google_cloudbuild_trigger" "main_push" {
name = "certlabpro-pcde-main-push"
description = "Build on push to main"
filename = "cloudbuild.yaml"
github {
owner = "github-owner" # REPLACE
name = "github-repo" # REPLACE
push {
branch = "^main$"
}
}
depends_on = [google_project_service.cloudbuild]
}Cloud Deploy はGCPのマネージドCDサービスであり、リリースを順序付けられたステージ(通常は開発 → ステージング → 本番)を通してプロモートします。各ステージはターゲット(Cloud Runサービス、GKEクラスタ、またはAnthosクラスタ)によってバックアップされます。PCDE試験では、この一度リリースし、何度もプロモートする形式が広範囲にわたってテストされます。
ここでは、2つのCloud Run ターゲットサービス(ステージング用と本番用、両方ともスケール・トゥ・ゼロ)と、それらを連鎖させる1つのデリバリーパイプラインを定義します。実際のリリースは、Cloud Buildの実行が成功した後、gcloud deploy releases create を介してトリガーされます。このラボでは、リリースを実行せずに基盤をプロビジョニングします。
resource "google_cloud_run_v2_service" "staging" {
name = "certlabpro-pcde-staging"
location = "us-central1"
template {
scaling { max_instance_count = 5 }
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
labels = local.labels
depends_on = [google_project_service.run]
}
resource "google_cloud_run_v2_service" "prod" {
name = "certlabpro-pcde-prod"
location = "us-central1"
template {
scaling { max_instance_count = 10 }
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
labels = local.labels
depends_on = [google_project_service.run]
}
resource "google_clouddeploy_target" "staging" {
name = "staging"
location = "us-central1"
run {
location = "projects/${data.google_project.current.project_id}/locations/us-central1"
}
depends_on = [google_project_service.clouddeploy]
}
resource "google_clouddeploy_target" "prod" {
name = "prod"
location = "us-central1"
run {
location = "projects/${data.google_project.current.project_id}/locations/us-central1"
}
require_approval = true # promotion to prod needs manual approval
depends_on = [google_project_service.clouddeploy]
}
data "google_project" "current" {}
resource "google_clouddeploy_delivery_pipeline" "main" {
name = "certlabpro-pcde-pipeline"
location = "us-central1"
serial_pipeline {
stages {
target_id = google_clouddeploy_target.staging.name
}
stages {
target_id = google_clouddeploy_target.prod.name
}
}
depends_on = [google_project_service.clouddeploy]
}PCDEのSLO / SLI / エラーバジェットの語彙は、負荷を支える可観測性の形式です — サイト信頼性とタグ付けされたPCDE試験のすべての質問がこれをテストします。ここでは、サービスレベル目標を定義します。「本番サービスへのHTTPリクエストの99%は、28日間のローリング期間で2xxを返す必要がある」。そして、バーンレートがバジェットが速すぎるペースで消費されていることを示すときに、Cloud Monitoringアラートが発動します。
5つのブロック(Artifact Registry、Cloud Buildトリガー、2つのCloud Runターゲット、Cloud Deployパイプライン、本番SLO + アラート)が配置されると、PCDEのコミット → ビルド → デプロイ → 監視ループがエンドツーエンドでプロビジョニングされます。
resource "google_monitoring_service" "prod" {
service_id = "certlabpro-pcde-prod-svc"
display_name = "PCDE prod Cloud Run service"
basic_service {
service_type = "CLOUD_RUN"
service_labels = {
service_name = google_cloud_run_v2_service.prod.name
location = google_cloud_run_v2_service.prod.location
}
}
depends_on = [google_project_service.monitoring]
}
resource "google_monitoring_slo" "prod_availability" {
service = google_monitoring_service.prod.service_id
slo_id = "certlabpro-pcde-prod-availability"
display_name = "99% requests return 2xx (28-day rolling)"
goal = 0.99
rolling_period_days = 28
basic_sli {
availability {
enabled = true
}
}
}
resource "google_monitoring_alert_policy" "prod_budget_burn" {
display_name = "PCDE prod — fast budget burn"
combiner = "OR"
conditions {
display_name = "1-hour burn rate > 14.4 (fast burn)"
condition_threshold {
filter = "select_slo_burn_rate(\"${google_monitoring_slo.prod_availability.name}\", \"3600s\")"
duration = "0s"
comparison = "COMPARISON_GT"
threshold_value = 14.4 # consumes 2% of monthly budget in 1 hour
}
}
}terraform destroy を実行すると、すべてが削除されます。Cloud Deployパイプラインとターゲットはきれいに削除されます(進行中のリリースによってブロックされることはありません)。2つのCloud Runサービスも削除されます(min_instances = 0 なので、いずれにせよラボ中にアイドル状態の課金は発生しません)。Cloud Buildトリガーは解除されます。SLO + アラート + 監視サービスもきれいに削除されます。
PCDEは、このラボではカバーしきれない多くの分野を扱います — Cloud Loggingの詳細(ログルーティング、ログシンク、ログバケット、ログ分析 ↔ BigQuery統合)、Cloud Trace + Cloud Profiler + Cloud Debugger(アプリパフォーマンス)、Error Reporting、Cloud Monitoringのダッシュボード + カスタムメトリクス + 稼働時間チェック、Cloud Buildのプライベートワーカープール、Cloud Buildの承認ルール、Cloud Deployのカナリア + ブルー/グリーン戦略、Cloud Deployのカスタムレンダリング/検証ステップ、SkaffoldベースのCloud Deployレンダリングパイプライン、イメージアテステーションの強制のためのBinary Authorization、Container Threat Detection、Web App and API Protection (WAAP) / Cloud Armor、Anthos Config Management + Policy Controller、GKE Backup、およびPCDE試験で頻繁に参照されるGoogle SRE Book / SRE Workbookの全プラクティスです。
本ラボでは、Artifact Registry + Cloud Build + Cloud Deploy + Cloud Run + SLO/アラートのプリミティブに焦点を当てます。これらがPCDEで標準的なCI/CD/運用ループだからです。Logging / Trace / Profiler / Debugger / Error Reportingはすべて、同じ本番ターゲットサービスに接続されます。Binary AuthorizationはCloud Deployのプロモーションステップをゲートします。Cloud Monitoring SLOは負荷を支える信頼性のプリミティブであり、正しい形状を理解し、アーキテクチャの成熟に合わせてより多くのテレメトリ層を追加します。
サービスごとの概念的な範囲については、この認定ページにある閲覧、プレイブック、およびEditorialセクションを参照してください。