创建环境

本页面介绍如何创建 Cloud Composer 环境,以及在创建过程中如何替换默认 Airflow 环境设置。

Cloud Composer 环境运行 Apache Airflow 软件。在 Google Cloud (GCP) 项目中创建新环境时,您可以指定多个参数,例如 Compute Engine 机器类型或集群中的节点数。

准备工作

访问权限控制

  • 创建 Cloud Composer 环境需要以下权限:(1) composer.environments.create 和 (2) 运行环境的服务帐号上的 iam.serviceAccounts.actAs。如需了解详情,请参阅 Cloud Composer 访问权限控制

  • 默认情况下,Cloud Composer 环境使用 Compute Engine 默认服务帐号运行。在环境创建期间,您可以指定自定义服务帐号。 此服务帐号至少需要拥有 composer.worker 角色提供的权限才能访问 Cloud Composer 环境中的资源。通过对包含该服务帐号的服务帐号或项目启用 iam.serviceAccounts.actAs 权限,为您授予服务帐号的身份。请确保您已被授予包含此权限的角色之一,例如 Service Account UserOwnerEditor。如需了解详情,请参阅了解服务帐号

  • 如果您的自定义服务帐号需要在任务执行期间访问您 Google Cloud 项目中的其他资源,您可以向服务帐号授予所需角色。或者,您也可以提供相关凭据作为 Airflow 连接的,然后在运算符中引用该连接。

  • 您可能会在项目的 IAM 政策或 GCP Console 中看到其他一些由 Google 拥有的服务帐号(如 service-<var>PROJECT_ID</var>@cloudcomposer-accounts.iam.gserviceaccount.com)。如需了解可用的类型和角色,请参阅服务帐号

  • Cloud Composer 的网域限定共享功能目前处于 Beta 版阶段。 如果您启用了网域限定共享政策,则必须在创建 Cloud Composer 环境时使用 Beta API。如需了解如何使用 Beta 版 API 部署 Cloud Composer 环境,请参阅 Beta 版功能支持

  • 对 VPC Service Controls 的支持目前还是 Beta 版功能。请参阅配置 VPC Service Controls,了解如何在安全边界内部署 Cloud Composer 环境。 如需了解详情,请参阅 VPC Service Controls 已知限制

Beta 版功能

本部分列出了目前处于 Beta 版阶段的功能。

  • Web 服务器网络访问权限控制:通过此功能,您可以指定可访问您环境的 Airflow Web 服务器的 IP 地址范围。

  • Airflow 网络服务器的机器类型:借助此参数,您可以指定运行 Airflow 网络服务器的 Google App Engine 虚拟机类型。

  • Airflow 数据库的机器类型:借助此参数,您可以指定将用于运行 Airflow 数据库的 CloudSQL 实例的机器类型。

创建新的环境

如需创建一个 Cloud Composer 环境,请执行以下操作:

