创建 Cloud Composer 环境

Cloud Composer 1 | Cloud Composer 2

本页面介绍了如何创建 Cloud Composer 2 环境。

Cloud Composer 环境是部署到代管式 Google Kubernetes Engine 集群的独立 Apache Airflow 安装。您可以在单个 Google Cloud 项目中创建一个或多个环境。

准备工作

  • 如果您使用 Terraform 创建环境,则 Terraform 使用的服务账号必须具有启用了 composer.environments.create 权限的角色

    如需详细了解 Terraform 的服务账号,请参阅 Google 提供方配置参考文档

    如需详细了解如何使用 Terraform 创建 Cloud Composer 环境,请参阅 Terraform 文档

    如需详细了解其他参数,请参阅 Terraform 参数参考

  • 专用 IP:如需创建专用 IP 环境,您需要遵循特定的网络和对等互连要求。如需了解详情,请参阅配置专用 IP 地址

  • 共享 VPC:如需在 Cloud Composer 中使用共享 VPC,您需要遵循特定的网络要求。 如需了解相关信息,请参阅配置共享 VPC

  • VPC SC:如需在安全边界内部署 Cloud Composer 环境,请参阅配置 VPC SC。与 Cloud Composer 搭配使用时,VPC Service Controls 有多项已知限制

第 1 步:基本设置

此步骤会在指定位置创建一个具有默认参数的 Cloud Composer 环境。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Composer 2 的创建环境页面。

    转到“创建环境”

  2. 名称字段中,为环境输入名称。

    该名称必须以小写字母开头,后面最多可跟 62 个小写字母、数字或连字符,但不能以连字符结尾。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储桶名称。如需查看限制列表,请参阅存储桶命名准则

  3. 位置下拉列表中,为您的环境选择一个位置。

    位置是环境的 GKE 集群所在的区域。

  4. 映像版本下拉列表中,选择所需 Airflow 版本的 Cloud Composer 映像

gcloud

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version IMAGE_VERSION

您需要在其中:

  • ENVIRONMENT_NAME 替换为环境的名称。

    该名称必须以小写字母开头,后面最多可跟 62 个小写字母、数字或连字符,但不能以连字符结尾。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储桶名称。如需查看限制列表,请参阅存储桶命名准则

  • LOCATION 替换为环境的区域。

    位置是环境的 GKE 集群所在的区域。

  • IMAGE_VERSION 替换为 Cloud Composer 映像的名称。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3

API

构建 environments.create API 请求。在 Environment 资源中指定配置。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "softwareConfig": {
      "imageVersion": "IMAGE_VERSION"
    }
  }
}

您需要在其中:

  • PROJECT_ID 替换为项目 ID

  • LOCATION 替换为环境的区域。

    位置是环境的 GKE 集群所在的区域。

  • ENVIRONMENT_NAME 替换为环境名称。

    该名称必须以小写字母开头,后面最多可跟 62 个小写字母、数字或连字符,但不能以连字符结尾。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储桶名称。如需查看限制列表,请参阅存储桶命名准则

  • IMAGE_VERSION 替换为 Cloud Composer 映像的名称。

示例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "softwareConfig": {
      "imageVersion": "composer-2.6.6-airflow-2.6.3"
    }
  }
}

Terraform

要使用默认参数创建指定位置的环境,请将以下资源块添加到您的 Terraform 配置并运行 terraform apply

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    software_config {
      image_version = "IMAGE_VERSION"
    }
  }
}

您需要在其中:

  • ENVIRONMENT_NAME 替换为环境的名称。

    该名称必须以小写字母开头,后面最多可跟 62 个小写字母、数字或连字符,但不能以连字符结尾。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储桶名称。如需查看限制列表,请参阅存储桶命名准则

  • LOCATION 替换为环境的区域。

    位置是环境的 GKE 集群所在的区域。

  • IMAGE_VERSION 替换为 Cloud Composer 映像的名称。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    software_config {
      image_version = "composer-2.6.6-airflow-2.6.3"
    }
  }
}

第 2 步:(可选)为您的环境选择服务账号

Cloud Composer 会将此服务帐号绑定到您环境的 Kubernetes 服务帐号。环境集群中的节点作为 Kubernetes 服务帐号运行,并使用绑定访问 Google Cloud 项目中的资源,例如环境存储桶中的 DAG 定义文件。

默认情况下,Cloud Composer 环境使用默认的 Compute Engine 服务账号。我们建议您为 Cloud Composer 环境设置用户管理的服务账号

您以后无法更改环境的服务账号。

控制台

创建环境页面的服务账号下拉列表中,为您的环境选择一个服务账号。

gcloud

创建环境时,--service-account 会为您的环境指定服务账号。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --service-account "SERVICE_ACCOUNT"

您需要在其中:

  • SERVICE_ACCOUNT 替换为您的环境的服务账号。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --service-account "example-account@example-project.iam.gserviceaccount.com"

API

创建环境时,请在环境 > EnvironmentConfig 资源中为您的环境指定一个服务账号。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
}

您需要在其中:

  • SERVICE_ACCOUNT 替换为您的环境的服务账号。

示例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "nodeConfig": {
      "serviceAccount": "example-account@example-project.iam.gserviceaccount.com"
    }
  }
}

Terraform

创建环境时,请使用 node_config 代码块中的 service_account 字段。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

替换:

  • SERVICE_ACCOUNT 替换为您的环境的服务账号。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    node_config {
      service_account = "example-account@example-project.iam.gserviceaccount.com"
    }
  }
}

第 3 步:向 Cloud Composer 服务账号授予所需的权限

在项目中启用 Cloud Composer API 时,系统会在您的项目中创建 Composer Service Agent 账号。Cloud Composer 使用此账号在您的 Google Cloud 项目中执行操作。

Cloud Composer v2 API Service Agent Extension 角色可为 Cloud Composer Service Agent 帐号提供额外的权限。系统不会自动授予此角色。您必须手动授予该权限。

控制台

在项目中创建环境时,如果 Cloud Composer Service Agent 没有环境服务帐号的必需权限,则会显示向 Cloud Composer 服务帐号授予必需的权限部分。

您可以将 Cloud Composer Service Agent 帐号添加为环境服务帐号的新主帐号,然后向其授予 Cloud Composer v2 API Service Agent Extension 角色。

确认您为环境使用了预期的服务帐号,然后点击授权

gcloud

您可以将 Cloud Composer Service Agent 帐号添加为环境服务帐号的新主帐号,然后向其授予 Cloud Composer v2 API Service Agent Extension 角色。

gcloud iam service-accounts add-iam-policy-binding \
    SERVICE_ACCOUNT \
    --member serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
    --role roles/composer.ServiceAgentV2Ext

您需要在其中:

  • SERVICE_ACCOUNT 替换为您的环境的服务账号。
  • PROJECT_NUMBER 替换为项目编号

示例:

gcloud iam service-accounts add-iam-policy-binding \
    example-account@example-project.iam.gserviceaccount.com \
    --member serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com \
    --role roles/composer.ServiceAgentV2Ext

API

如需授予该角色,您必须使用读取-修改-写入模式修改现有允许政策

  1. 读取您环境中的服务帐号的现有允许政策。
  2. 请对其进行修改,为 Cloud Composer 服务代理添加 roles/composer.ServiceAgentV2Ext 角色。
  3. 重写现有的允许政策。

如需了解详情,请参阅以编程方式控制访问权限

{
  "role": "roles/composer.ServiceAgentV2Ext",
  "members": [
    "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
  ]
}

您需要在其中:

示例:

{
  "role": "roles/composer.ServiceAgentV2Ext",
  "members": [
    "serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com"
  ]
}

Terraform

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

您可以将 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 = "SERVICE_ACCOUNT"
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

您需要在其中:

  • SERVICE_ACCOUNT 替换为您的环境的服务账号。
  • PROJECT_NUMBER 替换为项目编号

示例:

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = "example-account@example-project.iam.gserviceaccount.com"
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com"
}

第 4 步:(可选)配置环境规模和性能参数

如需为您的环境指定扩缩和性能配置,请选择环境大小和工作负载配置。

在 Cloud Composer 2 中,您可以在创建环境后更改所有性能和扩缩参数。

以下参数可控制规模和性能:

  • 环境大小。控制包含 Airflow 数据库的代管式 Cloud Composer 基础架构的性能参数。如果要运行大量 DAG 和任务,请考虑选择较大的环境大小。

  • 工作负载配置。控制在 GKE 集群中运行的环境组件(Airflow 调度器、Airflow Web 服务器和 Airflow 工作器)的规模和性能。

    • Airflow 调度器。解析 DAG 定义文件,根据时间表间隔安排 DAG 运行,并将任务排队以待 Airflow 工作器执行。

      您的环境可以同时运行多个 Airflow 调度器。使用多个调度器在多个调度器实例之间分配负载,以实现更好的性能和可靠性。

      您的环境中最多可以有 10 个调度器。

      增加调度器的数量并不总是可以提高 Airflow 性能。例如,仅使用一个调度器的性能可能优于使用两个调度器。如果额外的调度器未得到利用,则可能会发生这种情况,因而会占用环境的资源,而不会提升整体性能。实际的调度器性能取决于 Airflow 工作器的数量、在您的环境中运行的 DAG 和任务的数量,以及 Airflow 和环境的配置。

      我们建议您先使用两个调度器,然后再监控环境的性能。如果您更改调度器的数量,则可以随时将环境扩缩回原始调度器的数量。

      如需详细了解如何配置多个调度器,请参阅 Airflow 文档

    • Airflow 触发器。异步监控环境中所有推迟的任务。如果您的环境中至少有一个触发器实例(或在高弹性环境中至少有两个),您可以在 DAG 中使用可延期运算符

    • Airflow Web 服务器。运行 Airflow 网页界面,您可以在其中监控、管理和直观呈现 DAG。

    • Airflow 工作器。执行由 Airflow 调度器执行的任务。环境中的工作器数量下限和上限会动态变化,具体取决于队列中的任务数量。

控制台

您可以为环境选择预设。选择预设时,系统会自动选择该预设的扩缩和性能参数。您还可以选择自定义预设,并指定环境的所有扩缩和性能参数。

如需为您的环境选择容量和性能配置,请在创建环境页面上执行以下操作:

  • 如需使用预定义的值,请在环境资源部分中点击

  • 要为规模和性能参数指定自定义值,请执行以下操作:

    1. 环境资源部分中,点击自定义

    2. Scheduler 部分中,设置要使用的调度器的数量及其 CPU、内存和存储空间的资源分配。

    3. 触发器部分,使用触发器数量字段输入您环境中的触发器数量。如果您不想在 DAG 中使用可延迟运算符,则可以将此数字设置为 0

      如果您为环境设置了至少一个触发器,请使用 CPU内存字段为触发器配置资源分配。

    4. Worker 部分,指定:

      • 您环境中的自动扩缩限制的工作器数量下限和上限
      • 工作器的 CPU、内存和存储空间分配情况
    5. 核心基础架构部分的环境大小下拉列表中,选择环境大小。

gcloud

创建环境时,请设置以下参数来控制环境的扩缩和性能参数。

  • --environment-size 用于指定环境大小。
  • --scheduler-count 用于指定调度器的数量。
  • --scheduler-cpu 用于指定 Airflow 调度器的 CPU 数量。
  • --scheduler-memory 用于指定 Airflow 调度器的内存量。
  • --scheduler-storage 用于指定 Airflow 调度器的磁盘空间。

  • --triggerer-count 指定您环境中的 Airflow 触发器数量。此标志的默认值为 0。 如果您想在 DAG 中使用可延期运算符,则需要使用触发器。

    • 对于标准弹性环境,请使用介于 010 之间的值。
    • 对于高弹性环境,请使用 0 或介于 210 之间的值。

      默认情况下,触发器是使用默认的 0.5 vCPU 和 0.5 GB 内存分配创建的。使用 --triggerer-cpu--triggerer-memory 标志为触发器指定不同的资源分配:

      • --triggerer-cpu 以 vCPU 为单位指定 Airflow 触发器的 CPU 数量。允许使用的值有:0.50.751

      • --triggerer-memory 用于指定 Airflow 触发器的内存量。所需的最小内存等于为触发器分配的 CPU 数量。允许的最大值等于触发器 CPU 的数量乘以 6.5。

        例如,如果您将 --triggerer-cpu 标志设置为 1,则 --triggerer-memory 的最小值为 1,最大值为 6.5

  • --web-server-cpu 用于指定 Airflow Web 服务器的 CPU 数量。

  • --web-server-memory 用于指定 Airflow Web 服务器的内存量。

  • --web-server-storage 用于指定 Airflow 网络服务器的磁盘空间。

  • --worker-cpu 用于指定 Airflow 工作器的 CPU 数量。

  • --worker-memory 用于指定 Airflow 工作器的内存量。

  • --worker-storage 用于指定 Airflow 工作器的磁盘空间。

  • --min-workers 用于指定 Airflow 工作器数量下限。您的环境的集群至少运行此数量的工作器。

  • --max-workers 用于指定 Airflow 工作器数量上限。您的环境的集群最多运行此数量的工作器。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --environment-size ENVIRONMENT_SIZE \
    --scheduler-count SCHEDULER_COUNT \
    --scheduler-cpu SCHEDULER_CPU \
    --scheduler-memory SCHEDULER_MEMORY \
    --scheduler-storage SCHEDULER_STORAGE \
    --triggerer-count TRIGGERER_COUNT \
    --triggerer-cpu TRIGGERER_CPU \
    --triggerer-memory TRIGGERER_MEMORY \
    --web-server-cpu WEB_SERVER_CPU \
    --web-server-memory WEB_SERVER_MEMORY \
    --web-server-storage WEB_SERVER_STORAGE \
    --worker-cpu WORKER_CPU \
    --worker-memory WORKER_MEMORY \
    --worker-storage WORKER_STORAGE \
    --min-workers WORKERS_MIN \
    --max-workers WORKERS_MAX

您需要在其中:

  • ENVIRONMENT_SIZE 替换为 smallmediumlarge
  • SCHEDULER_COUNT 替换为调度器的数量。
  • SCHEDULER_CPU 替换为调度器的 CPU 数量(以 vCPU 为单位)。
  • SCHEDULER_MEMORY 替换为调度器的内存量。
  • SCHEDULER_STORAGE 替换为调度器的磁盘大小。
  • TRIGGERER_COUNT 替换为触发器的数量。
  • TRIGGERER_CPU 替换为触发器的 CPU 数量(以 vCPU 为单位)。
  • TRIGGERER_MEMORY 替换为触发器的内存量(以 GB 为单位)。
  • WEB_SERVER_CPU 替换为网络服务器的 CPU 数量(以 vCPU 为单位)。
  • WEB_SERVER_MEMORY 替换为网络服务器的内存量。
  • WEB_SERVER_STORAGE 替换为网络服务器的内存量。
  • WORKER_CPU 替换为工作器的 CPU 数量(以 vCPU 为单位)。
  • WORKER_MEMORY 替换为工作器的内存量。
  • WORKER_STORAGE 替换为工作器的磁盘大小。
  • WORKERS_MIN 替换为您的环境可运行的 Airflow 工作器数量的下限。您的环境中的工作器数量不能低于此数量,即使更少数量的工作器可以处理负载也是如此。
  • WORKERS_MAX 替换为您的环境可运行的 Airflow 工作器数量的上限。您的环境中的工作器数量不能超出此数量,即使需要更多数量的工作器来处理负载也是如此。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --environment-size small \
    --scheduler-count 1 \
    --scheduler-cpu 0.5 \
    --scheduler-memory 2.5GB \
    --scheduler-storage 2GB \
    --triggerer-count 1 \
    --triggerer-cpu 0.5 \
    --triggerer-memory 0.5GB \
    --web-server-cpu 1 \
    --web-server-memory 2.5GB \
    --web-server-storage 2GB \
    --worker-cpu 1 \
    --worker-memory 2GB \
    --worker-storage 2GB \
    --min-workers 2 \
    --max-workers 4

API

创建环境时,在环境 > EnvironmentConfig > WorkloadsConfig 资源中,指定环境规模和性能参数。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "workloadsConfig": {
      "scheduler": {
        "cpu": SCHEDULER_CPU,
        "memoryGb": SCHEDULER_MEMORY,
        "storageGb": SCHEDULER_STORAGE,
        "count": SCHEDULER_COUNT
      },
      "triggerer": {
        "count": TRIGGERER_COUNT,
        "cpu": TRIGGERER_CPU,
        "memoryGb": TRIGGERER_MEMORY
      },
      "webServer": {
        "cpu": WEB_SERVER_CPU,
        "memoryGb": WEB_SERVER_MEMORY,
        "storageGb": WEB_SERVER_STORAGE
      },
      "worker": {
        "cpu": WORKER_CPU,
        "memoryGb": WORKER_MEMORY,
        "storageGb": WORKER_STORAGE,
        "minCount": WORKERS_MIN,
        "maxCount": WORKERS_MAX
      }
    },
    "environmentSize": "ENVIRONMENT_SIZE"
  }
}

替换:

  • SCHEDULER_CPU 替换为调度器的 CPU 数量(以 vCPU 为单位)。
  • SCHEDULER_MEMORY 替换为调度器的内存量(以 GB 为单位)。
  • SCHEDULER_STORAGE 替换为调度器的磁盘大小(以 GB 为单位)。
  • SCHEDULER_COUNT 替换为调度器的数量。
  • TRIGGERER_COUNT 替换为触发器的数量。默认值为 0。 如果您想在 DAG 中使用可延期运算符,则需要使用触发器。

    • 对于标准弹性环境,请使用介于 010 之间的值。
    • 对于高弹性环境,请使用 0 或介于 210 之间的值。

      如果您至少使用一个触发器,则还必须指定 TRIGGERER_CPUTRIGGERER_MEMORY 参数:

      • TRIGGERER_CPU 用于配置触发器的 CPU 数量(以 vCPU 为单位)。允许使用的值有:0.50.751

      • TRIGGERER_MEMORY 用于配置触发器的内存量。所需的最小内存等于为触发器分配的 CPU 数量。允许的最大值等于触发器 CPU 的数量乘以 6.5。

        例如,如果您将 TRIGGERER_CPU 设置为 1,则 TRIGGERER_MEMORY 的最小值为 1,最大值为 6.5

  • WEB_SERVER_CPU 替换为网络服务器的 CPU 数量(以 vCPU 为单位)。

  • WEB_SERVER_MEMORY 替换为 Web 服务器的内存量(以 GB 为单位)。

  • WEB_SERVER_STORAGE 替换为 Web 服务器的磁盘大小(以 GB 为单位)。

  • WORKER_CPU 替换为工作器的 CPU 数量(以 vCPU 为单位)。

  • WORKER_MEMORY 替换为工作器的内存量(以 GB 为单位)。

  • WORKER_STORAGE 替换为工作器的磁盘大小(以 GB 为单位)。

  • WORKERS_MIN 替换为您的环境可运行的 Airflow 工作器数量的下限。您的环境中的工作器数量不能低于此数量,即使更少数量的工作器可以处理负载也是如此。

  • WORKERS_MAX 替换为您的环境可运行的 Airflow 工作器数量的上限。您的环境中的工作器数量不能超出此数量,即使需要更多数量的工作器来处理负载也是如此。

  • ENVIRONMENT_SIZE 替换为环境大小,ENVIRONMENT_SIZE_SMALLENVIRONMENT_SIZE_MEDIUMENVIRONMENT_SIZE_LARGE

示例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "workloadsConfig": {
      "scheduler": {
        "cpu": 2.5,
        "memoryGb": 2.5,
        "storageGb": 2,
        "count": 1
      },
      "triggerer": {
        "cpu": 0.5,
        "memoryGb": 0.5,
        "count": 1
      },
      "webServer": {
        "cpu": 1,
        "memoryGb": 2.5,
        "storageGb": 2
      },
      "worker": {
        "cpu": 1,
        "memoryGb": 2,
        "storageGb": 2,
        "minCount": 2,
        "maxCount": 4
      }
    },
    "environmentSize": "ENVIRONMENT_SIZE_SMALL"
  }
}

Terraform

创建环境时,您可以通过以下参数控制环境的规模和性能参数。

  • config 块中:

    • environment_size 字段用于控制环境大小。
  • workloads_config 块中:

    • scheduler.cpu 字段用于指定 Airflow 调度器的 CPU 数量。
    • scheduler.memory_gb 字段用于指定 Airflow 调度器的内存量。
    • scheduler.storage_gb 字段用于指定调度器的磁盘空间。
    • scheduler.count 字段指定环境中调度器的数量。
    • triggerer.cpu 字段指定 Airflow 触发器的 CPU 数量。
    • triggerer.memory_gb 字段指定 Airflow 触发器的内存容量。
    • triggerer.count 字段指定环境中的触发器数量。
    • web_server.cpu 字段用于指定 Airflow Web 服务器的 CPU 数量。
    • web_server.memory_gb 字段用于指定 Airflow Web 服务器的内存量。
    • web_server.storage_gb 字段指定 Airflow Web 服务器的磁盘空间大小。
    • worker.cpu 字段用于指定 Airflow 工作器的 CPU 数量。
    • worker.memory_gb 字段用于指定 Airflow 工作器的内存量。
    • worker.storage_gb 用于指定 Airflow 工作器的磁盘空间量。
    • worker.min_count 字段用于指定环境中的工作器数量下限。
    • worker.max_count 字段用于指定环境中的工作器数量上限。
resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    workloads_config {

      scheduler {
        cpu = SCHEDULER_CPU
        memory_gb = SCHEDULER_MEMORY
        storage_gb = SCHEDULER_STORAGE
        count = SCHEDULER_COUNT
      }
      triggerer {
        count = TRIGGERER_COUNT
        cpu = TRIGGERER_CPU
        memory_gb = TRIGGERER_MEMORY
      }
      web_server {
        cpu = WEB_SERVER_CPU
        memory_gb = WEB_SERVER_MEMORY
        storage_gb = WEB_SERVER_STORAGE
      }
      worker {
        cpu = WORKER_CPU
        memory_gb = WORKER_MEMORY
        storage_gb = WORKER_STORAGE
        min_count = WORKERS_MIN
        max_count = WORKERS_MAX
      }
    }

    environment_size = "ENVIRONMENT_SIZE"

  }
}

您需要在其中:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • SCHEDULER_CPU 替换为调度器的 CPU 数量(以 vCPU 为单位)。
  • SCHEDULER_MEMORY 替换为调度器的内存量(以 GB 为单位)。
  • SCHEDULER_STORAGE 替换为调度器的磁盘大小(以 GB 为单位)。
  • SCHEDULER_COUNT 替换为调度器的数量。
  • TRIGGERER_COUNT 替换为触发器的数量。
  • TRIGGERER_CPU 替换为触发器的 CPU 数量(以 vCPU 为单位)。
  • TRIGGERER_MEMORY 替换为触发器的内存量(以 GB 为单位)。
  • WEB_SERVER_CPU 替换为网络服务器的 CPU 数量(以 vCPU 为单位)。
  • WEB_SERVER_MEMORY 替换为 Web 服务器的内存量(以 GB 为单位)。
  • WEB_SERVER_STORAGE 替换为 Web 服务器的磁盘大小(以 GB 为单位)。
  • WORKER_CPU 替换为工作器的 CPU 数量(以 vCPU 为单位)。
  • WORKER_MEMORY 替换为工作器的内存量(以 GB 为单位)。
  • WORKER_STORAGE 替换为工作器的磁盘大小(以 GB 为单位)。
  • WORKERS_MIN 替换为您的环境可运行的 Airflow 工作器数量的下限。您的环境中的工作器数量不能低于此数量,即使更少数量的工作器可以处理负载也是如此。
  • WORKERS_MAX 替换为您的环境可运行的 Airflow 工作器数量的上限。您的环境中的工作器数量不能超出此数量,即使需要更多数量的工作器来处理负载也是如此。
  • ENVIRONMENT_SIZE 替换为环境大小,ENVIRONMENT_SIZE_SMALLENVIRONMENT_SIZE_MEDIUMENVIRONMENT_SIZE_LARGE

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    workloads_config {

      scheduler {
        cpu = 2.5
        memory_gb = 2.5
        storage_gb = 2
        count = 1
      }
      triggerer {
        count = 1
        cpu = 0.5
        memory_gb = 0.5
      }
      web_server {
        cpu = 1
        memory_gb = 2.5
        storage_gb = 2
      }
      worker {
        cpu = 1
        memory_gb = 2
        storage_gb = 2
        min_count = 2
        max_count = 4
      }
    }

    environment_size = "ENVIRONMENT_SIZE_SMALL"

  }
}

第 5 步:(可选)启用高弹性模式

高弹性 Cloud Composer 环境是 Cloud Composer 2 环境,这些环境使用内置冗余和故障切换机制,可降低环境发生可用区级故障和单点故障服务中断的风险。

高弹性环境在所选区域的至少两个可用区中运行。有两个 Airflow 调度器、两个 Web 服务器和至少两个触发器(如果触发器数量未设置为 0)在不同的可用区中运行。工作器数量下限设置为 2,并且您环境的集群会在可用区之间分布工作器实例。如果发生可用区级服务中断,则受影响的工作器实例会被重新安排到其他可用区。高弹性环境的 Cloud SQL 数据库是一个具有主实例和备用实例的区域级实例。

控制台

创建环境页面中执行以下操作:

  1. 弹性模式部分中,选择高弹性

  2. 环境资源部分中,为高弹性环境选择扩缩参数。高弹性环境只需要两个调度器(0 个或 2 到 10 个触发器),以及至少两个工作器:

    1. 点击 Custom(自定义)。

    2. Number of schedulers(调度器数量)下拉列表中,选择 2

    3. 触发器数量下拉列表中,选择 0 或介于 210 之间的值。为触发器配置 CPU内存分配。

    4. 工作器数量下限下拉列表中,选择 2 或更多,具体取决于所需的工作器数量。

  3. 网络配置部分:

    1. 网络类型中,选择专用 IP 环境

    2. 如果需要,请指定其他网络参数

gcloud

创建环境时,--enable-high-resilience 参数会启用高弹性模式。

设置以下参数:

  • --enable-high-resilience
  • --enable-private-environment,以及专用 IP 环境的其他网络参数(如果需要)
  • --scheduler-count2
  • --triggerer-count0 或介于 210 之间的数字

如果您使用触发器,则还需要使用 --triggerer-cpu--triggerer-memory 标志来创建环境:

- `--triggerer-cpu` specifies the number of CPUs for an Airflow triggerer.
Allowed values: `0.5`, `0.75`, `1`.

- `--triggerer-memory` specifies the amount of memory for an Airflow
triggerer. The minimum required memory is equal to the number of
CPUs allocated for the triggerers. The maximum allowed value is
equal to the number of triggerer CPUs multiplied by 6.5.

For example, if you set the `--triggerer-cpu` flag to `1`, the
**minimum value** for `--triggerer-memory` is `1` and the
**maximum value** is `6.5`.
  • --min-workers2 或更高
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --enable-high-resilience \
    --enable-private-environment \
    --scheduler-count 2 \
    --triggerer-count 2 \
    --triggerer-cpu 0.5 \
    --triggerer-memory 0.5 \
    --min-workers 2

API

创建环境时,请在环境 > EnvironmentConfig 资源中启用高弹性模式。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "resilience_mode": "HIGH_RESILIENCE"
  }
}

示例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "resilience_mode": "HIGH_RESILIENCE"
  }
}

Terraform

创建环境时,config 代码块中的 resilience_mode 字段会启用高弹性模式。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    resilience_mode = "HIGH_RESILIENCE"

  }
}

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    resilience_mode = "HIGH_RESILIENCE"

}

第 6 步:(可选)为环境的数据库指定可用区

您可以在创建标准弹性环境时指定首选 Cloud SQL 区域。

控制台

创建环境页面中执行以下操作:

  1. 高级配置部分中,展开显示高级配置项。

  2. Airflow 数据库可用区列表中,选择首选 Cloud SQL 可用区。

gcloud

创建环境时,--cloud-sql-preferred-zone 参数会指定首选 Cloud SQL 区域。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --cloud-sql-preferred-zone SQL_ZONE

替换以下内容:

  • SQL_ZONE:首选 Cloud SQL 可用区。此区域必须位于环境所在的区域中。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --cloud-sql-preferred-zone us-central1-a

API

创建环境时,请在环境 > DatabaseConfig 资源中指定首选的 Cloud SQL 可用区。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "databaseConfig": {
      "zone": "SQL_ZONE"
    }
  }
}

替换以下内容:

  • SQL_ZONE:首选 Cloud SQL 可用区。此区域必须位于环境所在的区域中。

示例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "databaseConfig": {
      "zone": "us-central1-a"
    }
  }
}

Terraform

创建环境时,database_config 块中的 zone 字段会指定首选 Cloud SQL 可用区。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    database_config {
      zone = "SQL_ZONE"
    }
  }
}

替换以下内容:

  • SQL_ZONE:首选 Cloud SQL 可用区。此区域必须位于环境所在的区域中。

第 7 步:(可选)配置环境的网络

网络参数取决于您要创建的环境类型:

  • 公共 IP 环境。使用默认网络参数。

  • 专用 IP 环境(使用 PSC)。在此配置中,您的环境使用 Private Service Connect 进行连接。

    配置专用 IP 环境:

    1. 为专用 IP 环境配置项目的网络
    2. 在创建环境时配置 Private Service Connect
    3. 为您的专用 IP 环境指定其他参数,如本部分中所述。

    对于具有 PSC 的专用 IP 环境,您需要了解:

    • 您的 VPC 网络 ID
    • 您的 VPC 子网 ID
    • VPC 子网中的两个次要 IP 范围:

      • pod 的次要 IP 范围
      • Service 的次要 IP 范围
    • 环境组件的 IP 范围:

      • GKE 控制平面 IP 地址范围。GKE 控制平面的 IP 范围。
      • Cloud Composer 连接子网。Cloud Composer 连接子网的 IP 地址范围。
  • 专用 IP 环境(VPC 对等互连)。在此配置中,您的环境使用 VPC 对等互连进行连接。

    配置专用 IP 环境:

    1. 为专用 IP 环境配置项目的网络
    2. 为您的专用 IP 环境指定其他参数,如本部分所述。

    对于具有 VPC 对等互连的专用 IP 环境,您需要了解:

    • 您的 VPC 网络 ID
    • 您的 VPC 子网 ID
    • VPC 子网中的两个次要 IP 范围:

      • pod 的次要 IP 范围
      • Service 的次要 IP 范围
    • 环境组件的 IP 范围:

      • GKE 控制平面的 IP 地址范围。

      • VPC 对等互连的 IP 地址范围,用于从内部 Cloud Composer 网络导出到所选网络。Cloud Composer 基础架构组件使用此范围内的 IP 地址。

      • Cloud SQL 实例的 IP 范围。

  • 对于共享 VPC 环境,您必须为宿主项目进行额外的网络设置,然后在服务项目中创建公共或专用 IP 环境。按照配置共享 VPC 页面上的说明进行操作。

    对于共享 VPC 环境,您需要了解以下内容:

    • 您的宿主项目 VPC 网络 ID
    • 您的宿主项目 VPC 子网 ID
    • 宿主项目 VPC 子网中的两个次要 IP 范围:

      • pod 的次要 IP 范围
      • Service 的次要 IP 范围

    创建公共 IP 共享 VPC 环境时,您仍然需要为 pod 和服务指定宿主项目 VPC 网络、子网和次要 IP 地址范围。

  • 如需创建 VPC SC 环境,您必须创建服务边界,然后在此边界内创建专用 IP 环境。按照配置 VPC Service Controls 中的说明操作。

  • 环境的其他网络选项包括:

控制台

