最終確認: 2026年5月
PCA 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終わりまでに、プレーンなTerraformを使用して、5つのブロックからなるPCAリファレンスアーキテクチャをプロビジョニングします。具体的には、リージョンサブネットとアウトバウンド専用エグレス用のCloud NATを備えたカスタムVPC、ワークロード実行環境としてのGKE Autopilotクラスタ、プライベートIPのみを持つCloud SQL Postgresインスタンス(VPCピアリング経由でGKEから到達可能)、そしてCloud Storageアプリバケットです。これは、すべてのPCA試験シナリオが始まる形です。
これらのスニペットを単一のmain.tfに配置し、terraform initを実行してから、terraform applyをステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。your-project-idを置き換えてください。terraform apply後にGKEクラスタと対話したい場合はkubectlが必要です: gcloud container clusters get-credentials certlabpro-pca-cluster --region us-central1。3つの項目がアイドル時にも課金されます:
db-f1-microティアも存在しますが、これは非推奨になりつつあります。PCA試験では現在db-perf-optimized-N SKUが参照されます。すべてプロビジョニングされた状態で約$125/月かかります。ラボセッション終了後、速やかに破棄してください — これはGCPラボセットの中で最も高価なラボです。
Compute、GKE、Cloud SQL、Service Networking(Cloud SQLプライベートIP用)、およびCloud Storageの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-pca"
managed_by = "terraform"
}
}
resource "google_project_service" "compute" {
service = "compute.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "container" {
service = "container.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "sqladmin" {
service = "sqladmin.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "servicenetworking" {
service = "servicenetworking.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}PCAが推奨するパターン:プライベートVM/Podは外部IPを持たないものの、外部の依存関係(pip / docker / API呼び出し)に到達する必要があります。その解決策がCloud NATです。Cloud NATは、プライベートリソースにアウトバウンド専用のエグレスを提供するマネージドリージョンNATサービスです。
ここでは、GKE用の2つのセカンダリレンジ(Pod + サービス)を持つ/20サブネットを切り出し、Cloud Routerをプロビジョニングし、それにCloud NATをアタッチします。
resource "google_compute_network" "main" {
name = "certlabpro-pca-vpc"
auto_create_subnetworks = false
depends_on = [google_project_service.compute]
}
resource "google_compute_subnetwork" "main" {
name = "certlabpro-pca-subnet"
ip_cidr_range = "10.10.0.0/20"
region = "us-central1"
network = google_compute_network.main.id
private_ip_google_access = true
secondary_ip_range {
range_name = "pods"
ip_cidr_range = "10.20.0.0/14"
}
secondary_ip_range {
range_name = "services"
ip_cidr_range = "10.24.0.0/20"
}
}
resource "google_compute_router" "nat_router" {
name = "certlabpro-pca-router"
region = "us-central1"
network = google_compute_network.main.id
}
resource "google_compute_router_nat" "nat" {
name = "certlabpro-pca-nat"
router = google_compute_router.nat_router.name
region = "us-central1"
nat_ip_allocate_option = "AUTO_ONLY"
source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
log_config {
enable = true
filter = "ERRORS_ONLY"
}
}GKE AutopilotはPCAが推奨するGKEモードです。Googleがノードプールを管理し、PodのvCPU/メモリの使用量に応じて課金されます。自分でノードプールのサイズを決定し課金されるGKE Standardと比較してください。PCA試験ではこのAutopilot対Standardのトレードオフが、繰り返し登場するマネージド対コントロールの形として出題されます。
ここでは、VPCネイティブ(エイリアスIP — Podはステップ2のセカンダリレンジからIPを取得し、NATからは取得しません)、プライベートクラスター(ノードIPはプライベートであり、コントロールプレーンもプライベートエンドポイントを取得します)、およびWorkload Identity(PodからGCP-API認証へのPCA推奨パターン — ノードレベルのサービスアカウント認証情報は不要)を有効にします。
resource "google_container_cluster" "main" {
name = "certlabpro-pca-cluster"
location = "us-central1" # regional Autopilot
enable_autopilot = true
network = google_compute_network.main.id
subnetwork = google_compute_subnetwork.main.id
ip_allocation_policy {
cluster_secondary_range_name = "pods"
services_secondary_range_name = "services"
}
private_cluster_config {
enable_private_nodes = true
enable_private_endpoint = false # public control plane for kubectl access
master_ipv4_cidr_block = "172.16.0.0/28"
}
deletion_protection = false # lab-only
depends_on = [google_project_service.container]
}PCAが推奨するデータベース接続性:VPCピアリングによるプライベートIP — Cloud SQLはGoogle管理のVPC内にプロビジョニングされ、それがあなたのVPCとピアリングされ、インスタンスはプライベートIPを取得し、Podはプライベートネットワーク経由でそれに到達します。パブリックIPを持つCloud SQLは、PCA試験で問われるアンチパターンです。
構成は次のとおりです。(1) Service Networkingが使用するあなたのVPCから/16を割り当てる、(2) servicenetworking.googleapis.comとVPCをピアリングする、(3) ipv4_enabled = falseとピアリングされたネットワーク参照を使用してCloud SQLインスタンスをプロビジョニングする。
resource "google_compute_global_address" "private_ip_alloc" {
name = "certlabpro-pca-sql-peer"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = google_compute_network.main.id
}
resource "google_service_networking_connection" "sql_peering" {
network = google_compute_network.main.id
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = [google_compute_global_address.private_ip_alloc.name]
depends_on = [google_project_service.servicenetworking]
}
resource "google_sql_database_instance" "main" {
name = "certlabpro-pca-pg"
database_version = "POSTGRES_15"
region = "us-central1"
settings {
tier = "db-perf-optimized-N-2"
availability_type = "ZONAL" # lab-only; production = REGIONAL
ip_configuration {
ipv4_enabled = false
private_network = google_compute_network.main.id
}
backup_configuration {
enabled = true
point_in_time_recovery_enabled = true
}
}
deletion_protection = false # lab-only
depends_on = [
google_service_networking_connection.sql_peering,
google_project_service.sqladmin,
]
}PCAリファレンスアーキテクチャには、必ず何かのためのCloud Storageバケットが含まれます — アップロード、エクスポート、ML特徴データ、静的ウェブアセットなど。ここでは、ユニフォームバケットレベルアクセスを有効にし、30日後にデータをニアラインに移動するライフサイクルを設定したバケットを追加します。
5つのブロック(VPC + NAT、Autopilot GKE、プライベートIP付きCloud SQL、GCSバケット)が揃い、PCAリファレンスアーキテクチャの形が完成します。ワークロードはGKE上で実行され、プライベートネットワーク経由でPostgresと通信し、成果物をGCSに書き込み、Cloud NAT経由で外部に出ます。
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "app" {
name = "certlabpro-pca-app-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only
lifecycle_rule {
condition {
age = 30
}
action {
type = "SetStorageClass"
storage_class = "NEARLINE"
}
}
labels = local.labels
depends_on = [google_project_service.storage]
}terraform destroyはすべてを削除します。GKEクラスターはきれいに削除されます(クラスター料金は即座に停止し、約$74/月節約されます)。Cloud SQLインスタンスは削除されます(ラボ専用のdeletion_protection = falseにより、約$50/月節約されます)。Cloud NAT + ルーターはデタッチされ、VPCピアリングレンジは解放されます。GCSバケットは削除されます(force_destroy = true)。
PCAは、このラボではカバーしきれない多くのアーキテクチャ層を扱います — Cloud Load Balancing(GKEの前にCloud CDN + Cloud Armorを備えたグローバルHTTP(S) LB)、アプリレベル認証のためのCloud Identity-Aware Proxy(IAP)、サーバーレスアプリ層のためのCloud Run + Cloud Functions、非同期メッセージングのためのCloud Pub/Sub、Cloud Tasks / Cloud Scheduler、キャッシングのためのMemorystore(Redis / Memcached)、データ層の代替としてのCloud Spanner / Bigtable / Firestore、オーケストレーションのためのCloud Composer / Workflows、アナリティクスのためのBigQuery、MLのためのVertex AI、Cloud DNS / Cloud Domains、CMK暗号化のためのCloud KMS([[gcp-pcse]])、ハイブリッドのためのCloud Interconnect / VPN、マルチクラウドのためのAnthos、Cloud Asset Inventory + Cloud Asset Service、Resource Manager階層(フォルダ + 組織)、Cloud Operations Suite(ログ記録 + モニタリング + APM + プロファイリング + トレーシング)など。
ここではVPC + Cloud NAT + GKE + Cloud SQL + GCSという基本要素に限定します。なぜなら、これらがPCAリファレンスアーキテクチャの骨格であり、他のすべてのGCPサービスはこの基盤に接続されるからです。Spanner / BigtableはCloud SQLの代替となります。Cloud RunはサーバーレスアプリのGKEの代替となります。Pub/SubはGKE Pod間の非同期メッセージングを追加します。この形は変わりません。
サービスごとの概念的な内容は、この認定試験ページの閲覧、プレイブック、Editorialセクションを参照してください。