最終確認: 2026年5月
ACE 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終了までに、プレーンなTerraformを使用して、最小限の現実的なACE風味のGCP管理者基盤をプロビジョニングします。これには、1つのリージョンサブネットを持つカスタムモードVPC、2つのファイアウォールルール(内部許可 + IAP SSH)、最小限の権限を持つIAMでサービスアカウントを実行するCompute Engine VM、およびクォータエラー時にページングするCloud Loggingアラートポリシーが含まれます。これは「初日IaaS管理者」の装備です。
これらのスニペットを単一の main.tf にドロップし、terraform init を実行した後、terraform apply をステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。gcloud auth application-default login。your-project-id を実際のプロジェクトIDに置き換えてください。gcloud compute ssh certlabpro-ace-vm --tunnel-through-iap。e2-micro: us-central1 で月額約6.50ドル(対象となる場合、アカウントあたり1つの常時無料枠があります)。VMが実行されている間は月額約6.50ドルかかります。アクティブに使用しないときは、VMを停止または破棄してください。実行中のVMは、GCPでのラボコストの最大のサプライズ要因です。
Compute Engine、IAM、およびCloud Logging APIを有効にします。ACE試験では、この「リソースごとの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"
zone = "us-central1-a"
}
locals {
labels = {
project = "certlabpro-ace"
managed_by = "terraform"
}
}
resource "google_project_service" "compute" {
service = "compute.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "iam" {
service = "iam.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "logging" {
service = "logging.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "monitoring" {
service = "monitoring.googleapis.com"
disable_on_destroy = false
}GCPネットワークはグローバルであり、1つのVPCがすべてのリージョンにまたがり、サブネットはそこから切り出されるリージョンのプリミティブです。これはACE試験で繰り返し出題される形式です。AWSはリージョンVPCを持ち、AzureはリージョンVNetを持ちますが、GCPはリージョンサブネットを持つグローバルVPCを持っています。
auto_create_subnetworks を無効にし(ACEが推奨するカスタムモードVPCのデフォルト)、us-central1 に単一の /24 サブネットを構築し、Private Google Accessを有効にすることで、外部IPを持たないVMでもGCP APIに到達できるようにします。
resource "google_compute_network" "main" {
name = "certlabpro-ace-vpc"
auto_create_subnetworks = false
routing_mode = "REGIONAL"
depends_on = [google_project_service.compute]
}
resource "google_compute_subnetwork" "main" {
name = "certlabpro-ace-subnet"
ip_cidr_range = "10.10.1.0/24"
region = "us-central1"
network = google_compute_network.main.id
private_ip_google_access = true
}GCPのファイアウォールルールはVPCスコープであり(サブネットごとではなく)、明示的な「方向」(イングレス(デフォルト)またはイグレス)を持ちます。デフォルトのイングレスはすべて拒否、デフォルトのイグレスはすべて許可です。ACE試験では、この「方向 + デフォルト拒否」の不変性が執拗に問われます。
以下のルールを追加します:
10.10.1.0/24 サブネット内のVM間のTCP/UDP/ICMP通信を許可します。35.235.240.0/20)からのTCP/22を許可し、VMをインターネットに公開せずにSSH接続できるようにします。IAP-SSHルールはACE推奨パターンです。これにはVMに対する roles/iap.tunnelResourceAccessor が必要です(バインディングはステップ4で処理されます)。
resource "google_compute_firewall" "allow_internal" {
name = "certlabpro-ace-allow-internal"
network = google_compute_network.main.name
direction = "INGRESS"
source_ranges = ["10.10.1.0/24"]
allow {
protocol = "tcp"
}
allow {
protocol = "udp"
}
allow {
protocol = "icmp"
}
}
resource "google_compute_firewall" "allow_iap_ssh" {
name = "certlabpro-ace-allow-iap-ssh"
network = google_compute_network.main.name
direction = "INGRESS"
source_ranges = ["35.235.240.0/20"] # IAP gateway range
allow {
protocol = "tcp"
ports = ["22"]
}
}Compute Engine VMは添付されたサービスアカウントで実行されます。これはAWS EC2インスタンスプロファイルまたはAzure VMマネージドIDのGCP版です。ACE推奨パターン: デフォルトのComputeサービスアカウント(過剰な権限を持つ)は決して使用せず、ワークロードに必要なIAMロールのみを持つワークロードごとのサービスアカウントを常に作成します。
サービスアカウントを作成し、roles/logging.logWriter + roles/monitoring.metricWriter(Ops Agentがログ/メトリクスを送信するための最小限の権限)を付与し、外部IPのない e2-micro Debian VMにアタッチします。ステップ3のIAP-SSHファイアウォールルールにより、トンネル経由でそれに到達できます。
resource "google_service_account" "vm" {
account_id = "certlabpro-ace-vm-sa"
display_name = "ACE lab VM service account"
}
resource "google_project_iam_member" "vm_log_writer" {
project = data.google_project.current.project_id
role = "roles/logging.logWriter"
member = "serviceAccount:${google_service_account.vm.email}"
}
resource "google_project_iam_member" "vm_metric_writer" {
project = data.google_project.current.project_id
role = "roles/monitoring.metricWriter"
member = "serviceAccount:${google_service_account.vm.email}"
}
data "google_project" "current" {}
resource "google_compute_instance" "vm" {
name = "certlabpro-ace-vm"
machine_type = "e2-micro"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
network_interface {
subnetwork = google_compute_subnetwork.main.id
# No access_config block = no external IP. SSH via IAP only.
}
service_account {
email = google_service_account.vm.email
scopes = ["cloud-platform"] # API scope; IAM does the real gating
}
labels = local.labels
}ACE推奨の可観測性パターン: ログベースのメトリックがCloud Loggingフィルターに一致する数をカウントし、メトリックが閾値を超えるとCloud Monitoringアラートポリシーが発動します。このプロジェクト内の任意のGCE VMからの severity >= ERROR のログ行を監視し、1分ごとにカウントし、5分間に5回以上ヒットした場合にアラートを発生させます。
通知チャネルは暗黙的に残されています。アラートポリシーには notification_channels 配列が必要ですが、チャネル自体(メール、Slack、PagerDuty)は通常、コンソールでプロジェクトごとに一度設定されます。ACE試験では、この「ログメトリック → アラートポリシー → 通知チャネル」の三角形が標準的な可観測性プリミティブとして問われます。
resource "google_logging_metric" "vm_errors" {
name = "certlabpro_ace_vm_errors"
filter = "resource.type=\"gce_instance\" AND severity >= ERROR"
metric_descriptor {
metric_kind = "DELTA"
value_type = "INT64"
}
depends_on = [google_project_service.logging]
}
resource "google_monitoring_alert_policy" "vm_error_burst" {
display_name = "ACE lab — VM error burst"
combiner = "OR"
conditions {
display_name = "More than 5 ERROR lines per 5 minutes"
condition_threshold {
filter = "metric.type=\"logging.googleapis.com/user/${google_logging_metric.vm_errors.name}\" AND resource.type=\"gce_instance\""
duration = "300s"
comparison = "COMPARISON_GT"
threshold_value = 5
aggregations {
alignment_period = "60s"
per_series_aligner = "ALIGN_DELTA"
}
}
}
# notification_channels = [] # add channels via the console or as a separate TF resource
depends_on = [google_project_service.monitoring]
}terraform destroy ですべてを破棄します。VMは破棄と同時に課金が停止します(ディスクも同時に削除されます)。サービスアカウントは破棄され、IAMバインディングは解除されます。VPC + サブネット + ファイアウォールはきれいに破棄されます。ログベースのメトリック + アラートポリシーはきれいに分離されます。プロジェクトサービスは有効なままです(有効にしておいても無料です)。
ACEは、このラボでは扱いきれない多くのGCP管理インターフェースをカバーしています — Cloud Load Balancing(グローバルHTTP(S) LB、リージョン内部LB、ネットワークLB)、マネージドインスタンスグループとオートスケーリング、Cloud Run、GKEクラスタ、Cloud Storage([[gcp-cdl]]でカバー)、Cloud SQL、Cloud Spanner、Cloud Bigtable、Pub/Sub、Cloud Functions、Cloud Scheduler、Cloud Tasks、Cloud KMS、VPC Peering / Shared VPC([[gcp-pcne]])、Cloud NAT、Cloud VPN / Interconnect、Cloud DNS、Cloud Armor、IAMカスタムロール、Resource Manager階層(フォルダ + 組織)、Cloud Asset Inventory、Cloud Deployment Manager(Terraformに置き換えられ非推奨)。
より高度なGCP管理パターンがすべてその上に構築される基盤であるため、私たちはVPC + GCE + IAM + Loggingのプリミティブに焦点を当てています。MIGはGCEインスタンスをスケーリングし、LBはMIGの前面に位置し、GKE / Cloud Runはコンピューティング上で実行され、すべてがCloud Loggingに書き込まれます。
サービスごとの概念的な範囲については、この認定ページにある閲覧、プレイブック、およびEditorialセクションを参照してください。