控制台

  1. 打开 Google Cloud Console 中的创建环境页面。

    打开“创建环境”页面

  2. 为您的环境输入一个名称。

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

  3. 节点配置下,为 Google Kubernetes Engine 集群中的节点指定设置。如果您未指定设置,则系统将使用默认值。

    设置 说明
    节点数 用于运行环境的 Google Kubernetes Engine 节点数。默认值为 3 个节点。节点数是在环境创建后您可更改的唯一 Google Kubernetes Engine 集群设置。
    位置 (必填)用于创建环境的 Compute Engine 区域
    地区后缀 用于创建运行 Apache Airflow 的虚拟机实例的 Compute Engine 地区。如果您未指定此设置,则系统会在该位置范围内随机选择一个地区。
    机器类型 集群实例使用的 Compute Engine 机器类型。该机器类型决定了您的环境的 CPU 数和内存量。默认的机器类型为 n1-standard-1。
    磁盘大小 节点虚拟机实例使用的磁盘大小(以 GB 为单位)。最小为 20 GB。默认为 100 GB。
    OAuth 范围 在所有节点虚拟机实例上提供的一组 Google API 范围。默认值为 https://www.googleapis.com/auth/cloud-platform,必须包含在指定范围的列表中。
    服务帐号 节点虚拟机实例将使用的 Google Cloud 服务帐号。如果您未指定该设置,则系统将使用默认的 Compute Engine 服务帐号。
    标记 应用于所有节点虚拟机实例的实例标记的列表。标记用于标识网络防火墙的有效来源或目标。此列表中的每个标记都必须符合 RFC 1035 格式。
    映像版本 要在您的环境中使用的 Cloud Composer 版本(包括 Cloud Composer 和 Airflow 版本)。有关默认版本的信息,请参阅版本列表
    Python 版本 需要在您的环境中使用的 Python 版本。支持的版本是 Python 2 和 Python 3。默认版本为 3。
  4. 网络配置下,为 Google Kubernetes Engine 集群指定网络设置。如果您未指定设置,则系统将使用默认值。

    设置 说明
    启用 VPC 原生(使用别名 IP) 使用您的环境的别名 IP 地址创建 VPC 原生 GKE 集群。默认值是基于路由的 GKE 集群。对于专用 IP Cloud Composer 环境而言,这是必填项。
    网络 用于机器通信的 Virtual Private Cloud 网络。如需指定子网,您必须指定此网络。如果未指定此设置,则系统会使用默认网络。共享 VPC 需要指定宿主项目。
    子网 用于机器通信的 Virtual Private Cloud 子网。如果您的网络使用自定义模式网络,则必须指定子网。
    Pod IP 地址分配 用于为 GKE 集群中的 pod 分配 IP 地址的次要范围。如果未指定此设置,则系统会创建新的次要范围。此设置一经确定便无法更改。
    服务 IP 地址分配 用于为 Cloud Composer 服务预留空间的次要范围。如果未指定此设置,则系统会创建新的次要范围。此设置一经确定便无法更改。
    专用 IP 环境 用于启用专用 IP Cloud Composer 环境。默认情况下,该环境处于停用状态。
    使用 GKE 主服务器的外部 IP 地址访问该主服务器 用于启用对 GKE 集群主服务器的公共访问权限。需要设置专用 IP 环境。
    GKE 主服务器 IP 范围 主服务器 VPC 的专用 RFC 1918 范围。如果您未指定此设置,则系统将使用默认值 172.16.0.0/28。对于专用 IP 环境而言,这是必填项。

    确保次要范围足以满足集群大小和预期增长的需求。例如,对于 3 节点 Cloud Composer 环境,次要范围的网络前缀长度不得超过以下值:

    • Pod:/22
    • 服务:/27

    请参阅创建 VPC 原生集群,了解有关配置 pod 的次要范围服务的准则。

  5. (Beta 版)在 Web 服务器网络访问权限控制下方,指定可访问您环境的 Airflow Web 服务器的 IP 地址范围。

    设置 说明
    允许从所有 IP 地址访问(默认) 所有 IP 范围均可访问 Airflow Web 服务器。
    仅允许从特定 IP 地址访问 只有特定的 IP 范围才能访问 Web 服务器。如需添加新范围,请点击添加 IP 范围。如需移除范围,请点击该行对应的垃圾桶按钮。如需拒绝所有 IP 范围,请删除所有行。
  6. (可选)如需更改或替换 Airflow 配置文件 (airflow.cfg) 中的默认值,请点击添加 Airflow 配置属性

  7. (可选)要配置环境变量,请点击添加环境变量。 如需了解具体要求,请参阅环境变量

  8. (可选)要添加标签,请点击添加标签

    标签键和标签值只能包含字母、数字、短划线和下划线。标签键必须以字母或数字开头。

  9. 点击创建

gcloud

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    OTHER_ARGUMENTS

以下是必填参数:

  • ENVIRONMENT_NAME 是环境的名称。该名称必须与 ^[a-z](?:[-0-9a-z]{0,61}[0-9a-z])?$ 格式匹配。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储分区名称。如需查看限制列表,请参阅存储分区命名准则
  • LOCATION 是环境所在的 Compute Engine 区域。确保您指定的位置提供 Composer 服务

