访问 Apache Airflow 网页界面

Cloud Composer 1 | Cloud Composer 2

Apache Airflow 包含一个网页界面 (UI),可用于管理工作流 (DAG)、管理 Airflow 环境以及执行管理操作。例如,您可以使用该网页界面来查看 DAG 的进度,设置新的数据连接,或查看来自先前 DAG 运行的日志。

Airflow Web 服务器

每个 Cloud Composer 环境都有一个 Web 服务器,用于运行 Airflow 网页界面。Web 服务器是 Cloud Composer 环境架构的一部分。

Web 服务器会解析 dags/ 文件夹中的 DAG 定义文件,因此必须能够访问 DAG 的数据和资源才能加载 DAG 和处理 HTTP 请求。

Web 服务器会每 60 秒刷新一次 DAG,这是 Cloud Composer 中的默认 worker_refresh_interval。如果 Web 服务器无法在此刷新间隔内解析所有 DAG,则可能会发生 Web 服务器错误。

如果存在大量 DAG 文件,或加载 DAG 文件涉及重要工作负载,则 DAG 加载过程可能会超过 60 秒。为确保 Web 服务器无论 DAG 加载时间如何始终都可以访问,您可以配置异步 DAG 加载,以按预先配置的间隔在后台解析和加载 DAG(适用于 composer-1.7.1-airflow-1.10.2 及更高版本)。此配置还有助于减少 DAG 刷新时间。

除了超出工作器刷新间隔的情况外,Web 服务器在大多数情况下都能正常处理 DAG 加载故障。如果 Web 服务器因某些 DAG 而崩溃或退出,则浏览器可能返回错误。如需了解相关信息,请参阅排查 DAG 问题

如果由于 DAG 解析仍然存在 Web 服务器问题,建议您使用异步 DAG 加载。

准备工作

  • 您必须具有可以查看 Cloud Composer 环境的角色。如需了解详情,请参阅访问权限控制

  • 在创建环境期间,Cloud Composer 会为运行 Airflow 网页界面的 Web 服务器配置网址。该网址不可自定义。

  • 运行 Composer 1.13.4 或更高版本、Airflow 1.10.10 或更高版本以及 Python 3 的 Cloud Composer 环境支持 Airflow 网页界面的 Airflow 界面访问权限控制(Airflow 基于角色的访问权限控制)功能。

访问 Airflow 网页界面

Airflow Web 服务器服务会部署到 appspot.com 网域,并提供对 Airflow 网页界面的访问权限。Cloud Composer 1 根据用户身份和为用户定义的 IAM 政策绑定提供对界面的访问权限。Cloud Composer 1 使用 Identity-Aware Proxy 来实现此目的。

创建新的 Cloud Composer 环境后,该网页界面最长需要 25 分钟才能完成托管并可供访问。

从 Google Cloud 控制台访问网页界面

如需从 Google Cloud 控制台访问 Airflow 网页界面,请执行以下操作:

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

    转到“环境”

  2. Airflow 网络服务器列中,点击与您的环境对应的 Airflow 链接。

  3. 使用具有相应权限的 Google 账号登录。

限制对 Airflow Web 服务器的访问

Composer 环境可让您限制对 Airflow Web 服务器的访问:

  • 您可以禁止所有访问,也可以允许从特定 IPv4 或 IPv6 外部 IP 范围进行访问。
  • 无法使用专用 IP 地址配置允许的 IP 范围。

通过 gcloud 命令行工具检索网页界面网址

您可以通过任何网络浏览器访问 Airflow 网页界面。如需获取该网页界面的网址,请输入以下 gcloud 命令:

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION

请替换以下内容:

  • ENVIRONMENT_NAME:您的环境的名称。
  • LOCATION:环境所在的区域。

gcloud 命令显示了 Cloud Composer 环境的属性,包括该网页界面的网址。该网址被列为 airflowUri

