Cloud Composer 1 |Cloud Composer 2 |Cloud Composer 3
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 服务器配置网址。该网址不可自定义。
- Airflow 界面访问权限控制 适用于 Airflow 网页界面的(Airflow 基于角色的访问控制)功能 支持运行 Composer 版本的 Cloud Composer 环境 1.13.4 或更高版本、Airflow 1.10.10 或更高版本,以及 Python 3。
访问 Airflow 网页界面
Airflow Web 服务器服务会部署到 appspot.com
网域,并提供对 Airflow 网页界面的访问权限。Cloud Composer 1 会根据用户身份和为用户定义的 IAM 政策绑定来提供对该界面的访问权限。Cloud Composer 1 使用 Identity-Aware Proxy
。
创建新的 Cloud Composer 环境后,该网页界面最长需要 25 分钟才能完成托管并可供访问。
从 Google Cloud 控制台访问网页界面
如需通过 Google Cloud 控制台访问 Airflow 网页界面,请执行以下操作:
在 Google Cloud 控制台中,前往环境页面。
在 Airflow 网络服务器列中,点击与您的环境对应的 Airflow 链接。
使用具有相应权限的 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 加载,请执行以下操作:
停用 DAG 序列化。异步 DAG 加载不能与 DAG 序列化一起使用。使用
async_dagbag_loader
和store_serialized_dags
Airflow 配置选项会导致 HTTP 503 错误,并会破坏您的环境。替换以下 Airflow 配置选项:
部分 键 值 备注 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 API 或 restart-web-server
gcloud 命令重启 Web 服务器:
gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
--location=LOCATION
配置 Web 服务器网络访问权限
Airflow Web 服务器访问参数不取决于您的应用类型, 环境您可以单独配置网络服务器访问权限。例如,专用 IP 环境仍然可以通过互联网访问 Airflow 界面。
无法使用专用 IP 配置允许的 IP 范围 地址。
控制台
在 Google Cloud 控制台中,前往环境页面。
在环境列表中,点击您的环境名称。环境详情页面会打开。
转到环境配置标签页。
在网络配置部分,找到 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 界面。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
构建 [
environments.patch
][api-patch] API 请求。在此请求中:
在参数
updateMask
中,指定config.webServerNetworkAccessControl
掩码。在请求正文中,指定 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 界面。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"
}
}
}