下面介绍的是可选参数。

  • airflow-configsSECTION_NAME-PROPERTY_NAME=VALUE Airflow 配置替换列表。节名称和属性名称必须用连字符分隔。
  • cloud-sql-machine-type 是用于用作 Airflow 数据库的 Cloud SQL 实例的机器类型。该机器类型决定了您的环境的 CPU 数和内存量。默认机器类型为 db-n1-standard-2。此参数现为 Beta 版,且需要使用 gcloud beta composer environments create 命令。此参数的可能值包括:db-n1-standard-2db-n1-standard-4db-n1-standard-8db-n1-standard-16。如需查看这些机器的规范,请参阅 Cloud SQL 页面
  • disk-size 是节点虚拟机使用的磁盘大小(以 GB 为单位)。最小为 20 GB。默认磁盘大小为 100 GB。
  • env-variables 是在 Airflow 调度器、工作器和 Web 服务器进程中设置的 NAME=VALUE 环境变量的列表。
  • enable-private-environment 用于启用专用 IP Cloud Composer 环境
    • master-ipv4-cidr 是主服务器 VPC 的专用 RFC 1918 范围。 当 enable-private-environment 为 true 时为必填项。
  • enable-private-endpoint 用于启用对 GKE 集群主服务器的公共访问权限。需要指定 enable-private-environment
  • enable-ip-alias 会启用使用别名 IP 地址的 VPC 原生功能。当 enable-private environment 为 true 时,或为 pod 和服务配置次要范围时,此为必填项:
    • cluster-secondary-range-namecluster-ipv4-cidr 用于配置 pod 的次要范围。
    • services-secondary-range-nameservices-ipv4-cidr 用于配置服务的次要范围。
  • image-version 是要在您的环境中使用的 composer-addon 版本和 Airflow 版本,格式为 composer-a.b.c-airflow-x.y.z。如需了解版本别名和默认版本,请参阅 Cloud Composer 版本控制
  • labels 是附加到环境及其资源的用户指定标签
  • machine-typeCompute Engine 机器类型。 该机器类型决定了您的环境的 CPU 数和内存量。默认机器类型为 n1-standard-1
  • network 是用于机器通信的 Virtual Private Cloud 网络
    • 如需指定子网,您必须指定此网络。如果未指定此设置,则系统会使用默认网络。
    • 使用共享 VPC 时,您必须按照 projects/HOST_PROJECT_ID/global/networks/NETWORK_ID 格式提供网络的相对资源名称。如需了解共享 VPC 子网的要求,请参阅下文中的 subnetwork
  • node-count 是用于运行环境的 GKE 节点的数量。默认节点数为 3 个。节点数是在环境创建后您可更改的唯一 Google Kubernetes Engine 集群设置。
  • oauth-scopes 是在所有节点虚拟机上提供的一组 Google API 范围。默认的 OAuth 范围为 https://www.googleapis.com/auth/cloud-platform,该范围必须包含在范围(如果已指定)的列表中。
  • python-version 是您的环境将使用的 Python 版本。 支持的版本是 Python 2 和 Python 3。默认版本为 2。
  • subnetwork 是环境所连接的 Compute Engine 子网
    • 如果您的网络使用自定义模式网络,则必须指定子网。
    • 使用 gcloud 创建共享 VPC 环境时,您必须使用次要 IP 地址范围 composer-podscomposer-services。您可以使用 Cloud Composer API 指定不同的次要范围名称。您还必须按照 projects/HOST_PROJECT_ID/regions/REGION_ID/subnetworks/SUBNET_ID 格式将子网名称指定为相对资源名称
  • service-account 是节点虚拟机实例将使用的 Google Cloud 服务帐号。如果您未指定该设置,则系统将使用默认的 Compute Engine 服务帐号。
  • tags 是应用于所有节点虚拟机的实例标记的列表。标记用于标识网络防火墙的有效来源或目标。此列表中的每个标记都必须遵循 RFC 1035
  • web-server-machine-type 是用于运行 Airflow 网络服务器的机器类型。该机器类型决定了您的环境的 CPU 数和内存量。默认机器类型为 composer-n1-webserver-2。此参数现为 Beta 版,且需要使用 gcloud beta composer environments create 命令。此参数的可能值为:composer-n1-webserver-2composer-n1-webserver-4composer-n1-webserver-8

以下示例创建了一个环境,该环境在 us-central1 区域运行受支持的最新 Cloud Composer 映像版本,并且使用 n1-standard-2 机器类型和 beta 环境标签:

gcloud beta composer environments create test-environment \
    --location us-central1 \
    --zone us-central1-f \
    --machine-type n1-standard-2 \
    --image-version composer-latest-airflow-x.y.z \
    --labels env=beta  

以下共享 VPC 示例会在宿主项目中创建一个环境。该环境位于 us-central1 区域,并且使用 n1-standard-2 机器类型和 beta 环境标签:

gcloud beta composer environments create host-project-environment \
    --network vpc-network-name --subnetwork vpc-subnetwork-name
    --location us-central1 \
    --zone us-central1-f \
    --machine-type n1-standard-2 \
    --labels env=beta  

API

如需使用 Cloud Composer REST API 创建新的 Cloud Composer 环境,请构建一个 environments.create API 请求,并使用您的配置信息填充 Environment 资源。

Terraform

要使用 Terraform 配置此环境,请将以下资源块添加到 Terraform 配置并运行 terraform apply

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

以下是必填参数:

  • name,其中 ENVIRONMENT_NAME 是环境的名称。该名称必须与 ^[a-z](?:[-0-9a-z]{0,61}[0-9a-z])?$ 格式匹配。该环境名称用于创建环境的子组件,因此您必须提供一个有效的 Cloud Storage 存储分区名称。如需查看限制列表,请参阅存储分区命名准则
  • region,其中 LOCATION 是环境所在的 Compute Engine 区域。确保您指定的位置提供 Composer 服务

如需了解更多可选参数的用法,请参阅 Terraform 参数参考

