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 環境を実行するために必要なすべての権限を持つ環境のサービス アカウントを作成する方法について説明します。

このガイドで説明するように、DAG で環境とオペレーションを実行するために必要な権限のみを持つ Cloud Composer 環境にユーザー管理のサービス アカウントを設定することを強くおすすめします。

この方法は使用しないことをおすすめしますが、環境のサービス アカウントを指定しないと、Cloud Composer 環境はデフォルトの Compute Engine サービス アカウントを使用します。

環境のサービス アカウントでプロジェクト内の他のリソースにアクセスするには、追加の権限が必要になる場合があります。たとえば、DAG が BigQuery にデータを転送する場合、このアカウントには BigQuery に固有の権限またはロールが必要になることがあります。

次のロールと権限を持つカスタム サービス アカウントを定義します。

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"
}

環境の作成

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

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

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

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

  config {

    software_config {
      image_version = "composer-1.20.12-airflow-1.10.15"
    }

    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_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_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-1.20.12-airflow-1.10.15"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

次のステップ

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