创建 Managed Service for Apache Airflow 环境

Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)

本页面介绍了如何创建 Managed Airflow 环境。

准备工作

  • 启用 Cloud Composer API。如需查看 Managed Airflow 使用的服务的完整列表,请参阅 Managed Airflow 所需的服务

  • 启用 Managed Airflow (Gen 2) 所需的 API 所在的服务组

  • 创建环境所需的大致时间为 25 分钟。

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

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

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

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

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

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

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

  • 您可能会注意到,项目中属于环境的 GKE 集群的 Compute Engine 元数据条目。在 GKE 集群创建和升级期间,Google Kubernetes Engine 会自动添加项目级元数据条目 (google_compute_project_metadata),以跟踪次要 IP 地址范围使用情况。请勿修改或移除这些条目。Google Kubernetes Engine 会自动管理这些节点。

第 1 步:创建或选择环境的服务账号

创建环境时,您需要指定服务账号。此服务账号称为“环境的服务账号”。您的环境使用此服务账号执行大部分操作。

您的环境的服务账号不是用户账号。服务账号是由应用或虚拟机 (VM) 实例(而非单个用户)使用的特殊账号。

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

如果您的项目中还没有适用于 Managed Airflow 环境的服务账号,请创建该账号。

如需查看有关在 Terraform 中为环境创建服务账号的扩展示例,请参阅创建环境 (Terraform)

如需为您的环境创建新的服务账号,请执行以下操作:

  1. 按照 Identity and Access Management 文档中的说明创建新的服务账号

  2. 如 Identity and Access Management 文档中所述,向其授予角色。所需的角色是 Composer Worker (composer.worker)。

  3. 如果您的环境使用资源位置限制,或者从 Artifact Registry 代码库从私有代码库安装 PyPI 软件包,请向用户管理的服务账号授予服务账号用户 (iam.serviceAccountUser) 角色,该服务账号在自身上运行您的环境(委托人和资源是同一服务账号)。

  4. 如需访问 Google Cloud 项目中的其他资源,请向此服务账号授予访问这些资源的额外权限。 在大多数情况下,Composer Worker (composer.worker) 角色可提供所需的这组权限。仅当 DAG 的运行需要时,才向此服务账号添加额外权限。

第 2 步:基本设置

此步骤会在指定位置创建一个使用默认参数的 Managed Airflow 环境。

控制台

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

    转到“创建环境”

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

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

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

    位置是指环境所在的区域。

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

  5. 服务账号下拉列表中,为您的环境选择一个服务账号。

    如果您还没有环境的服务账号,请参阅创建或选择环境的服务账号

gcloud

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

  • ENVIRONMENT_NAME 替换为环境的名称。

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

  • LOCATION 替换为环境的区域。

    位置是指环境所在的区域。

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

  • IMAGE_VERSION 替换为 Managed Airflow 映像的名称。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.17.13-airflow-2.11.1 \
    --service-account "
example-account@example-project.
"

API

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

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

  • PROJECT_ID 替换为项目 ID

  • LOCATION 替换为环境的区域。

    位置是指环境所在的区域。

  • ENVIRONMENT_NAME 替换为环境名称。

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

  • IMAGE_VERSION 替换为 Managed Airflow 映像的名称。

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

例如:

// 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.17.13-airflow-2.11.1"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.
"
    }
  }
}

Terraform

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

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

  config {
    software_config {
      image_version = "IMAGE_VERSION"
    }
    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

  • ENVIRONMENT_NAME 替换为环境的名称。

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

  • LOCATION 替换为环境的区域。

    位置是指环境所在的区域。

  • IMAGE_VERSION 替换为 Managed Airflow 映像的名称。

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

例如:

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

  config {
    software_config {
      image_version = "composer-2.17.13-airflow-2.11.1"
    }
    node_config {
      service_account = "
example-account@example-project.
"
    }
  }
}

第 3 步:向托管式 Airflow 服务账号授予所需权限

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

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

控制台

当您在项目中创建环境时,如果 Managed Airflow 服务代理对环境的服务账号没有所需权限,系统会显示向 Cloud Composer 服务账号授予所需权限部分。

您可以在环境的服务账号账号中添加 Managed Airflow Service Agent 账号作为新主账号,并向其授予 Cloud Composer v2 API Service Agent Extension 角色。

确认您为环境使用的服务账号是预期的服务账号,然后点击授予

gcloud

您可以在环境的服务账号账号中添加 Managed Airflow 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. \
    --role roles/composer.ServiceAgentV2Ext

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

例如:

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

API

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

  1. 读取您环境的服务账号的现有允许政策。
  2. 对其进行修改以包含 Managed Airflow 服务代理的 roles/composer.ServiceAgentV2Ext 角色。
  3. 重写现有允许政策。

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

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

