创建环境

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

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-PROJECT_ID@cloudcomposer-accounts.iam.gserviceaccount.com 是 Cloud Composer 服务用来管理(创建、更新和删除)项目中 Cloud Composer 环境的 Google 管理的服务帐号的名称。

  • 如需在安全边界内部署 Cloud Composer 环境,请参阅配置 VPC Service Controls。VPC Service Controls 与 Cloud Composer 一起使用时,VPC Service Controls 存在一些已知限制

创建新的环境

如需创建一个 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. Cloud SQL 配置下,指定运行 Airflow 数据库的 Cloud SQL 实例的设置。如果您未指定设置,则系统将使用默认值。

    设置 说明
    Cloud SQL 机器类型 运行 Airflow 数据库的 Cloud SQL 实例的机器类型。该机器类型决定了您的环境的 CPU 数和内存量。
  5. 网络配置下,为 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 的次要范围服务的准则。

  6. Web 服务器配置下,指定可访问环境的 Airflow Web 服务器的 IP 地址范围,以及适用于 Airflow Web 服务器的机器类型。

    设置 说明
    允许从所有 IP 地址访问(默认) 所有 IP 范围均可访问 Airflow Web 服务器。
    仅允许从特定 IP 地址访问 只有特定的 IP 范围才能访问 Web 服务器。如需添加新范围,请点击添加 IP 范围。如需移除范围,请点击该行对应的垃圾桶按钮。如需拒绝所有 IP 范围,请删除所有行。
    Web 服务器机器类型 运行 Airflow 网络服务器的 Compute Engine 实例的机器类型。该机器类型决定了您的环境的 CPU 数和内存量。
  7. (预览版)在维护期下,您可以为 Cloud Composer 设置执行环境维护的自定义时间段。在这段时间内,您的环境可能暂时不可用,因此,请选择您不太可能运行工作流的时间(例如周末或非高峰时段)。您的每周总维护期必须至少达到 12 小时。您也可以在创建环境后通过环境详情页面的环境配置标签页设置此项。

  8. (可选)如需替换 Airflow 配置文件 (airflow.cfg) 中的默认值,请点击添加 Airflow 配置属性.

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

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

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

  11. 点击创建

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。 此参数的可能值为:db-n1-standard-2db-n1-standard-4db-n1-standard-8db-n1-standard-16
  • 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 用于配置服务的次要范围。
    • 预览版max-pods-per-node 会配置在创建环境期间分配的 GKE 集群中每个节点的 Pod 数上限。降低此值可减少 Cloud Composer Kubernetes 集群的 IP 地址用量。如需了解详情,请参阅优化 IP 地址分配。 此值只能在创建环境期间设置,并且仅适用于环境属于 VPC 原生环境的情况。可能的值范围为 8-110,默认值为 32。在预览版状态下,此参数要求您使用 gcloud beta composer 命令。
  • 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 网络服务器的 Compute Engine 实例的机器类型。该机器类型决定了您的环境的 CPU 数和内存量。默认机器类型为 composer-n1-webserver-2。 此参数的可能值为: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  

预览版:自定义维护期

您可为 Cloud Composer 设置执行环境维护的自定义时间范围。在这段时间内,您的环境可能暂时不可用,因此,请选择您不太可能运行工作流的时间(例如周末或非高峰时段)。您的每周总维护期必须至少达到 12 小时。请使用以下可选参数:

  • maintenance-window-start 设置自定义维护期的开始时间。
  • maintenance-window-end 设置自定义维护期的结束时间。
  • maintenance-window-recurrence 设置维护期的重复规则

例如:

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 \
    --maintenance-window-start-time='2019-08-01T01:00:00Z' \
    --maintenance-window-end-time='2019-08-01T07:00:00Z' \
    --maintenance-window-recurrence='FREQ=WEEKLY;BYDAY=SA,SU'
  

这会创建在每周日和每周六的 01:00 到 07:00 (UTC) 之间的维护期。周几(周日至周六)的表示方式如下:SU, MO, TU, WE, TH, FR, SA。使用 FREQ=DAILY 可将维护期设置为每天重复一次。

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 配置选项并配置其他与 SMTP 相关的参数。

如需配置第三方 SMTP 服务,请替换 Airflow 配置选项

部分
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host SMTP 服务器的主机名。
smtp smtp_user SMTP 服务器上的用户名。
smtp smtp_port SMTP 服务器的端口。端口 25 不可用。您可以使用其他端口,例如标准 SMTP 端口 465 和 587。
smtp smtp_password 不支持通过 smtp_password 设置密码。要设置 SMTP 密码,请按照配置 SMTP 密码中的说明操作。
smtp smtp_mail_from 发件人电子邮件地址,例如 noreply-composer@
smtp smtp_starttls 为增强安全性,请将其设置为 True
smtp smtp_ssl 为增强安全性,请将其设置为 True

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

为第三方 SMTP 服务配置 SMTP 密码

将 SMTP 密码以纯文本形式保存在 Airflow 配置文件中是一种不好的安全做法。因此,Cloud Composer 不支持此方法。您可以改为使用其他两种配置 SMTP 密码的方法。

使用命令检索 SMTP 密码

您可以使用配置替换功能来指定用于获取 SMTP 密码的命令。与 SMTP 服务通信时,Airflow 会使用此命令来获取密码的值。

如需使用此方法,请替换以下 Airflow 配置属性:

部分
smtp smtp_password_cmd 指定用于返回 SMTP 密码的命令。
使用存储在 Secret Manager 中的密文来检索 SMTP 密码

您可以将 Secret Manager 配置为您的 Airflow Secret 后端

为 Composer 环境配置 Secret Manager 后,您可以将 SMTP 密码存储在 Secret Manager 中:

  1. 创建新 Secret :

    echo "SMTP_PASSWORD" | gcloud beta secrets create airflow-config-smtp-password --data-file=- --replication-policy=automatic
    

    SMTP_PASSWORD 替换为您的 SMTP 密码。

  2. 对 Airflow 进行配置,以从 Secret Manager 获取 SMTP 密码。为此,请替换以下 Airflow 配置属性:

    部分
    smtp smtp_password_secret smtp-password

后续步骤