创建 Managed Service for Apache Airflow 环境

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

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

准备工作

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

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

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

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

如果您还没有为项目中的 Managed Airflow 环境创建服务账号,请创建一个。

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

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

  1. 按照 Identity and Access Management 文档中所述创建新的服务账号。

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

  3. 如需访问 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-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
"

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-3-airflow-2.11.1-build.20"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

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-3-airflow-2.11.1-build.20"
    }
    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

第 3 步:(可选)启用开发模式

开发模式环境可用于在 DAG 发布到生产环境之前对其进行测试和开发。您可以在不使用开发模式环境时将其休眠。

开发模式环境具有以下限制:

  • 只有搭载 Airflow 3 的 Managed Airflow(第 3 代)。
  • 仅限标准弹性模式。
  • 小型环境预设提供的小型环境规模和默认资源限制。无法更改开发模式环境的 Airflow 组件数量或资源限制。

控制台

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

  1. 在映像版本中,选择一个包含 Airflow 3 的版本。
  2. 选择开发模式。

gcloud

创建环境时,--enable-development-mode 实参会启用开发模式:

gcloud beta composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-3 \
    --service-account "SERVICE_ACCOUNT" \
    --enable-development-mode

API

创建环境时,在环境资源中,将 mode 字段设置为 DEVELOPMENT:

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

示例:


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

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
    "mode": "DEVELOPMENT"
}

Terraform

此功能尚不支持 Terraform。

创建开发模式环境后,该环境将处于运行状态。您可以随时休眠或恢复。

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

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

创建环境后,您可以更改所有性能和规模参数。

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

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

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

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

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

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

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

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

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

      在 Managed Airflow(第 3 代)中,Airflow 触发器默认处于启用状态。如果您想创建不含触发器的环境,请将触发器数量设置为零。

    • Airflow DAG 处理器。处理 DAG 文件并将其转换为 DAG 对象。在 Managed Airflow(第 3 代)中,调度器的这一部分作为单独的环境组件运行。

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

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

控制台

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

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

  • 如需使用预定义值,请在环境资源部分中点击小、中、大或超大。

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

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

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

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

      如果您不想在 DAG 中使用可延期运算符,请将触发器数量设置为零。

      如果您为环境设置了至少一个触发器,请使用 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 中使用可延期运算符,则需要触发器。

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

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

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

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

  • --dag-processor-count 用于指定环境中的 DAG 处理器数量。

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

  • --dag-processor-cpu 用于指定 DAG 处理器的 CPU 数量。

  • --dag-processor-memory 用于指定 DAG 处理器的内存量。

  • --dag-processor-storage 用于指定 DAG 处理器的磁盘可用空间。

  • --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-3-airflow-2.11.1-build.20 \
    --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 \
    --dag-processor-count DAG_PROCESSOR_COUNT \
    --dag-processor-cpu DAG_PROCESSOR_CPU \
    --dag-processor-memory DAG_PROCESSOR_MEMORY \
    --dag-processor-storage DAG_PROCESSOR_STORAGE \
    --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,包含 small、medium、large、extra-large。
  • SCHEDULER_COUNT 替换为调度器的数量。
  • 将 SCHEDULER_CPU 替换为调度器的 CPU 数量(以 vCPU 为单位)。
  • 将 SCHEDULER_MEMORY 替换为调度器的内存量。
  • 将 SCHEDULER_STORAGE 替换为调度器的磁盘大小。
  • 将 TRIGGERER_COUNT 替换为触发器数量。
  • 将 TRIGGERER_CPU 替换为触发器的 CPU 数量(以 vCPU 为单位)。
  • 将 TRIGGERER_MEMORY 替换为触发器的内存量(以 GB 为单位)。

  • 将 DAG_PROCESSOR_COUNT 替换为 DAG 处理器数量。

  • 将 DAG_PROCESSOR_CPU 替换为 DAG 处理器的 CPU 数量。

  • 将 DAG_PROCESSOR_MEMORY 替换为 DAG 处理器的内存量。

  • 将 DAG_PROCESSOR_STORAGE 替换为 DAG 处理器的磁盘可用空间量。

  • 将 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-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --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 \
    --dag-processor-count 1 \
    --dag-processor-cpu 0.5 \
    --dag-processor-memory 2GB \
    --dag-processor-storage 1GB \
    --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
      },
      "dagProcessor": {
        "count": DAG_PROCESSOR_COUNT,
        "cpu": DAG_PROCESSOR_CPU,
        "memoryGb": DAG_PROCESSOR_MEMORY,
        "storageGb": DAG_PROCESSOR_STORAGE
      },
      "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 中使用可延期运算符,则需要触发器。

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

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

  • TRIGGERER_CPU 用于指定触发器的 CPU 数量(以 vCPU 为单位)。允许使用的值有:0.5、0.75、1。

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

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

  • 将 DAG_PROCESSOR_COUNT 替换为 DAG 处理器数量。

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

  • 将 DAG_PROCESSOR_CPU 替换为 DAG 处理器的 CPU 数量(以 vCPU 为单位)。

  • 将 DAG_PROCESSOR_MEMORY 替换为 DAG 处理器的内存量(以 GB 为单位)。

  • 将 DAG_PROCESSOR_STORAGE 替换为 DAG 处理器所需的磁盘可用空间量(以 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_SMALL、ENVIRONMENT_SIZE_MEDIUM、ENVIRONMENT_SIZE_LARGE、ENVIRONMENT_SIZE_EXTRA_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
      },
      "dagProcessor": {
        "count": 1,
        "cpu": 0.5,
        "memoryGb": 2,
        "storageGb": 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.iam.gserviceaccount.com
"
    }
  }
}

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 字段用于指定环境中的触发器数量。

    • dag_processor.cpu 字段指定 DAG 处理器的 CPU 数量。

    • dag_processor.memory_gb 字段用于指定 DAG 处理器的内存量。

    • dag_processor.storage_gb 字段用于指定 DAG 处理器的磁盘可用空间量。

    • dag_processor.count 字段指定 DAG 处理器的数量。

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

    • 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
      }
      dag_processor {
        cpu = DAG_PROCESSOR_CPU
        memory_gb = DAG_PROCESSOR_MEMORY
        storage_gb = DAG_PROCESSOR_STORAGE
        count = DAG_PROCESSOR_COUNT
      }
      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 为单位)。

  • 将 DAG_PROCESSOR_CPU 替换为 DAG 处理器的 CPU 数量(以 vCPU 为单位)。

  • 将 DAG_PROCESSOR_MEMORY 替换为 DAG 处理器的内存量(以 GB 为单位)。

  • 将 DAG_PROCESSOR_STORAGE 替换为 DAG 处理器所需的磁盘可用空间量(以 GB 为单位)。

  • 将 DAG_PROCESSOR_COUNT 替换为 DAG 处理器数量。

  • 将 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_SMALL、ENVIRONMENT_SIZE_MEDIUM、ENVIRONMENT_SIZE_LARGE、ENVIRONMENT_SIZE_EXTRA_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.iam.gserviceaccount.com
