Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Apache Airflow 具有 REST API 介面,可用來執行各種工作,例如取得 DAG 執行和工作相關資訊、更新 DAG、取得 Airflow 設定、新增及刪除連線,以及列出使用者。
如需搭配使用 Airflow REST API 與 Cloud Run 函式的範例,請參閱「使用 Cloud Run 函式觸發 DAG」。
Airflow REST API 版本
- Airflow 1 使用實驗性 REST API。
- Airflow 2 使用穩定版 REST API。 Airflow 已淘汰實驗性 REST API。
- 如果您透過 Airflow 設定覆寫啟用實驗性 REST API,還是可以在 Airflow 2 中使用該 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 網頁伺服器就會接受所有 API 要求,無需驗證。
即使 Airflow 網路伺服器本身不需要驗證,Cloud Composer 仍會使用自己的驗證層加以保護,並與 Identity-Aware Proxy 整合。
使用網路伺服器存取權控管,允許對 Airflow REST API 進行 API 呼叫
視呼叫 Airflow REST API 的方法而定,呼叫端方法可以使用 IPv4 或 IPv6 位址。請記得使用網路伺服器存取權控管,解除封鎖 Airflow REST API 的 IP 流量。
如果您不確定呼叫 Airflow REST API 時會使用哪些 IP 位址,請使用預設設定選項 All IP addresses have access (default)
。
呼叫 Airflow REST API
取得 IAM 代理程式的 client_id
如要向 Airflow REST API 端點提出要求,您必須為函式提供保護 Airflow 網路伺服器的 IAM Proxy 用戶端 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
在 2.3.0 之前的 Airflow 版本中,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 UI
依序前往「管理」>「使用者」,然後按一下「建立」。您的 Airflow 使用者必須具備
Admin
角色,才能開啟這個頁面。指定
accounts.google.com:NUMERIC_USER_ID
做為使用者名稱。將NUMERIC_USER_ID
替換為上一個步驟中取得的使用者 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 使用者的 ID。你可以使用任何不重複的字串。
為服務帳戶建立 Airflow 使用者後,經過服務帳戶驗證的呼叫端會被視為預先註冊的使用者,並登入 Airflow。
擴充 Airflow REST API 元件
Airflow REST API 和 Airflow UI 端點會在 Airflow 網路伺服器中執行。如果大量使用 REST API,請根據預期負載,考慮增加 Airflow 網頁伺服器可用的 CPU 和記憶體。