Terraform を使用して環境を作成する

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

このページは、環境の作成のメインページに関連しています。Terraform を使用して、既存の Google Cloud プロジェクトでこの環境用に Cloud Composer 環境とユーザー管理サービス アカウントを設定する方法を示します。このページを手始めとして、必要に応じて環境の構成パラメータを追加できます。

始める前に

  • このガイドでは、課金が設定済みの Google Cloud プロジェクトがあることを前提としています。

    • 既存のプロジェクトを使用できます。
    • 新しいプロジェクトは、Google Cloud コンソール、Google Cloud CLI、API または Python クライアント ライブラリを使用して作成できます。
    • Terraform を使用してプロジェクトを作成、管理できます。詳細については、google_project リソースの Terraform ドキュメントをご覧ください。
  • gcloud CLI をインストール

Google Cloud での認証

Google Cloud で認証するには、次のコマンドを実行します。

gcloud auth application-default login

このコマンドの詳細については、gcloud auth application-default をご覧ください。

Terraform で Google プロバイダを構成する

既存のプロジェクト ID とリソースのデフォルト リージョンを指定します。Cloud Composer 環境では、そのリージョンが使用されます。

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

Cloud Composer API を有効にする

プロジェクトで Cloud Composer API を有効にします。

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  // This parameter prevents automatic disabling
  // of the API when the resource is destroyed.
  // We recommend to disable the API only after all environments are deleted.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

プロジェクトでカスタム サービス アカウントを作成する

デフォルトでは、Cloud Composer 環境は、デフォルトの Compute Engine サービス アカウントを使用します。このガイドでは、Cloud Composer 環境を実行するために必要なすべての権限を持つ新しいサービス アカウントを作成して、もう一つの方法を示します。

次のロールと権限を持つカスタム サービス アカウントを定義します。環境のサービス アカウントの権限の詳細については、IAM によるアクセス制御をご覧ください。

resource "google_service_account" "custom_service_account" {
  provider = google-beta
  account_id   = "custom-service-account"
  display_name = "Example Custom Service Account"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = "example-project"
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  // Role for Public IP environments
  role     = "roles/composer.worker"
}

Cloud Composer サービス アカウントに必要な権限を付与する

環境のサービス アカウントの許可ポリシーに新しいロール バインディングを追加します。

環境のサービス アカウントの新しいプリンシパルとして Cloud Composer サービス エージェント アカウントを追加し、Cloud Composer v2 API サービス エージェント拡張機能のロールを付与します。

Terraform を使用してプロジェクトの許可ポリシーを定義していない場合は、次の例を使用しないでください。代わりに、他の方法でこのバインディングを追加します。

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 = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

環境の作成

Terraform を使用して環境を作成します。

この例では、カスタム サービス アカウントを使用する環境の作成方法を示します。環境の他の構成パラメータ(カスタム スケールとパフォーマンスのパラメータ、追加の PyPI パッケージなど)を定義するパラメータを追加できます。

その他のパラメータの詳細については、環境を作成するをご覧ください。

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-2.9.7-airflow-2.9.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Terraform の完全なスクリプト(デフォルト パラメータ)

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

resource "google_project_iam_member" "service_agent_role" {
  provider = google-beta
  project  = "example-project"
  member   = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
  role     = "roles/composer.ServiceAgentV2Ext"
}

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    // Add your environment configuration here

    software_config {
      image_version = "composer-2.9.7-airflow-2.9.3"
    }

  }
}

Terraform の完全なスクリプト(カスタム サービス アカウント)

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

resource "google_service_account" "custom_service_account" {
  provider = google-beta
  account_id   = "custom-service-account"
  display_name = "Example Custom Service Account"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = "example-project"
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  // Role for Public IP environments
  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 = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-2.9.7-airflow-2.9.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

次のステップ

Terraform を使用した環境の構成については、他のドキュメント ページをご覧ください。次に例を示します。