创建环境

Cloud Composer 1 | Cloud Composer 2

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

Cloud Composer 环境是部署到代管式 Google Kubernetes Engine 集群的自包含 Apache Airflow 安装。如需详细了解环境,请参阅环境架构

您可以在单个 Google Cloud 项目中创建一个或多个环境。

准备工作

  • 在创建环境期间,您需要指定一个服务帐号。您的环境集群中的节点将作为此帐号运行。

    默认情况下,Cloud Composer 环境使用 Google 管理的默认 Compute Engine 服务帐号。我们建议您创建一个具有 Cloud Composer 特定角色的用户管理服务帐号,并将其用于您的环境。

  • 如果您使用 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 的默认 Cloud Composer 映像

控制台

  1. 在 Google Cloud Console 中,转到 Cloud Composer 1 的创建环境页面。

    转到“创建环境”

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

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

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

    该位置是环境的 GKE 集群所在的 Compute Engine 区域

  4. 继续执行下一步,或点击创建以创建环境。

gcloud

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。

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

  • LOCATION 替换为环境的区域。

    该位置是环境的 GKE 集群所在的 Compute Engine 区域

例如:

gcloud composer environments create example-environment \
    --location us-central1

API

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME"
}

替换:

  • PROJECT_ID 替换为项目 ID

  • LOCATION 替换为环境的区域。

    该位置是环境的 GKE 集群所在的 Compute Engine 区域

  • ENVIRONMENT_NAME 替换为环境名称。

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

例如:

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

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment"

}

Terraform

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

resource "google_composer_environment" "example" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"
}

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。

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

  • LOCATION 替换为环境的区域。

    该位置是环境的 GKE 集群所在的 Compute Engine 区域

例如:

resource "google_composer_environment" "example" {
  name = "example-environment"
  region = "us-central1"
}

第 2 步:(可选)选择 Cloud Composer 和 Airflow 版本

如需创建使用特定版本的 Cloud Composer 和 Airflow 的环境,请执行以下操作:

控制台

创建环境页面的节点配置部分的映像版本下拉列表中,选择一个使用所需 Airflow 版本的 Cloud Composer 映像

gcloud

  1. 选择具有所需 Airflow 版本的 Cloud Composer 映像

  2. 创建环境时,请使用 --image-version 参数。

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

    替换:

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

    例如:

    gcloud composer environments create example-environment \
        --location us-central1 \
        --image-version "composer-1.16.5-airflow-1.10.15"
    

API

  1. 选择具有所需 Airflow 版本的 Cloud Composer 映像

  2. 当您创建环境时,请在环境 > EnvironmentConfig > SoftwareConfig 资源中使用 imageVersion 字段。

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

替换:

  • 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-1.16.5-airflow-1.10.15"
    }
  }
}

Terraform

  1. 选择具有所需 Airflow 版本的 Cloud Composer 映像

  2. 创建环境时,请使用 software_config 代码块中的 image_version 字段。

resource "google_composer_environment" "example" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

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

替换:

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

例如:

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

  config {
    software_config {
      image_version = "composer-1.16.5-airflow-1.10.15"
    }
  }
}

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

环境集群中的节点以此服务帐号身份运行。

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

(而非单个用户)使用的特殊帐号。

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

控制台

创建环境页面的节点配置部分的服务帐号下拉列表中,为您的环境选择服务帐号。

gcloud

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --service-account "SERVICE_ACCOUNT"

替换:

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

例如:

gcloud composer environments create example-environment \
    --location us-central1 \
    --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" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

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

替换:

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

例如:

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

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

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

如需为您的环境指定规模和性能配置,请提供环境的 GKE 集群中的节点数量,并为环境组件选择机器类型。

