托管式 Airflow(第 3 代) | 托管式 Airflow(第 2 代) | 托管式 Airflow(旧版第 1 代)
本页面是关于 创建环境的主页面的配套页面。它演示了如何在现有 Google Cloud 项目中使用 Terraform设置 Managed Airflow 环境以及此环境的用户代管式服务账号 。您可以从本页面开始,然后根据需要为环境添加更多配置参数。
关于适用于 Managed Airflow 的 Terraform 模块
Google 维护着 适用于 的 Terraform 提供方 Google Cloud, 其中包括 google_composer_environment 资源。这是 Terraform 的官方支持模块。
还有其他由开源社区维护的 Terraform 模块。如需解决此类模块的问题,您可以在 GitHub 上其代码库中创建问题。GitHub 上维护的开源项目的一个示例是 terraform-google-composer 模块,它是 适用于 的 Terraform 蓝图和模块的一部分 Google Cloud。 虽然 Google 为此项目做出了贡献,但该模块并非由 Google 维护,并且与适用于的 Terraform 提供方无关 Google Cloud。
准备工作
本指南假设您有一个已配置结算功能的项目: Google Cloud
- 您可以使用现有项目。
- 您可以使用创建新项目 通过 Google Cloud 控制台、Google Cloud CLI、API 或 Python 客户端库。
- 您可以使用 Terraform 创建和管理项目。如需了解详情,请参阅
google_project资源的 Terraform 文档。
使用进行身份验证 Google Cloud
如需使用 Google Cloud进行身份验证,请运行以下命令:
gcloud auth application-default login
如需详细了解此命令,请参阅
gcloud auth application-default。
在 Terraform 中配置 Google 提供程序
指定现有项目 ID 和资源的默认区域。您的托管式 Airflow 环境使用此区域。
google-beta 提供程序支持处于预览版状态的 Managed Airflow 功能。如果您只想使用 Managed Airflow 的 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
}
在项目中创建环境的服务帐号
本指南演示了如何创建环境的服务帐号,该账号具有运行 Managed Airflow 环境所需的所有权限。
我们强烈建议您为托管式 Airflow 环境 设置用户代管式服务 ,该账号仅具有 运行环境和 DAG 中的操作所需的权限 ,如本指南中所述。
您的环境的服务帐号可能需要其他权限才能访问项目中的其他资源。例如,如果您的 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"
}
向 Managed Airflow 服务帐号授予所需权限
向环境的服务帐号 允许政策添加新的角色绑定。
您将 Managed Airflow 服务代理账号添加为环境的服务帐号的新正文,并向其授予 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.17.2-airflow-2.11.1"
}
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.17.2-airflow-2.11.1"
}
node_config {
service_account = google_service_account.custom_service_account.email
}
}
}
后续步骤
如需了解如何使用 Terraform 配置环境,请参阅其他文档页面。例如: