最終確認: 2026年5月
CDL 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終わりには、プレーンなTerraformを使用して、最小限かつ現実的なGCPフットプリントをプロビジョニングします。具体的には、2つのプロジェクトサービスが有効になり、一貫したバケットレベルアクセスとライフサイクルを備えたCloud Storageバケット、および費用がしきい値を超えたときにメールで通知されるCloud Billing予算が設定されます。これは、AWSアカウントを作成し、その中にS3バケットを1つ配置することに相当するGCPの4つのブロックです。
これらのスニペットを単一の main.tf にドロップし、terraform init を実行した後、terraform apply をステップバイステップで実行します。
>= 1.5 または OpenTofu >= 1.6。provider ブロックに貼り付けます。gcloud auth application-default login。gcloud beta billing accounts list で見つけられます。terraform apply を実行する前に、以下のスニペットの your-project-id と your-billing-account-id を置き換えてください。この範囲ではすべて無料です:
us-* リージョンでは月間5 GBまで無料です。このラボのバケットは何も保持しません。このラボは月額約0ドルでアイドル状態になります。目的は、請求のトリップワイヤーが機能することを証明することです — CDL試験全体は、「GCPを安全に運用する」スキルセットを中心に展開しており、その中で「費用の把握」は最優先事項です。
GCPでは、リソースをプロビジョニングする前に、明示的なプロジェクトサービス(API)を有効にする必要があります。ここでは、storage.googleapis.com(ステップ2用)と billingbudgets.googleapis.com(ステップ4用)を有効にします。APIサーフェスが常にオンであるAWSと比較すると、GCPではプロジェクトごとにオプトインする必要があります。
your-project-id を実際のプロジェクトIDに置き換えてください。
terraform {
required_version = ">= 1.5"
required_providers {
google = { source = "hashicorp/google", version = "~> 6.0" }
}
}
provider "google" {
project = "your-project-id" # REPLACE with your GCP project ID
region = "us-central1"
}
locals {
labels = {
project = "certlabpro-cdl"
managed_by = "terraform"
}
}
resource "google_project_service" "storage" {
service = "storage.googleapis.com"
disable_on_destroy = false
}
resource "google_project_service" "budgets" {
service = "billingbudgets.googleapis.com"
disable_on_destroy = false
}Cloud StorageはGCPのS3に相当するサービスで、リージョン、マルチリージョン、デュアルリージョンのレプリケーションオプションを備えたオブジェクトストアです。CDL試験では、どのストレージクラスかという質問が繰り返し出題されます: Standard (ホット)、Nearline (30日超)、Coldline (90日超)、Archive (365日超)。
ここでは、一貫したバケットレベルアクセス(CDLが推奨するセキュリティのデフォルト — 細粒度なオブジェクトごとのACLを無効にし、IAMのみを優先)と、30日経過後にNearlineへ移行するライフサイクルを有効にします。名前はすべてのGCPでグローバルに一意である必要があるため、ランダムな16進数をサフィックスとして追加します。
resource "random_id" "suffix" {
byte_length = 4
}
resource "google_storage_bucket" "main" {
name = "certlabpro-cdl-${random_id.suffix.hex}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true # lab-only — never in production
lifecycle_rule {
condition {
age = 30
}
action {
type = "SetStorageClass"
storage_class = "NEARLINE"
}
}
labels = local.labels
depends_on = [google_project_service.storage]
}GCPのCloud Loggingはほとんどのサービスでデフォルトで有効になっていますが、CDL試験では、監査ログの*必須 vs デフォルト vs データアクセス*の違いが問われます。必須監査ログ(管理アクティビティ)は常にオンで無料で、無効にできません。デフォルトログ(一部サービスのデータ書き込み)はオンですが、無効にできます。データアクセスログ(データ読み取り)はデフォルトでオフ — 明示的に有効にする必要があり、通常通り課金されます。
ここでは、Cloud Storageのデータアクセスロギングを有効にし、ステップ2のバケット内のすべてのオブジェクトの読み取りがCloud Loggingに記録されるようにします。このラボは iam-audit-config プリミティブのデモンストレーションであり、本番環境のデプロイでは、[[gcp-pcse]] パターンを介して組織レベルでこのパターンが使用されます。
resource "google_project_iam_audit_config" "storage_data_access" {
service = "storage.googleapis.com"
audit_log_config {
log_type = "DATA_READ"
}
audit_log_config {
log_type = "DATA_WRITE"
}
}CDL試験ではこのパターンが非常によく出題されます — Cloud Billingの予算とアラートは、コスト管理に関するCDL試験の定番問題です。月額10ドルの予算を設定し、予測支出の50% / 90% / 100%でアラートが送られるように構成します。アラートは請求先アカウント管理者へメールで通知されます(メールには追加の設定は不要です。Slack / PagerDutyの場合は、Pub/SubトピックとCloud Functionのファンアウトを追加します)。
your-billing-account-id を実際のIDに置き換えてください。この予算は projects フィルターにより現在のプロジェクトのみにスコープ指定されます — CDL試験では、このプロジェクトごとの予算 vs 組織全体の予算の区別が問われます。
data "google_project" "current" {}
resource "google_billing_budget" "monthly_10" {
billing_account = "your-billing-account-id" # REPLACE — find via `gcloud beta billing accounts list`
display_name = "certlabpro-cdl-$10-monthly"
budget_filter {
projects = ["projects/${data.google_project.current.number}"]
}
amount {
specified_amount {
currency_code = "USD"
units = "10"
}
}
threshold_rules {
threshold_percent = 0.5
spend_basis = "FORECASTED_SPEND"
}
threshold_rules {
threshold_percent = 0.9
spend_basis = "FORECASTED_SPEND"
}
threshold_rules {
threshold_percent = 1.0
spend_basis = "CURRENT_SPEND"
}
depends_on = [google_project_service.budgets]
}terraform destroy ですべてがクリーンに削除されます。バケットは削除されます(ラボ専用の force_destroy = true により、Terraformは空でなくても削除できます — 本番環境では決して使用しないでください)。予算は解除され、メール通知は停止します。IAM監査構成はデフォルトに戻ります。プロジェクトサービスは有効のまま残ります(disable_on_destroy = false に設定しているため — 有効のままでも無料で、無効にすると同じプロジェクト上の無関係なワークロードが中断される可能性があります)。
CDLは、このラボでは扱えない多くのGCPサービスをカバーしています — Compute Engine VM、GKEクラスタ、Cloud Run、Cloud Functions、App Engine、BigQuery、Cloud SQL、Spanner、Bigtable、Firestore、Cloud Pub/Sub、Dataflow、Dataproc、Vertex AI、Cloud Build、Cloud Deploy、Anthos / マルチクラウド、Cloud CDN / Cloud Armor、VPC + Cloud NAT、Cloud Interconnect、Cloud IAM / Identity、Cloud KMS、Security Command Center、GCPマーケットプレイス全体。
このラボでは、Storage + Logging + Billing のプリミティブに焦点を当てます。これらは、あらゆるCDL試験シナリオで前提とされる最小共通分母のフットプリントだからです。他のすべてのGCPサービスはCloud Storageへの書き込み/Cloud Storageからの読み取り/Cloud Loggingへのログの記録/Cloud Billingダッシュボードへの表示を行います。基盤を習得し、後から専門サービスを重ねていきましょう。
サービスごとの概念的な範囲については、この認定ページにある閲覧、プレイブック、およびEditorialセクションを参照してください。