控制台

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

  1. 节点配置部分中:

    • 输入节点数

      节点计数是环境的 GKE 集群中的 Google Kubernetes Engine 节点数量。默认情况下,环境具有 3 个节点。

      您可以在创建环境后更改此值。

    • 为节点选择机器类型

      节点的机器类型是集群实例使用的 Compute Engine 机器类型。此参数确定您的环境的 CPU 数和内存量。默认机器类型为 n1-standard-1

      如需在创建环境后更改此值,您必须手动重新配置环境集群

    • 输入磁盘大小

      环境节点的磁盘大小(以 GB 为单位)。您环境中的每个节点都具有此数量的磁盘空间。如果您希望将大量数据存储在与环境虚拟机同步的文件夹中,请选择较大的磁盘大小。例如,在环境存储桶的 /data 文件夹中。

      最小为 20 GB。默认为 100 GB。 创建环境后,您无法更改此参数。

    • 选择调度器数量

      您的环境可以同时运行多个 Airflow 调度器。使用多个调度器在多个调度器实例之间分配负载,以实现更好的性能和可靠性。您可以指定调度器数量,不超过您环境中的节点数。

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

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

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

  2. 展开网络、Airflow 配置替换及其他功能项。

  3. Cloud SQL 配置部分中,选择 Cloud SQL 机器类型

    此参数确定运行 Airflow 数据库的 Cloud SQL 实例的机器类型。默认 Cloud SQL 机器类型为 db-n1-standard-2

  4. 网络服务器配置部分中,选择网络服务器机器类型

    此参数确定运行 Airflow 网络服务器的 Compute Engine 实例的机器类型。

    默认网络服务器机器类型为 composer-n1-webserver-2

gcloud

创建环境时,以下参数可用于控制环境规模和性能参数:

  • --node-count 可用于指定环境中的节点数量。

    节点计数是环境的 GKE 集群中的 Google Kubernetes Engine 节点数量。默认情况下,环境具有 3 个节点。

    您可以在创建环境后更改此值。

  • --scheduler-count 指定您环境中的调度器数量。

    您的环境可以同时运行多个 Airflow 调度器。使用多个调度器在多个调度器实例之间分配负载,以实现更好的性能和可靠性。您可以指定调度器数量,不超过您环境中的节点数。

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

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

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

  • --disk-size 用于指定环境虚拟机的磁盘大小。

    环境节点的磁盘大小(以 GB 为单位)。您环境中的每个节点都具有此数量的磁盘空间。如果您希望将大量数据存储在与环境虚拟机同步的文件夹中,请选择较大的磁盘大小。例如,在环境存储桶的 /data 文件夹中。

    最小为 20 GB。默认为 100 GB。 创建环境后,您无法更改此参数。

  • --machine-type 指定节点虚拟机的机器类型。

    节点的机器类型是集群实例使用的 Compute Engine 机器类型。此参数确定您的环境的 CPU 数和内存量。默认机器类型为 n1-standard-1

    如需在创建环境后更改此值,您必须手动重新配置环境集群

  • --cloud-sql-machine-type 指定 Cloud SQL 实例的机器类型。

    此参数确定运行 Airflow 数据库的 Cloud SQL 实例的机器类型。默认 Cloud SQL 机器类型为 db-n1-standard-2

  • --web-server-machine-type 指定 Airflow 网络服务器实例的机器类型。

    此参数确定运行 Airflow 网络服务器的 Compute Engine 实例的机器类型。

    默认网络服务器机器类型为 composer-n1-webserver-2

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --node-count NODE_COUNT \
    --scheduler-count SCHEDULER_COUNT \
    --disk-size DISK_SIZE \
    --machine-type NODE_MACHINE_TYPE \
    --cloud-sql-machine-type SQL_MACHINE_TYPE \
    --web-server-machine-type WS_MACHINE_TYPE

替换:

例如:

gcloud composer environments create example-environment \
    --location us-central1 \
    --node-count 6 \
    --scheduler-count 1 \
    --disk-size 50 \
    --machine-type n1-standard-2 \
    --cloud-sql-machine-type db-n1-standard-2 \
    --web-server-machine-type composer-n1-webserver-2

API

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "nodeCount": NODE_COUNT,
    "nodeConfig": {
      "machineType": "NODE_MACHINE_TYPE",
      "diskSizeGb": DISK_SIZE
    },
    "softwareConfig": {
      "schedulerCount": SCHEDULER_COUNT
    },
    "databaseConfig": {
      "machineType": "SQL_MACHINE_TYPE"
    },
    "webServerConfig": {
      "machineType": "WS_MACHINE_TYPE"
    }
  }
}

替换:

  • NODE_COUNT 替换为节点数。
  • DISK_SIZE 替换为环境虚拟机的磁盘大小(以 GB 为单位)。
  • NODE_MACHINE_TYPE 替换为节点虚拟机的机器类型。此值必须包含环境虚拟机的 Compute Engine 可用区
  • SCHEDULER_COUNT 替换为调度器的数量。
  • SQL_MACHINE_TYPE 替换为 Cloud SQL 实例的机器类型。
  • WS_MACHINE_TYPE 替换为 Airflow 网络服务器实例的机器类型。

例如:


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

// With preview features (multiple schedulers):
// POST https://composer.googleapis.com/v1beta1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "nodeCount": 6,
    "nodeConfig": {
      "machineType": "projects/example-project/zones/us-central1-a/machineTypes/n1-standard-2",
      "diskSizeGb": 50
    },
    "softwareConfig": {
      "schedulerCount": 1
    },
    "databaseConfig": {
      "machineType": "db-n1-standard-2"
    },
    "webServerConfig": {
      "machineType": "composer-n1-webserver-2"
    }
  }
}

Terraform

创建环境时,以下字段可用于控制环境规模和性能参数:

  • node_config 块中的 node_count 指定您的环境中的节点数。

    节点计数是环境的 GKE 集群中的 Google Kubernetes Engine 节点数量。默认情况下,环境具有 3 个节点。

    您可以在创建环境后更改此值。

  • node_config 块中的 disk_size_gb 指定环境虚拟机的磁盘大小。

    环境节点的磁盘大小(以 GB 为单位)。您环境中的每个节点都具有此数量的磁盘空间。如果您希望将大量数据存储在与环境虚拟机同步的文件夹中,请选择较大的磁盘大小。例如,在环境存储桶的 /data 文件夹中。

    最小为 20 GB。默认为 100 GB。 创建环境后,您无法更改此参数。

  • node_config 块中的 machine_type 指定节点虚拟机的机器类型。指定此字段时,还应在 zone 字段中为您的环境虚拟机提供一个 Compute Engine 可用区

    节点的机器类型是集群实例使用的 Compute Engine 机器类型。此参数确定您的环境的 CPU 数和内存量。默认机器类型为 n1-standard-1

    如需在创建环境后更改此值,您必须手动重新配置环境集群

  • database_config 块中的 machine_type 指定 Cloud SQL 实例的机器类型。

    此参数确定运行 Airflow 数据库的 Cloud SQL 实例的机器类型。默认 Cloud SQL 机器类型为 db-n1-standard-2

  • web_server_config 块中的 machine_type 指定 Airflow 网络服务器实例的机器类型。

    此参数确定运行 Airflow 网络服务器的 Compute Engine 实例的机器类型。

    默认网络服务器机器类型为 composer-n1-webserver-2

  • 无法使用 Terraform 指定调度器的数量。

resource "google_composer_environment" "example" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      node_count = NODE_COUNT
      disk_size_gb = DISK_SIZE
      machine_type = "NODE_MACHINE_TYPE"
      zone = "NODE_ZONE"
    }

    database_config {
      machine_type = "SQL_MACHINE_TYPE"
    }

    web_server_config {
      machine_type = "WS_MACHINE_TYPE"
    }
  }
}

替换:

  • NODE_COUNT 替换为节点数。
  • DISK_SIZE 替换为环境虚拟机的磁盘大小(以 GB 为单位)。
  • NODE_MACHINE_TYPE 替换为节点虚拟机的机器类型
  • NODE_ZONE 替换为您的环境虚拟机的 Compute Engine 可用区。
  • SQL_MACHINE_TYPE 替换为 Cloud SQL 实例的机器类型。
  • WS_MACHINE_TYPE 替换为 Airflow 网络服务器实例的机器类型。

例如:

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

  config {

    node_config {
      node_count = 4
      disk_size_gb = 100
      zone = "us-central1-a"
      machine_type = "n1-standard-2"
    }

    database_config {
      machine_type = "db-n1-standard-2"
    }

    web_server_config {
      machine_type = "composer-n1-webserver-2"
    }
  }
}

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

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

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

  • 对于专用 IP 环境,您必须在项目中进行额外的网络设置,然后创建环境。如需了解所需步骤,请参阅配置专用 IP Cloud Composer 环境

    对于专用 IP 环境,您需要了解以下内容:

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

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

      • GKE 控制平面的 IP 范围
      • Airflow 网络服务器实例的 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. 展开网络、Airflow 配置替换及其他功能项。

  3. 网络配置部分中,选中启用 VPC 原生(使用别名 IP)复选框。

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

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

  6. Pod IP 地址分配部分中,指定 Pod 的次要 IP 范围。您可以在 VPC 网络中使用现有的次要范围,也可以采用 CIDR 表示法指定新的次要范围。

  7. 服务 IP 地址分配部分中,指定服务的次要 IP 范围。您可以在 VPC 网络中使用现有的次要范围,也可以采用 CIDR 表示法指定新的次要范围。

  8. 专用 IP 部分中,选中启用专用 IP 复选框。

  9. GKE 集群主服务器专用 IP 部分中,为 GKE 控制平面指定 IP 范围:

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

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

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

  11. 网络服务器专用 IP 部分中,指定 Airflow 网络服务器实例的 IP 范围。

  12. Cloud SQL 专用 IP 部分中,指定 Cloud SQL 实例的 IP 范围。

gcloud

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

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

  • --enable-ip-alias 会启用使用别名 IP 地址的 VPC 原生功能。

    使用 --enable-private-environment 时或为 pod 和服务配置次要范围时,必须填写此参数。

  • --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 控制平面的范围。

  • --web-server-ipv4-cidr 用于指定 Airflow 网络服务器实例的范围。
  • --cloud-sql-ipv4-cidr 用于指定 Cloud SQL 实例的范围。

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --enable-ip-alias \
    --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 \
    --web-server-ipv4-cidr WEB_SERVER_RANGE \
    --cloud-sql-ipv4-cidr SQL_RANGE

替换:

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

  • WEB_SERVER_RANGE 替换为 Airflow 网络服务器实例的次要范围。
  • SQL_RANGE 替换为 Cloud SQL 实例的范围。

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

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

控制台

创建环境页面的网络服务器配置部分中,执行以下操作:

  • 如需向授权用户授予从互联网访问 Airfow 的权限,请选择允许从所有 IP 地址访问

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

gcloud

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

  • --web-server-allow-all 可让已获授权的用户从互联网访问 Airfow。这是默认选项。

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --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 \
    --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 资源中,指定网络服务器访问参数。

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

    }
}

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

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

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

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

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

控制台

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

  1. 展开网络、Airflow 配置替换及其他功能项。

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

  3. 输入环境变量的名称

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

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

    例如:

    webserver dag_orientation TB

gcloud

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

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

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

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --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 \
    --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" {
  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" {
  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"
      }
    }
  }
}

第 8 步:(可选)指定维护窗口

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

控制台

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

  1. 展开网络、Airflow 配置替换及其他功能项。

  2. 维护窗口部分中,选中设置维护窗口的自定义时间复选框。

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

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

gcloud

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

  • --maintenance-window-start 设置自定义维护窗口的开始时间。
  • --maintenance-window-end 设置维护窗口的结束时间。
  • --maintenance-window-recurrence 设置维护窗口重复
gcloud beta composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --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 格式指定在一周中的选定几天重复。

以下示例指定星期日、星期三和星期六世界协调时间 (UTC) 01:00 到 07:00 之间的 6 小时维护窗口。忽略 2021 年 1 月 1 日的日期。

gcloud beta composer environments create example-environment \
  --location us-central1 \
  --maintenance-window-start '2021-01-01T01:00:00Z' \
  --maintenance-window-end '2021-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 格式指定在一周中的选定几天重复。

以下示例指定星期日、星期三和星期六世界协调时间 (UTC) 01:00 到 07:00 之间的 6 小时维护窗口。忽略 2021 年 1 月 1 日的日期。

例如:


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

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

Terraform

无法使用 Terraform 指定维护窗口。您可以使用 Terraform 创建环境,然后使用 Google Cloud Console 或 gcloud 指定维护窗口

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

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

控制台

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

  1. 展开网络、Airflow 配置替换及其他功能项。

  2. 标签部分中,点击添加标签

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

gcloud

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --labels LABELS

替换:

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

例如:

gcloud composer environments create example-environment \
    --location us-central1 \
    --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" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  labels = {
    LABEL_KEY = "LABEL_VALUE"
  }

}

替换:

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

例如:

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

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

}

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

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

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

步骤 11.(可选)配置其他参数

其他参数包括:

  • 您的环境节点所在的可用区

    要在其中部署集群节点的 Compute Engine 可用区。在此参数中,您可以选择环境位置中的特定可用区。

    默认情况下,系统会自动选择随机可用区。

  • OAuth 范围

    OAuth 范围是一组可用于所有节点虚拟机的 Google API 范围。如果为空,则默认为 https://www.googleapis.com/auth/cloud-platform

    如果您指定了自定义 OAuth 范围,请在指定范围列表中添加 https://www.googleapis.com/auth/cloud-platform

  • 节点虚拟机标记

    应用于所有节点虚拟机的标记列表。标记用于标识网络防火墙的有效来源或目标。此列表中的每个标记都必须遵循 RFC 1035

  • Python 版本

    如果您的环境使用 Airflow 1.10.* 及更低版本的 Airlfow,您可以将环境设置为使用 Python 2。默认的 Python 版本是 Python 3。如需详细了解 Cloud Composer 中的 Python 2 支持,请参阅支持的 Python 版本

控制台

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

  1. 节点配置部分中:

    • 可用区下拉列表中,为您的环境节点选择一个可用区。

      您之后将无法更改可用区。

    • OAuth 范围字段中,指定节点虚拟机的 OAuth 范围。

      您以后无法更改 OAuth 范围。

    • 标记字段中,为节点虚拟机指定实例标记。

      您之后无法更改标记。

    • Python 版本字段中,选择 Python 的版本。

      您之后无法更改 Python 版本。

gcloud

创建环境时,以下参数可用于控制环境的其他参数:

  • --zone 为您的环境虚拟机指定 Compute Engine 可用区。

  • --oauth-scopes 指定以逗号分隔的 OAuth 范围列表。

  • --tags 指定应用于所有节点虚拟机的实例标记的逗号分隔列表。

  • --python-version 可用于指定 Python 的版本。

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --zone ZONE \
    --oauth-scopes OAUTH_SCOPES \
    --tags TAGS \
    --python-version PYTHON_VERSION

替换:

  • ZONE 替换为 Compute Engine 可用区的名称。
  • OAUTH_SCOPES 替换为 OAuth 范围的逗号分隔列表。
  • TAGS 替换为实例标记的逗号分隔列表。
  • PYTHON_VERSION 替换为 Python 版本(32)。

例如:

gcloud composer environments create example-environment \
    --location us-central1 \
    --zone us-central1-a \
    --oauth-scopes https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/bigquery  \
    --tags group1,production \
    --python-version 3

API

创建环境时,请在环境 > EnvironmentConfig 资源中指定环境的其他参数。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "nodeConfig": {
      "location": "projects/PROJECT_ID/zones/ZONE",
      "oauthScopes": [
        "OAUTH_SCOPE"
      ],
      "tags": [
        "TAG"
      ]
    },
    "softwareConfig": {
        "pythonVersion": "PYTHON_VERSION"
    }
  }
}

替换:

  • ZONE 替换为 Compute Engine 可用区的名称。
  • OAUTH_SCOPE 替换为 OAuth 范围。如需指定其他范围,请添加 https://www.googleapis.com/auth/cloud-platform 范围,后跟其他范围项。
  • TAG 替换为实例标记。
  • PYTHON_VERSION 替换为 Python 版本(32)。

例如:

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

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "nodeConfig": {
      "location": "projects/example-project/zones/us-central1-a",
      "oauthScopes": [
        "https://www.googleapis.com/auth/cloud-platform",
        "https://www.googleapis.com/auth/bigquery"
      ],
      "tags": [
        "group1",
        "production"
      ]
    },
    "softwareConfig": {
        "pythonVersion": "3"
    }
  }
}

Terraform

创建环境时,以下字段可用于控制环境的其他参数:

  • node_config 块中的 zone 字段指定环境虚拟机的 Compute Engine 可用区。

  • node_config 块中的 oauth_scopes 字段指定 OAuth 范围的逗号分隔列表。

  • node_config 块中的 tags 字段指定应用于所有节点虚拟机的实例标记的逗号分隔列表。

  • software_config 块中的 python_version 字段可用于指定 Python 的版本。

resource "google_composer_environment" "example" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      zone = "ZONE"
      oauth_scopes = "[OAUTH_SCOPES]"
      tags = "TAGS"
    }

    software_config {
      python_version = "PYTHON_VERSION"
    }
  }
}

替换:

  • ZONE 替换为 Compute Engine 可用区的名称。
  • OAUTH_SCOPES 替换为 OAuth 范围的逗号分隔列表。
  • TAGS 替换为实例标记的逗号分隔列表。
  • PYTHON_VERSION 替换为 Python 版本(32)。

例如:

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

  config {
    node_config {
      zone = "us-central1-a"
      oauth_scopes = "[https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/bigquery]"
      tags = "[group1,production]"
    }
    software_config {
      python_version = "3"
    }
  }
}

步骤 12.(可选)强制使用 Beta 版 API

即使您的环境没有任何预览功能,您也可以明确让您的环境使用 Beta 版 Cloud Composer API。如果您这样做,则系统将使用 v1beta1 服务端点创建环境。

控制台

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

  1. 展开网络、Airflow 配置替换及其他功能项。

  2. Beta API 部分中,选中强制使用 Beta 版 API 复选框。

gcloud

使用 gcloud beta composer 命令创建环境。

API

使用 v1beta1 服务端点创建环境。

Terraform

默认情况下,Cloud Composer 的 Terraform 提供商使用 Beta 版 API。

后续步骤