要创建专用 IP 环境,请执行以下操作:

  1. 确保针对您要创建的环境类型配置了网络。

  2. 网络配置部分中,展开显示网络配置项。

  3. 网络下拉列表中,选择您的 VPC 网络 ID。

  4. 子网下拉列表中,选择您的 VPC 子网 ID。

  5. pod 的次要 IP 范围部分中,选择或指定 pod 的次要 IP 范围。您可以使用 VPC 网络中的现有次要范围,也可以选择使用自动创建的范围。

  6. 服务的次要 IP 范围部分中,选择或指定服务的次要 IP 范围。您可以使用 VPC 网络中现有的次要范围,也可以选择使用自动创建的范围。

  7. 网络类型部分中,选择专用 IP 环境选项以创建专用 IP 环境。

  8. Composer 连接部分中,选择环境的网络类型,并为环境组件指定 IP 地址范围:

    对于使用 Private Service Connect 的环境:

    1. 为使用 Private Service Connect 的环境选择 Private Service Connect

    2. Composer 连接子网部分,指定 Cloud Composer 连接子网的 IP 地址范围。系统会从此范围中选择 PSC 端点的地址。您可以指定自定义范围,也可以选择使用默认范围。

    对于使用 VPC 对等互连的环境:

    1. 为使用 VPC 对等互连的环境选择 VPC 对等互连

    2. Composer 租户网络的 IP 范围部分中,指定 Cloud Composer 租户网络的 IP 范围。此网络托管您的环境的 SQL 代理组件。您可以指定自定义范围,也可以选择使用默认范围。

    3. Cloud SQL 网络的 IP 范围部分中,指定 Cloud SQL 实例的 IP 范围。您可以指定自定义范围,也可以选择使用默认范围。

  9. GKE 控制平面网络的 IP 范围部分中,指定 GKE 控制平面的 IP 范围:

    • 如需对环境所在的区域使用默认 IP 范围,请选择默认 IP 范围

    • 如需指定自定义 IP 范围,请选择自定义 IP 范围,并在 GKE 集群主服务器专用 IP 字段中输入采用 CIDR 表示法的范围。

  10. 选择 GKE 控制平面的访问权限级别。控制平面有两个端点。一个端点是专用端点,供集群节点和虚拟机使用。另一个端点是公共端点。您可以为公共端点指定访问权限级别:

    • 如需允许从授权网络访问公共端点,请选中使用集群控制平面端点的外部 IP 地址访问该端点复选框。

      使用此选项将控制平面的访问权限级别设置为“启用公共端点访问权限并启用已获授权的网络”。这提供了从已获授权的网络对控制平面的受限访问。默认情况下,未指定来源 IP 地址。您可以将已获授权的网络添加到集群

    • 如需禁止通过已获授权的网络访问公共端点,请清除使用集群控制平面端点的外部 IP 地址访问该端点复选框。

      使用此选项将控制平面的访问权限级别设置为“公共端点访问权限已停用”。这样可以阻止对控制平面的所有互联网访问。

gcloud

确保已针对您要创建的环境类型配置网络。

创建环境时,以下参数可控制网络参数。如果您省略参数,则系统会使用默认值。

  • --enable-private-environment 用于启用专用 IP 环境。

  • --network 用于指定您的 VPC 网络 ID。

  • --subnetwork 用于指定您的 VPC 子网 ID。

  • --cluster-secondary-range-name--cluster-ipv4-cidr 用于配置 pod 的次要范围。

  • --services-secondary-range-name--services-ipv4-cidr 用于配置服务的次要范围。

  • --master-ipv4-cidr 用于指定 GKE 控制平面的范围。

  • (具有 PSC 的环境)--connection-subnetwork 指定用于托管 PSC 端点的 Cloud Composer 连接子网的范围。

  • (具有 VPC 对等互连的环境)--composer-network-ipv4-cidr 用于指定 Cloud Composer 租户网络的范围。此网络托管您环境的 SQL 代理组件

  • (具有 VPC 对等互连的环境)--cloud-sql-ipv4-cidr 指定 Cloud SQL 实例的范围。

  • --enable-private-endpoint 用于控制 GKE 控制平面的访问权限级别。控制平面有两个端点。一个端点是专用的,供集群节点和虚拟机使用。 另一个端点是公共端点。您可以为公共端点指定访问权限级别:

  • --enable-ip-masq-agent 启用 IP 伪装代理

gcloud composer environments create ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version composer-2.6.6-airflow-2.6.3 \
  --enable-private-environment \
  --network NETWORK_ID \
  --subnetwork SUBNETWORK_ID \
  --cluster-ipv4-cidr PODS_RANGE \
  --services-ipv4-cidr SERVICES_RANGE \
  --master-ipv4-cidr CONTROL_PLANE_RANGE \
  --connection-subnetwork COMPOSER_PSC_RANGE \

您需要在其中:

  • NETWORK_ID 替换为您的 VPC 网络 ID。
  • SUBNETWORK_ID 替换为您的 VPC 子网 ID。
  • PODS_RANGE 替换为 pod 的次要范围。
  • SERVICES_RANGE 替换为服务的次要范围。
  • CONTROL_PLANE_RANGE 替换为 GKE 控制平面的次要范围。

  • COMPOSER_PSC_RANGE 替换为 Cloud Composer 连接子网的范围。

第 8 步:(可选)添加网络标记

网络标记会应用于环境集群中的所有节点虚拟机。标记用于标识网络防火墙的有效来源或目标。列表中的每个标记都必须符合 RFC 1035 格式。

例如,如果您计划使用防火墙规则限制专用 IP 环境的流量,则可能需要添加网络标记。

控制台

创建环境页面中执行以下操作:

  1. 找到网络配置部分。
  2. 网络标记字段中,为您的环境输入网络标记。

gcloud

创建环境时,以下参数可控制网络标记:

  • --tags 指定应用于所有节点虚拟机的网络标记列表(以英文逗号分隔)。
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --tags TAGS

您需要在其中:

  • TAGS 替换为以英文逗号分隔的网络标记列表。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --tags group1,production

API

创建环境时,请在环境 > EnvironmentConfig 资源中为您的环境指定网络标记。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "nodeConfig": {
      "tags": [
        "TAG"
      ]
    }
  }
}

您需要在其中:

  • TAG 替换为网络标记。

示例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "nodeConfig": {
      "tags": [
        "group1",
        "production"
      ]
    }
  }
}

Terraform

创建环境时,以下字段会定义环境的网络标记:

  • node_config 块中的 tags 字段指定应用于所有节点虚拟机的网络标记列表(以英文逗号分隔)。
resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      tags = ["TAGS"]
    }
  }
}

您需要在其中:

  • TAGS 替换为以英文逗号分隔的网络标记列表。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    node_config {
      tags = ["group1","production"]
    }
  }
}

第 9 步:(可选)配置网络服务器网络访问权限

Airflow 网络服务器访问参数不取决于您的环境类型。您可以改为单独配置网络服务器访问权限。例如,专用 IP 环境仍然可以通过互联网访问 Airflow 界面。

目前,您无法使用专用 IP 地址配置允许的 IP 范围。

控制台

创建环境页面中执行以下操作:

  1. 网络配置部分中,展开显示网络配置项。

  2. 网络服务器网络访问权限控制部分:

    • 如需允许从所有 IP 地址访问 Airflow Web 服务器,请选择允许从所有 IP 地址访问

    • 如需只允许来自特定 IP 地址范围的访问,请选择仅允许来自特定 IP 地址的访问。在 IP 范围字段中,以 CIDR 表示法指定 IP 范围。在说明字段中,指定此范围的可选说明。如果您想指定多个范围,请点击添加 IP 范围

    • 如需禁止从所有 IP 地址访问,请选择仅允许从特定 IP 地址访问,然后点击空范围条目旁边的删除项

gcloud

创建环境时,以下参数可控制网络服务器访问权限级别:

  • --web-server-allow-all 支持从所有 IP 地址访问 Airflow。这是默认选项。

  • --web-server-allow-ip 仅允许来自特定来源 IP 地址范围的访问。如需指定多个 IP 范围,请多次使用此参数。

  • --web-server-deny-all 禁止从所有 IP 地址访问。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

您需要在其中:

  • WS_IP_RANGE 替换为可以访问 Airflow 界面的 IP 地址范围(采用 CIDR 表示法)。
  • WS_RANGE_DESCRIPTION 替换为 IP 地址范围的说明。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --web-server-allow-ip ip_range=192.0.2.0/24,description="office net 1" \
    --web-server-allow-ip ip_range=192.0.4.0/24,description="office net 3"

API

创建环境时,在环境 > EnvironmentConfig 资源中,指定网络服务器访问参数。

  • 如需提供从所有 IP 地址访问 Airflow Web 服务器的权限,请省略 webServerNetworkAccessControl

  • 如需只允许从特定 IP 地址范围访问,请在 allowedIpRanges 中指定一个或多个范围。

  • 如需禁止从所有 IP 地址访问,请添加 allowedIpRanges 列表并将其留空。请勿在其中指定 IP 范围。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

您需要在其中:

  • WS_IP_RANGE 替换为可以访问 Airflow 界面的 IP 地址范围(采用 CIDR 表示法)。
  • WS_RANGE_DESCRIPTION 替换为 IP 地址范围的说明。

示例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    }
  }
}

Terraform

创建环境时,web_server_network_access_control 块中的 allowed_ip_range 块包含可以访问网络服务器的 IP 地址范围。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }

    }

  }
}

您需要在其中:

  • WS_IP_RANGE 替换为可以访问 Airflow 界面的 IP 地址范围(采用 CIDR 表示法)。
  • WS_RANGE_DESCRIPTION 替换为 IP 地址范围的说明。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "office net 1"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "office net 3"
      }

    }
}

第 10 步:(可选)指定 Airflow 配置替换和环境变量

您可以在创建环境时设置 Airflow 配置替换环境变量。或者,您可以在创建环境后执行此操作。

某些 Airflow 配置选项被屏蔽,您无法替换这些选项。

如需查看可用的 Airflow 配置选项列表,请参阅 Airflow 2 的配置参考Airflow 1.10.*

如需指定 Airflow 配置替换和环境变量,请执行以下操作:

控制台

创建环境页面中执行以下操作:

  1. 环境变量部分中,点击添加环境变量

  2. 输入环境变量的名称

  3. Airflow 配置替换部分中,点击添加 Airflow 配置替换

  4. 输入配置选项替换值的部分

    例如:

    webserver dag_orientation TB

gcloud

创建环境时,以下参数可用于控制环境变量和 Airflow 配置替换:

  • --env-variables 用于指定环境变量的英文逗号分隔列表。

    变量名称可以包含大写和小写字母、数字和下划线,但不能以数字开头。

  • --airflow-configs 用于指定 Airflow 配置替换的键和值的逗号分隔列表。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --env-variables ENV_VARS \
    --airflow-configs CONFIG_OVERRIDES

您需要在其中:

  • ENV_VARS 替换为环境变量以逗号分隔的 NAME=VALUE 对列表。
  • CONFIG_OVERRIDES 替换为配置替换以逗号分隔的 SECTION-KEY=VALUE 对列表。用 - 符号分隔配置部分的名称,后跟键名称。例如:core-dags_are_paused_at_creation

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --env-variables SENDGRID_MAIL_FROM=user@example.com,SENDGRID_API_KEY=example-key \
    --airflow-configs core-dags_are_paused_at_creation=True,webserver-dag_orientation=TB

API

创建环境时,请在环境 > EnvironmentConfig 资源中,指定环境变量和 Airflow 配置替换。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "softwareConfig": {
      "airflowConfigOverrides": {
        "SECTION-KEY": "OVERRIDE_VALUE"
      },
      "envVariables": {
        "VAR_NAME": "VAR_VALUE",
      }
    }
  }
}

替换:

  • SECTION 替换为 Airflow 配置选项所在配置文件中的部分。
  • KEY 替换为 Airflow 配置选项的名称。
  • OVERRIDE_VALUE 替换为 Airflow 配置选项的值。
  • VAR_NAME 替换为环境变量的名称。
  • VAR_VALUE 替换为环境变量的值。

示例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "softwareConfig": {
      "airflowConfigOverrides": {
        "core-dags_are_paused_at_creation": "True",
        "webserver-dag_orientation": "TB"
      },
      "envVariables": {
        "SENDGRID_MAIL_FROM": "user@example.com",
        "SENDGRID_API_KEY": "example-key"
      }
    }
  }
}

Terraform

创建环境时,以下块可用于控制环境变量和 Airflow 配置替换:

  • software_config 块中的 env_variables 块可用于指定环境变量。

    变量名称可以包含大写和小写字母、数字和下划线,但不能以数字开头。

  • software_config 块中的 airflow_config_overrides 块指定 Airflow 配置替换。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    software_config {

      airflow_config_overrides = {
        SECTION-KEY = "OVERRIDE_VALUE"
      }

      env_variables = {
        VAR_NAME = "VAR_VALUE"
      }
    }
  }
}

您需要在其中:

  • SECTION 替换为 Airflow 配置选项所在配置文件中的部分。
  • KEY 替换为 Airflow 配置选项的名称。
  • OVERRIDE_VALUE 替换为 Airflow 配置选项的值。
  • VAR_NAME 替换为环境变量的名称。
  • VAR_VALUE 替换为环境变量的值。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    software_config {

      airflow_config_overrides = {
        core-dags_are_paused_at_creation = "True"
        webserver-dag_orientation = "TB"
      }

      env_variables = {
        SENDGRID_MAIL_FROM = "user@example.com"
        SENDGRID_API_KEY = "example-key"
      }
    }
  }
}

步骤 11.(可选)指定维护窗口

默认情况下,维护期在每周的星期五、星期六和星期日的 00:00:00 到 04:00:00 (GMT) 之间。

如需为您的环境定义维护窗口,请执行以下操作:

控制台

创建环境页面中执行以下操作:

  1. 时区下拉列表中,选择维护窗口的时区。

  2. 设置开始时间天数长度,以便指定 7 天的滚动期内,时间表的总时间至少 12 小时。例如,每个星期一、星期三和星期五的 4 小时提供了所需的时间。

gcloud

以下参数定义了维护窗口参数:

  • --maintenance-window-start 设置自定义维护窗口的开始时间。
  • --maintenance-window-end 设置维护窗口的结束时间。
  • --maintenance-window-recurrence 设置维护窗口重复
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --maintenance-window-start 'DATETIME_START' \
    --maintenance-window-end 'DATETIME_END' \
    --maintenance-window-recurrence 'MAINTENANCE_RECURRENCE'

您需要在其中:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • DATETIME_START 替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。
  • DATETIME_END 替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。
  • MAINTENANCE_RECURRENCE 替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:

  • FREQ=DAILY 格式指定每日重复。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式指定在一周中的选定几天重复。

以下示例将维护窗口指定为星期三、星期六和星期日的 01:00 到 07:00 (UTC)。系统会忽略 2023 年 1 月 1 日这一日期。

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.6.6-airflow-2.6.3 \
  --maintenance-window-start '2023-01-01T01:00:00Z' \
  --maintenance-window-end '2023-01-01T07:00:00Z' \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SU,WE,SA'

API

创建环境时,请在环境 > EnvironmentConfig 资源中指定维护窗口参数:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "maintenanceWindow": {
        "startTime": "DATETIME_START",
        "endTime": "DATETIME_END",
        "recurrence": "MAINTENANCE_RECURRENCE"
    }
  }
}

您需要在其中:

  • DATETIME_START 替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。
  • DATETIME_END 替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。
  • MAINTENANCE_RECURRENCE 替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:

  • FREQ=DAILY 格式指定每日重复。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式指定在一周中的选定几天重复。

以下示例将维护窗口指定为星期三、星期六和星期日的 01:00 到 07:00 (UTC)。系统会忽略 2023 年 1 月 1 日这一日期。

示例:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "maintenanceWindow": {
        "startTime": "2023-01-01T01:00:00Z",
        "endTime": "2023-01-01T07:00:00Z",
        "recurrence": "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    }
  }
}

Terraform

maintenance_window 块为您的环境指定维护窗口:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    maintenance_window {
      start_time = "DATETIME_START"
      end_time = "DATETIME_END"
      recurrence = "MAINTENANCE_RECURRENCE"
    }
  }
}

您需要在其中:

  • DATETIME_START 替换为采用日期/时间输入格式的开始日期和时间。只有一天中所指定的时间,指定的日期会被忽略。
  • DATETIME_END 替换为采用日期/时间输入格式的结束日期和时间。只有一天中所指定的时间,指定的日期会被忽略。指定的日期和时间必须晚于开始日期。
  • MAINTENANCE_RECURRENCE 替换为用于恢复维护窗口的 RFC 5545 RRULE。Cloud Composer 支持两种格式:

    • FREQ=DAILY 格式指定每日重复。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式指定在一周中的选定几天重复。

以下示例将维护窗口指定为星期三、星期六和星期日的 01:00 到 07:00 (UTC)。系统会忽略 2023 年 1 月 1 日这一日期。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    maintenance_window {
      start_time = "2023-01-01T01:00:00Z"
      end_time = "2023-01-01T07:00:00Z"
      recurrence = "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    }
  }
}

步骤 12.(可选)数据沿袭集成

数据沿袭是 Dataplex 的一项功能,可让您跟踪数据移动。数据沿袭集成适用于 Cloud Composer 2 2.1.2 及更高版本以及 Airflow 2.2.5 及更高版本。

如果满足以下条件,系统会在新的 Cloud Composer 环境中自动启用数据沿袭集成:

  • 您的项目已启用 Data Lineage API。如需了解详情,请参阅 Dataplex 文档中的启用 Data Lineage API

  • 未在 Airflow 中配置自定义沿袭后端

  • 此环境中未启用客户管理的加密密钥 (CMEK)。数据沿袭不支持对提取的元数据使用 CMEK。 在使用 CMEK 的 Cloud Composer 环境中,您无法启用数据沿袭集成。如需了解详情和其他限制,请参阅数据沿袭注意事项

您可以在创建环境时停用数据沿袭集成。例如,如果您希望在创建环境后替换自动行为或选择稍后启用数据沿袭

控制台

如需停用数据沿袭集成,请在创建环境页面上执行以下操作:

  1. 高级配置部分中,展开显示高级配置项。

  2. Dataplex 数据沿袭集成部分中,选择停用与 Dataplex 数据沿袭的集成

gcloud

创建环境时,--disable-cloud-data-lineage-integration 参数会停用数据沿袭集成。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --disable-cloud-data-lineage-integration

您需要在其中:

  • ENVIRONMENT_NAME 替换为环境的名称。

    该名称必须以小写字母开头,后面最多可跟 62 个小写字母、数字或连字符,但不能以连字符结尾。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储桶名称。如需查看限制列表,请参阅存储桶命名准则

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --disable-cloud-data-lineage-integration

第 13 步:(可选)配置数据加密 (CMEK)

默认情况下,环境中的数据使用 Google 提供的密钥进行加密。

如需使用客户管理的加密密钥 (CMEK) 来加密您环境中的数据,请按照使用客户管理的加密密钥中的说明操作。

第 14 步:(可选)使用自定义环境的存储桶

当您创建环境时,Cloud Composer 会自动为您的环境创建一个存储桶。

作为替代方案,您可以从项目中指定自定义 Cloud Storage 存储桶。您的环境使用此存储桶的方式与自动创建的存储桶相同。

如需使用自定义环境存储桶,请按照使用自定义环境的存储桶中概述的说明操作。

第 15 步:(可选)指定环境标签

您可以为环境分配标签,以根据标签细分结算费用。

控制台

创建环境页面的标签部分中,执行以下操作:

  1. 点击添加标签

  2. 字段中,指定环境标签的键值对。

gcloud

当您创建环境时,--labels 参数会指定键和值的逗号分隔列表以及环境标签。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --labels LABELS

替换:

  • LABELS 替换为环境标签的 KEY=VALUE 对列表。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.6.6-airflow-2.6.3 \
    --labels owner=engineering-team,env=production

API

创建环境时,在环境资源中指定环境的标签。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "labels": {
    "LABEL_KEY": "LABEL_VALUE"
  }
}

替换:

  • LABEL_KEY 替换为环境标签的键。
  • LABEL_VALUE 替换为环境标签的值。

示例:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "labels": {
    "owner": "engineering-team",
    "env": "production"
  }
}

Terraform

创建环境时,请在 labels 块(在 config 块外部)中指定标签。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  labels = {
    LABEL_KEY = "LABEL_VALUE"
  }

}

替换:

  • LABEL_KEY 替换为环境标签的键。
  • LABEL_VALUE 替换为环境标签的值。

示例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  labels = {
    owner = "engineering-team"
    env = "production"
  }

}

后续步骤