以下示例创建了一个环境,该环境在 us-central1 区域运行受支持的最新 Cloud Composer 映像版本,并且使用 n1-standard-2 机器类型和 beta 环境标签。要使用 Terraform 配置此环境,请将以下资源块添加到 Terraform 配置并运行 terraform apply

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

  config {
    node_config {
      zone = "us-central1-f"
      machine_type = "n1-standard-2"
    }
    software_config {
      image_version = "composer-latest-airflow-x.y.z"
    }
  }
  labels = {"env": "beta"}
}

以下共享 VPC 示例会在宿主项目中创建一个环境。该环境位于 us-central1 区域,并且使用 n1-standard-2 机器类型和 beta 环境标签。要使用 Terraform 配置此环境,请将以下资源块添加到 Terraform 配置并运行 terraform apply

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

  config {
    node_config {
      zone = "us-central1-f"
      machine_type = "n1-standard-2"
      network = "vpc-network-name"
      subnetwork = "vpc-subnetwork-name"
    }
    software_config {
      image_version = "composer-latest-airflow-x.y.z"
    }
  }
  labels = {"env": "beta"}
}

配置电子邮件通知

配置 SendGrid 电子邮件服务

若想接收通知,请配置相应环境变量,以通过 SendGrid 电子邮件服务发送电子邮件。

  1. 如果您尚未注册 SendGrid,请通过 Google Cloud Console 注册 SendGrid 并创建 API 密钥。作为 Google Cloud 开发者,您每月可免费发送 12000 封电子邮件。

  2. 在 Cloud Console 中,打开创建环境页面。

    打开“创建环境”页面

  3. 节点配置下,点击添加环境变量

  4. 输入以下环境变量:

    名称
    SENDGRID_MAIL_FROM 发件人电子邮件地址,例如 noreply-composer@<your-domain>
    SENDGRID_API_KEY 您的 SendGrid API 密钥。
  5. 如需测试 SendGrid 配置,请执行以下操作:

    1. 创建一个使用 EmailOperator 的测试 DAG。
    2. 将此 DAG 上传到您的环境,并检查 EmailOperator 任务是否成功完成。
    3. 使用您的 SendGrid 凭据登录 SendGrid。
    4. 在 SendGrid 界面中,转到“活动”页面。
    5. 在列表中搜索该电子邮件。您应该会看到 SendGrid 已处理并递送这封电子邮件。
    6. 如果该电子邮件未被处理和递送,请执行以下操作:
      • 检查 Sendgrid 配置。
      • 验证 SENDGRID_MAIL_FROMSENDGRID_API_KEY 环境变量是否正确。
      • 检查您的电子邮件客户端的垃圾邮件过滤器。

配置第三方 SMTP 服务

如需通过第三方 SMTP 服务发送电子邮件,您必须替换 email_backend Airflow 配置

  1. 打开创建环境页面。

    打开“创建环境”页面

  2. Airflow 配置替换下,点击添加 Airflow 配置替换
  3. 输入以下配置属性:

    email email_backend airflow.utils.email.send_email_smtp
    smtp smtp_host SMTP 服务器的主机名。
    smtp smtp_user SMTP 服务器上的用户名。
    smtp smtp_port 端口 25 以外的一个端口。端口 25 已被屏蔽。
    smtp smtp_password Airflow 的默认 SMTP 密码。您不能配置新密码。
    smtp smtp_mail_from 发件人电子邮件地址,例如 noreply-composer@
    smtp smtp_starttls 为增强安全性,请将其设置为 True
    smtp smtp_ssl 为增强安全性,请将其设置为 True

对于其他 SMTP 配置,请参阅您的 Airflow 版本所对应的 default_airflow.cfg

替换 Airflow 配置

在创建或更新环境时,您可以替换 Apache Airflow 配置属性。部分属性已被屏蔽

控制台

  1. 打开创建环境页面。

    打开“创建环境”页面

  2. Airflow 配置替换下,点击添加 Airflow 配置替换

  3. 输入该配置的和新

例如:

webserver dag_orientation RL

gcloud

如需在创建环境时替换 Airflow 配置,请使用以下命令:

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --airflow-configs=KEY=VALUE,KEY=VALUE,...

其中:

  • ENVIRONMENT_NAME 是环境的名称。
  • LOCATION 是环境所在的 Compute Engine 区域。
  • KEY=VALUE 是由配置节和属性名(二者用连字符分隔,例如 core-print_stats_interval)及其相应值组成。

例如:

gcloud composer environments create test-environment \
    --location us-central1 \
    --airflow-configs=core-load_example=True,webserver-dag_orientation=TB 

操作完成后,该命令即终止。为了避免等待,可使用 --async 标志。如需查看其他示例,请参阅“gcloud composer environments update”参考页面。

API

如需在使用 Cloud Composer REST API 创建 Cloud Composer 环境期间替换 Airflow 属性,请构建一个 environments.create 请求,并填充 Environment 资源的可选 airflowConfigOverrides 字段。

后续步骤