使用 Terraform 建立環境

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁面是建立環境主頁面的輔助頁面。本文件說明如何使用 Terraform 在現有 Google Cloud 專案中,設定 Cloud Composer 環境和此環境的使用者自行管理服務帳戶。您可以使用這個頁面做為起點,然後視需要為環境新增更多設定參數。

關於 Cloud Composer 適用的 Terraform 模組

Google 會維護 Terraform 供應商 Google Cloud,其中包含 google_composer_environment 資源。這是 Terraform 官方支援的模組。

開放原始碼社群也維護其他 Terraform 模組。如要解決這類模組的問題,您可以在 GitHub 的存放區中建立問題。在 GitHub 上維護的開放原始碼專案範例之一是 terraform-google-composer 模組,這是 Terraform 藍圖和 Google Cloud模組 的一部分。雖然 Google 為此專案做出貢獻,但此模組並非由 Google 維護,也不與 Google Cloud的 Terraform 供應器相關。

事前準備

  • 本指南假設您有一個已設定帳單功能的 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 環境會使用這個區域。

google-beta 供應器支援 Cloud Composer 預先發布版功能。如果您只想使用 Cloud Composer 的 GA 功能,請使用 google 供應器,而非 google-beta

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 環境所需的所有權限。

強烈建議您為 Cloud Composer 環境設定使用者自行管理的服務帳戶,並只授予執行環境和 DAG 中作業所需的權限,如本指南所述。

雖然我們不建議使用這種做法,但如果您未指定環境的服務帳戶,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 設定環境,請參閱其他說明文件頁面。例如: