Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Apache Airflow 具有一个 REST API 接口,可用于执行诸如以下任务:获取有关 DAG 运行和任务的信息、更新 DAG、获取 Airflow 配置、添加和删除连接以及列出用户。
如需查看将 Airflow REST API 与 Cloud Run 函数搭配使用的示例,请参阅 使用 Cloud Functions 函数触发 DAG。
Airflow REST API 版本
Cloud Composer 1 中提供了以下 Airflow REST API 版本:
- Airflow 1 使用实验性 REST API。
Airflow 2 使用稳定的 REST API。Airflow 已弃用实验性 REST API。
如果您通过 Airflow 配置替换来启用实验性 REST API,则仍然可以在 Airflow 2 中使用该 API,如下文所述。
准备工作
Enable the Cloud Composer API.
启用稳定的 Airflow REST API
Airflow 2
Airflow 2 中默认已启用稳定的 REST API。
Cloud Composer 使用自己的 API 身份验证后端,该后端与 Identity-Aware Proxy 集成。授权以 Airflow 提供的标准方式工作。当新用户通过 API 授权时,该用户的账号默认获得 Op
角色。
您可以通过替换以下 Airflow 配置选项来启用或停用稳定的 REST API 或更改默认用户角色:
部分 | 键 | 值 | 备注 |
---|---|---|---|
api
|
(Airflow 2.2.5 及更低版本)auth_backend (Airflow 2.3.0 及更高版本) auth_backends
|
airflow.composer.api.backend.composer_auth
|
要停用稳定的 REST API,请将
airflow.api.auth.backend.deny_all |
api
|
composer_auth_user_registration_role
|
Op
|
您可以指定任何其他角色。 |
Airflow 1
Airflow 1 不提供稳定的 REST API。您可以改用实验性 REST API。
启用实验性 Airflow REST API
Airflow 2
默认情况下,API 身份验证功能在实验性 API 中处于停用状态。Airflow 网络服务器会拒绝您发出的所有请求。
如需启用 API 身份验证功能和 Airflow 2 实验性 API,请替换以下 Airflow 配置选项:
部分 | 键 | 值 | 备注 |
---|---|---|---|
api
|
(Airflow 2.2.5 及更低版本)auth_backend (Airflow 2.3.0 及更高版本) auth_backends
|
airflow.api.auth.backend.default
|
默认值为 airflow.composer.api.backend.composer_auth 。 |
api
|
enable_experimental_api
|
True
|
默认值为 False 。 |
Airflow 1
默认情况下,Airflow 1.10.11 及更高版本中会停用 API 身份验证功能。 Airflow 网络服务器会拒绝您发出的所有请求。您需要使用请求来触发 DAG,因此请启用此功能。
如需在 Airflow 1 中启用 API 身份验证功能,请替换以下 Airflow 配置选项:
部分 | 键 | 值 | 备注 |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
默认值为 airflow.api.auth.backend.deny_all |
将此配置选项设置为 airflow.api.auth.backend.default
后,Airflow Web 服务器会接受所有 API 请求,无需进行身份验证。虽然 Airflow Web 服务器本身不需要进行身份验证,但它仍受 Identity-Aware Proxy 的保护,后者提供自己的身份验证层。
允许使用 Web 服务器访问权限控制机制对 Airflow REST API 进行 API 调用
调用方方法(根据用于调用 Airflow REST API 的方法) 可以使用 IPv4 或 IPv6 地址。记得取消屏蔽 使用 Web 服务器访问权限控制将 IP 流量传输到 Airflow REST API。
使用默认配置选项,即 All IP addresses have access (default)
如果您不确定调用 Airflow REST API 时所使用的 IP 地址
。
调用 Airflow REST API
获取 IAM 代理的 client_id
要向 Airflow REST API 端点发出请求,函数需要获得保护 Airflow 网络服务器的 IAM 代理的客户端 ID。
Cloud Composer 不直接提供此信息,而是向 Airflow 网络服务器发出未经身份验证的请求,并从重定向网址捕获此客户端 ID。
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
将 AIRFLOW_URL
替换为 Airflow 网页界面的网址。
在输出中,搜索 client_id
后面的字符串。例如:
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
将以下代码保存在名为 get_client_id.py
的文件中。填写 project_id
、location
和 composer_environment
的值,然后在 Cloud Shell 或本地环境中运行代码。
使用 client_id 调用 Airflow REST API
进行以下替换:
- 将
client_id
变量的值替换为上一步中获得的client_id
值。 - 将
webserver_id
变量的值替换为您的租户项目 ID,它是 Airflow 网页界面网址中.appspot.com
前面的部分。您已在上一步中获得 Airflow 网页界面网址。 指定您使用的 Airflow REST API 版本:
- 如果您使用稳定的 Airflow REST API,请将
USE_EXPERIMENTAL_API
变量设置为False
。 - 如果您使用实验性 Airflow REST API,则无需进行任何更改。
USE_EXPERIMENTAL_API
变量已设置为True
。
- 如果您使用稳定的 Airflow REST API,请将
使用服务账号访问 Airflow REST API
Airflow 数据库将电子邮件字段的长度限制为 64 个字符。服务账号有时包含长度超过 64 个字符的电子邮件地址。以常规方式无法为此类服务账号创建 Airflow 用户。如果此类服务账号没有 Airflow 用户,则访问 Airflow REST API 会导致 HTTP 错误 401 和 403。
要解决此问题,您可以为服务账号预先注册一个 Airflow 用户。为此,请使用 accounts.google.com:NUMERIC_USER_ID
作为用户名,并使用任意唯一的字符串作为电子邮件。
如需获取服务账号的
NUMERIC_USER_ID
,请运行以下命令:gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
替换:
- 将
SA_NAME
替换为服务账号名称。 - 将
PROJECT_ID
替换为项目 ID。
- 将
为该服务账号创建具有
Op
角色的 Airflow 用户:Airflow 界面
依次前往管理 > 用户,然后点击创建。您的 Airflow 用户必须具有
Admin
角色才能打开此页面。指定
accounts.google.com:NUMERIC_USER_ID
作为用户名。将NUMERIC_USER_ID
替换为上一步中获得的用户 ID。将唯一标识符指定为电子邮件。您可以使用任意的唯一字符串。
指定用户的角色。例如
Op
。确保选中有效复选框。
指定用户的名字和姓氏。您可以使用任何字符串。
点击保存。
gcloud
在 Airflow 2 中,运行以下 Airflow CLI 命令:
gcloud composer environments run ENVIRONMENT_NAME \ --location LOCATION \ users create -- \ -u accounts.google.com:NUMERIC_USER_ID \ -e UNIQUE_ID \ -f UNIQUE_ID \ -l - -r Op --use-random-password
替换:
ENVIRONMENT_NAME
替换为环境的名称。LOCATION
替换为环境所在的区域。NUMERIC_USER_ID
替换为在上一步中获取的用户 ID。UNIQUE_ID
替换为 Airflow 用户的标识符。您可以使用任意的唯一字符串。
为服务账号创建 Airflow 用户后,以该服务账号身份进行身份验证的调用方会被识别为预注册用户,并登录到 Airflow。
扩缩 Airflow REST API 组件
Airflow REST API 和 Airflow 界面端点在组件中运行, 即 Airflow Web 服务器。如果您大量使用 REST API,可以考虑 增加 CPU 和内存参数以调整 Airflow Web 服务器资源 预期负载