💡
Terraform で Cloud Composer 2 を簡単デプロイ!5分でできる構築手順
前提
- 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のコンソール画面で確認する
- Cloud Composer の管理画面 にアクセス
- 作成した環境 (
example-environment
) が表示されているか確認
こんがり上手にできました。
片付ける
terraform destroy -auto-approve
# -auto-approve を付けると確認なしで即時削除されるため、慎重に使用してください。
参考資料
Discussion