替换:

例如:

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

Terraform

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

您可以在环境的服务账号账号中添加 Managed Airflow 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."
}

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

示例:

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

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

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

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

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

  • 环境大小。控制包括 Airflow 数据库的代管式 Managed Airflow 基础架构的性能参数。如果您希望以更高的基础设施性能运行大量 DAG 和任务,请考虑选择较大的环境大小。例如,环境规模越大,环境可以处理的 Airflow 任务日志条目数量就越多,延迟时间也就越短。

  • 工作负载配置。控制在环境的 GKE 集群中运行的 Airflow 组件的规模和性能。

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

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

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

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

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

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

      在 Managed Airflow(第 2 代)中,Airflow 触发器默认处于停用状态。如果您想创建包含触发器的环境,请将触发器的数量设置为一个或多个。

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

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

控制台

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

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

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

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

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

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

    3. Triggerer 部分中,使用触发器数量字段输入环境中的触发器数量。

      如果您不想在 DAG 中使用可延期运算符,请将触发器的数量设置为零。 默认情况下,触发器在 Managed Airflow(第 2 代)中处于停用状态。

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

    4. DAG 处理器部分中,指定环境中的 DAG 处理器数量以及每个 DAG 处理器的 CPU、内存和存储空间量。

      高弹性环境至少需要两个 DAG 处理器。

    5. Web 服务器部分中,指定 Web 服务器的 CPU、内存和存储空间量。

    6. 工作器部分,指定:

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

gcloud

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

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

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

    • 对于标准弹性环境,请使用介于 010 之间的值。
    • 对于高弹性环境,请使用 0 或介于 210 之间的值。
  • --triggerer-cpu 用于指定 Airflow 触发器的 CPU 数量(以 vCPU 为单位)。允许使用的值有:0.50.751。默认值为 0.5

  • --triggerer-memory 用于指定 Airflow 触发器的内存量(以 GB 为单位)。默认值为 0.5

    所需的最低内存等于为触发器分配的 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 Web 服务器的磁盘空间。

  • --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.17.13-airflow-2.11.1 \
    --service-account "SERVICE_ACCOUNT" \
    --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.17.13-airflow-2.11.1 \
    --service-account "
example-account@example-project.
" \
    --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",
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

替换:

  • 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",
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.
"
    }
  }
}

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"

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

替换:

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。
  • SERVICE_ACCOUNT 替换为您的环境的服务账号。
  • 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
      }
      dag_processor {
        cpu = 1
        memory_gb = 2
        storage_gb = 1
        count = 1
    }
      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"

    node_config {
      service_account = "
example-account@example-project.
"
    }

  }
}

第 5 步:(可选)启用高恢复能力模式

高弹性(高可用性)Managed Airflow 环境是指使用内置冗余和故障切换机制的环境,能够降低环境受可用区级故障和单点故障中断影响的可能性。

高弹性环境是多可用区环境,可在所选区域的至少两个可用区中运行。以下组件在不同的可用区中运行:

工作器数量下限设置为 2,并且环境的集群在各个可用区之间分配工作器实例。如果发生可用区级服务中断,受影响的工作器实例会在其他可用区中重新调度。高弹性环境的 Cloud SQL 组件具有分布在不同可用区的主实例和备用实例。

控制台

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

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

  2. 环境资源部分中,选择高弹性环境的扩缩参数。高弹性环境需要两个调度器、零个或介于 2 到 10 个触发器,以及至少两个工作器:

    1. 点击 Custom(自定义)。

    2. 调度器数量下拉列表中,选择 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 and--triggerer-memory 标志。

    如需详细了解 --triggerer-count--triggerer-cpu--triggerer-memory 标志,请参阅配置环境规模和性能参数

  • --min-workers2 或更多

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.17.13-airflow-2.11.1 \
    --service-account "SERVICE_ACCOUNT" \
    --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",
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }

  }
}

示例:


// 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",
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.
"
    }

  }
}

Terraform

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

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

  config {

    resilience_mode = "HIGH_RESILIENCE"

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }

  }
}

示例:

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

  config {

    resilience_mode = "HIGH_RESILIENCE"

    node_config {
      service_account = "
example-account@example-project.
"
    }
  }
}

第 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.17.13-airflow-2.11.1 \
    --service-account "SERVICE_ACCOUNT" \
    --cloud-sql-preferred-zone SQL_ZONE

替换以下内容:

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

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.17.13-airflow-2.11.1 \
    --service-account "
example-account@example-project.
" \
    --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"
    },
      "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

替换以下内容:

  • 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": {