"
    }

  }
}

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

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

在 Managed Airflow(第 3 代)中,从 Airflow build composer-3-airflow-2.10.2-build.13 和 composer-3-airflow-2.9.3-build.20 开始,提供高弹性环境。

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

  • 正好两个 Airflow 调度器

  • 至少两个触发器(如果触发器数量未设置为 0)

  • 至少两个 DAG 处理器

  • 两个 Web 服务器

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

控制台

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

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

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

    1. 点击 Custom(自定义)。

    2. 在调度器数量下拉列表中,选择 2。

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

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

  3. 在网络配置部分中:

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

    2. 如有必要,请指定其他网络参数。

gcloud

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

设置以下参数:

  • --enable-high-resilience
  • --enable-private-environment,以及专用 IP 环境的其他网络参数(如果需要)
  • --scheduler-count 至 2
  • --triggerer-count 到 0,或介于 2 到 10 之间的值。 如果您使用触发器,则在创建环境时还需要使用 --triggerer-cpu and--triggerer-memory 标志。

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

  • --min-workers 至 2 或更多

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --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.iam.gserviceaccount.com
"
    }

  }
}

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.iam.gserviceaccount.com
"
    }
  }
}

第 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-3-airflow-2.11.1-build.20 \
    --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-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --cloud-sql-preferred-zone us-central1-a

API

创建环境时,在 Environment > 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": {
      "zone": "us-central1-a"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

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

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

替换以下内容:

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

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

您可以通过以下方式配置 Managed Airflow(第 3 代)网络:

控制台

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

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

  3. 如果您想将环境连接到 VPC 网络,请在网络连接字段中选择一个网络连接。您还可以创建新的网络连接。如需了解详情,请参阅将环境连接到 VPC 网络。

  4. 如果您想创建专用 IP 环境,请在网络类型部分中选择专用 IP 环境选项。

  5. 如果您想添加网络标记,请参阅添加网络标记了解详情。

gcloud

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

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

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

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

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

示例(具有已连接 VPC 网络的专用 IP 环境)

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "SERVICE_ACCOUNT" \
    --enable-private-environment \
    --network NETWORK_ID \
    --subnetwork SUBNETWORK_ID \