config:
  airflowUri: https://example-tp.appspot.com

配置异步 DAG 加载

启用异步 DAG 加载时,Airflow 网络服务器会创建一个新进程。该进程会在后台加载 DAG,按 dagbag_sync_interval 选项定义的时间间隔发送新加载的 DAG,然后进入睡眠状态。

系统会定期唤醒该进程以重新加载 DAG,时间间隔由 collect_dags_interval 选项定义。

如需启用异步 DAG 加载,请执行以下操作:

  1. 停用 DAG 序列化。异步 DAG 加载不能与 DAG 序列化一起使用。使用 async_dagbag_loaderstore_serialized_dags Airflow 配置选项会导致 HTTP 503 错误,并会破坏您的环境。

  2. 替换以下 Airflow 配置选项:

    部分 Notes
    webserver async_dagbag_loader True 默认为 False
    webserver collect_dags_interval 30 默认值为 30。如需加快刷新速度,请使用较小的值。
    webserver dagbag_sync_interval 10 默认为 10
    webserver worker_refresh_interval 3600 默认值为 60。使用异步 DAG 加载时,您可以使用较长的刷新间隔。

重启 Web 服务器

调试或排查 Cloud Composer 环境时,部分问题可以通过重启 Airflow Web 服务器来解决。您可以使用 restartWebServer APIrestart-web-server gcloud 命令重启 Web 服务器:

gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
  --location=LOCATION

配置 Web 服务器网络访问权限

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

无法使用专用 IP 地址配置允许的 IP 范围。

控制台

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

    转到“环境”

  2. 在环境列表中,点击您的环境名称。环境详情页面会打开。

  3. 转到环境配置标签页。

  4. 网络配置部分中,找到 Web 服务器访问权限控制项,然后点击修改

  5. Web 服务器网络访问权限控制对话框中,执行以下操作:

    • 如需允许从所有 IP 地址访问 Airflow Web 服务器,请选择允许从所有 IP 地址访问

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

    • 如需禁止从所有 IP 地址访问,请选择仅允许从特定 IP 地址访问,然后点击空范围条目旁边的删除项

gcloud

更新环境时,以下参数用于控制 Web 服务器访问参数:

  • --web-server-allow-all 支持从所有 IP 地址访问 Airflow。这是默认选项。

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

  • --web-server-deny-all 禁止从所有 IP 地址访问。

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

请替换以下内容:

  • ENVIRONMENT_NAME:您的环境的名称。
  • LOCATION:环境所在的区域。
  • WS_IP_RANGE:可以访问 Airflow 界面的 IP 范围(采用 CIDR 表示法)。
  • WS_RANGE_DESCRIPTION:IP 范围的说明。

示例:

gcloud composer environments update 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

  1. 构建 [environments.patch][api-patch] API 请求。

  2. 在此请求中:

    1. updateMask 参数中,指定 config.webServerNetworkAccessControl 掩码。

    2. 在请求正文中,指定必须如何保存 Airflow 任务日志:

      • 如需允许从所有 IP 地址访问 Airflow,请指定空的 config 元素(不得存在 webServerNetworkAccessControl 元素)。

      • 如需仅允许特定 IP 范围进行访问,请在 allowedIpRanges 中指定一个或多个范围。

      • 如需禁止访问所有 IP 地址,请指定空的 webServerNetworkAccessControl 元素。webServerNetworkAccessControl 元素必须存在,但不得包含 allowedIpRanges 元素。

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

请替换以下内容:

  • WS_IP_RANGE:可以访问 Airflow 界面的 IP 范围(采用 CIDR 表示法)。
  • WS_RANGE_DESCRIPTION:IP 范围的说明。

示例:

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    }
  }
}

Terraform

allowed_ip_range 块的 web_server_network_access_control 中,指定可以访问 Web 服务器的 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"
      }

    }

  }
}

您需要在其中:

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

    }
}

后续步骤