💡

Terraform で Cloud Composer 2 を簡単デプロイ!5分でできる構築手順

2025/02/08に公開

前提

  • Google Cloudプロジェクトが作成済み
  • 下記ツールがインストールされている(バージョンが出力される)こと
  • シェルスクリプトが使えること
terminal
gcloud --version
terraform --version

構築手順

Google Cloudの認証を通す

gcloud auth application-default login  # ブラウザからログインして認証を通す
gcloud config set project [プロジェクト名]

Google Cloud APIを有効化する

gcloud services enable composer.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable iam.googleapis.com
gcloud services enable serviceusage.googleapis.com

Google Cloudのプロジェクト番号を調べる

gcloud projects describe [プロジェクト名]
# 出力される数字をメモしておく

Terraformコードを用意する

空ファイルを作成する

touch main.tf
touch terraform.tfvars
touch variables.tf

コーディングする

最新の Cloud Composer のイメージバージョンは公式ドキュメントで確認してください。

main.tf
provider "google-beta" {
  project = var.project_id
  region  = var.region
}

resource "google_project_service" "composer_api" {
  provider = google-beta
  project  = var.project_id
  service  = "composer.googleapis.com"

  disable_on_destroy                    = false
  check_if_service_has_usage_on_destroy = true
}

resource "google_service_account" "custom_service_account" {
  provider     = google-beta
  account_id   = var.service_account_id
  display_name = "Custom Service Account for Composer"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = var.project_id
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  role     = "roles/composer.worker"
}

resource "google_service_account_iam_member" "custom_service_account" {
  provider           = google-beta
  service_account_id = google_service_account.custom_service_account.name
  role               = "roles/composer.ServiceAgentV2Ext"
  member             = format("serviceAccount:service-%s@cloudcomposer-accounts.iam.gserviceaccount.com", var.project_number)
}

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name     = var.composer_environment_name
  region   = var.region

  config {
    software_config {
      image_version = var.image_version
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }
  }
}

Terraform では、variables.tf で 変数(variable) を定義し、terraform.tfvars に 実際の値(value)をセットすることで、環境ごとに柔軟に設定を変更できます。

variables.tf
variable "project_id" {
  description = "プロジェクトID"
  type        = string
}

variable "region" {
  description = "リージョン"
  type        = string
}

variable "composer_environment_name" {
  description = "Cloud Composer 環境名"
  type        = string
}

variable "service_account_id" {
  description = "サービスアカウントID"
  type        = string
}

variable "image_version" {
  description = "Cloud Composerのイメージバージョン"
  type        = string
}

variable "project_number" {
  description = "GCPプロジェクト番号"
  type        = string
}

下記は、仮の値を設定しているので、環境に合わせて適宜修正しましょう。

terraform.tfvars
project_id                = "example-project"
region                    = "us-central1"
composer_environment_name = "example-environment"
service_account_id        = "custom-service-account"
image_version             = "composer-2.10.2-airflow-2.10.2"
project_number            = "123456789012"

Terraformを実行する

terraform plan を実行し、作成されるリソースを確認しましょう。
デプロイが完了するまでしばらく時間がかかります。

terraform init
terraform plan
terraform apply -auto-approve

Google Cloudのコンソール画面で確認する

こんがり上手にできました。

片付ける

terraform destroy -auto-approve
# -auto-approve を付けると確認なしで即時削除されるため、慎重に使用してください。

参考資料

https://cloud.google.com/composer/docs/composer-2/terraform-create-environments?hl=ja

Discussion