将

  • 将 NETWORK_ID 替换为您的 VPC 网络 ID。
  • 将 SUBNETWORK_ID 替换为您的 VPC 子网 ID。

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

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

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

控制台

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

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

gcloud

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

  • --tags 指定应用于所有节点虚拟机的网络标记的英文逗号分隔列表。
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "SERVICE_ACCOUNT" \
    --tags TAGS

将

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

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --tags group1,production

API

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

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

将

  • 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"
      ],
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

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

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

  config {

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

将

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

示例:

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

  config {
    node_config {
      tags = ["group1","production"]
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

第 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-3-airflow-2.11.1-build.20 \
    --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-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --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 资源中指定 Web 服务器访问参数。

  • 如需允许从所有 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"
        }
      ]
    },
      "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

替换:

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

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

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

替换:

  • 将 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"
      }
    }

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

}

第 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-3-airflow-2.11.1-build.20 \
    --service-account "SERVICE_ACCOUNT" \
    --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-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --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",
      }
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

替换:

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

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

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }

  }
}

替换:

  • 将 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"
      }
    }

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

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

Managed Airflow(第 3 代)中的默认维护窗口按以下方式定义:

  • 所有时间均采用环境所在区域的本地时区,但忽略夏令时。
  • 周二、周三、周四和周五的维护窗口为 00:00:00 到 02:00:00。
  • 在周六、周日和周一,维护窗口为 00:00:00 到 04:00:00。

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

控制台

在创建环境页面上

  1. 找到维护窗口部分。

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

  3. 设置开始时间、天数和时长,以便:

    • 每周至少分配 12 小时的时间。

    • 您可以使用多个时间段,但每个时间段的时长必须至少为 4 小时。

    例如,每周一、周三和周五各 4 小时,即可提供所需的时间。

gcloud

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

  • --maintenance-window-start 设置自定义维护窗口的开始时间。
  • --maintenance-window-end 设置维护窗口的结束时间。
  • --maintenance-window-recurrence 设置维护窗口重复。
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "SERVICE_ACCOUNT" \
    --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。Managed Airflow 支持两种格式:

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

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

以下示例指定了一个 6 小时的维护窗口,该窗口在周三、周六和周日的 01:00 到 07:00(世界协调时间 [UTC])之间运行。忽略 2023 年 1 月 1 日的日期。

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

替换:

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

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

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

以下示例指定了周三、周六和周日 01:00 至 07:00 (UTC) 之间的 6 小时维护窗口。忽略 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"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

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

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

替换:

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

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

以下示例指定了周三、周六和周日 01:00 至 07:00 (UTC) 之间的 6 小时维护窗口。忽略 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.(可选)数据沿袭集成

数据沿袭是 Knowledge Catalog 的一项功能,可让您跟踪数据移动。

数据沿袭集成适用于所有版本的 Managed Airflow(第 3 代)。

如果满足以下条件,则会在新的 Managed Airflow 环境中自动启用数据沿袭集成:

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

  • Airflow 中未配置自定义谱系后端。

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

控制台

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

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

  2. 在 Knowledge Catalog 沿袭集成菜单中,选择停用与 Knowledge Catalog 沿袭的集成。

gcloud

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "SERVICE_ACCOUNT" \
    --disable-cloud-data-lineage-integration

将

  • ENVIRONMENT_NAME 替换为环境的名称。
  • LOCATION 替换为环境所在的区域。

示例:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --disable-cloud-data-lineage-integration

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

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

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

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

创建环境时,Managed Airflow 会自动为您的环境创建一个存储桶。

或者,您也可以指定项目中的自定义 Cloud Storage 存储桶。您的环境使用此存储桶的方式与自动创建的存储桶相同。

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

第 15 步:(可选)配置数据库保留

如果您在环境中启用数据库保留,Managed Airflow 会定期从 Airflow 数据库中移除与 DAG 执行和用户会话相关的记录,这些记录早于指定的时间段。系统始终会保留最新的 DAG 运行信息。

默认情况下,数据库保留功能处于启用状态。如需为新环境配置保留期限或停用数据库保留功能,请按照配置数据库保留政策中所述的说明操作。您也可以稍后配置数据库保留期限。

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

您可以为环境分配标签,以便根据这些标签细分已出账单费用。

控制台

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

  1. 点击添加标签。

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

gcloud

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

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "SERVICE_ACCOUNT" \
    --labels LABELS

替换:

  • LABELS,其中包含以逗号分隔的环境标签 KEY=VALUE 对列表。

例如:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-3-airflow-2.11.1-build.20 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --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"
  }

}

后续步骤