使用 Terraform 创建环境

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本页面是有关创建环境的主页面的配套页面。此示例演示了如何使用 Terraform 在现有 Google Cloud 项目中设置 Cloud Composer 环境以及该环境的用户代管式服务账号。您可以先使用此页面,然后根据需要为您的环境添加更多配置参数。

关于适用于 Cloud Composer 的 Terraform 模块

Google 维护适用于 Google Cloud的 Terraform 提供程序,其中包括 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 的正式版功能,请使用 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"
}

向 Cloud Composer 服务账号授予所需的权限

向环境的服务账号的允许政策添加新的角色绑定。

您可以在环境的服务账号账号中添加 Cloud Composer Service Agent 账号作为新主账号,并向其授予 Cloud Composer v2 API Service Agent Extension 角色。

如果您未使用 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.14.0-airflow-2.10.5"
    }

    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_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.14.0-airflow-2.10.5"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

后续步骤

如需了解如何使用 Terraform 配置环境,请参阅其他文档页面。例如: