Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Apache Airflow 包含一個稱為 Airflow UI 的網頁使用者介面,可用來管理 Airflow DAG、查看 DAG 執行記錄、監控 Airflow 及執行管理動作。
關於 Airflow 網路伺服器
每個 Cloud Composer 環境都有一個執行 Airflow UI 的網路伺服器。網路伺服器是 Cloud Composer 環境架構的一部分。
網路伺服器會剖析 dags/
資料夾中的 DAG 定義檔,且必須能夠存取 DAG 的資料和資源,才能載入 DAG 並處理 HTTP 要求。
網路伺服器會每 60 秒重新整理 DAG,這是 Cloud Composer 中的預設 worker_refresh_interval
。如果網路伺服器無法在重新整理間隔內剖析所有 DAG,就可能發生網路伺服器錯誤。
如果 DAG 檔案數量龐大,或是載入 DAG 檔案的工作負載不輕鬆,就可能會超過 60 秒。為確保無論 DAG 載入時間為何,網路伺服器仍可供存取,您可以設定非同步 DAG 載入,以便在背景中以預先設定的間隔剖析及載入 DAG (適用於 composer-1.7.1-airflow-1.10.2
以上版本)。這項設定也能縮短 DAG 重新整理時間。
除了超過 worker 重新整理間隔以外,網路伺服器在大多數情況下都能順利處理 DAG 載入失敗。造成網路伺服器當機或結束的 DAG 可能會導致瀏覽器中傳回錯誤。詳情請參閱「DAG 疑難排解」一文。
如果 DAG 剖析作業導致網頁伺服器問題持續發生,建議您使用非同步 DAG 載入功能。
事前準備
您必須具備可查看 Cloud Composer 環境的角色。詳情請參閱「存取權控管」。
建立環境時,Cloud Composer 會為執行 Airflow UI 的網路伺服器設定網址。這個網址不可自訂。
- 針對執行 Composer 1.13.4 以上版本、Airflow 1.10.10 以上版本和 Python 3 的 Cloud Composer 環境,系統支援 Airflow 使用者介面的 Airflow 使用者介面存取權控管機制 (Airflow 角色式存取權控管機制) 功能。
存取 Airflow UI
Airflow 網路伺服器會部署至 appspot.com
網域,並提供 Airflow UI 的存取權。Cloud Composer 1 會根據使用者身分和為使用者定義的 IAM 政策繫結,提供介面的存取權。Cloud Composer 1 會使用 Identity-Aware Proxy 來達到這項目的。
建立新的 Cloud Composer 環境後,系統最多需要 25 分鐘才能完成 UI 託管程序,為您提供必要的存取權限。
透過 Google Cloud 主控台存取 Airflow UI
如要透過 Google Cloud 主控台存取 Airflow UI,請按照下列步驟操作:
前往 Google Cloud 控制台的「Environments」頁面。
在「Airflow 網路伺服器」欄中,按一下環境的「Airflow」連結。
使用具備適當權限的 Google 帳戶登入。
使用 Google Cloud CLI 取得 Airflow UI 網址
您可以透過任何網路瀏覽器開啟 Airflow UI。如要取得 Airflow UI 的網址,請在 Google Cloud CLI 中執行下列指令:
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION
更改下列內容:
ENVIRONMENT_NAME
:環境名稱。LOCATION
:環境所在的地區。
gcloud
指令會顯示 Cloud Composer 環境的屬性,包括 Airflow UI 的網址。該網址會列為 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 載入功能時,您可以使用較長的重新整理間隔。
重新啟動網路伺服器
在偵錯或排解 Cloud Composer 環境的問題時,重新啟動 Airflow 網路伺服器可能可解決部分問題。您可以使用 restartWebServer API 或 Google Cloud CLI 中的 restart-web-server
指令重新啟動網頁伺服器:
gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
--location=LOCATION
更改下列內容:
ENVIRONMENT_NAME
:環境名稱。LOCATION
:環境所在的地區。
設定網路伺服器網路存取權
Airflow 網路伺服器存取參數不依賴環境的網路設定。請改為個別設定網路伺服器存取權。舉例來說,私人 IP 環境仍可透過網際網路存取 Airflow UI。
您無法將允許的 IP 範圍設為私人 IP 位址。
主控台
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
前往「環境設定」分頁。
在「Network configuration」部分中,找出「Web server access control」項目,然後按一下「Edit」。
在「網路伺服器網路存取權控管」對話方塊中:
如要允許從所有 IP 位址存取 Airflow 網路伺服器,請選取「允許所有 IP 位址傳出的存取要求」。
如要只限制存取特定 IP 範圍,請選取「只允許來自特定 IP 位址的存取要求」。在「IP 範圍」欄位中,請以 CIDR 標記法指定 IP 範圍。在「Description」欄位中,指定這個範圍的選用說明。如要指定多個範圍,請按一下「新增 IP 範圍」。
如要禁止所有 IP 位址存取,請選取「只允許來自特定 IP 位址的存取要求」,然後按一下空白範圍項目旁的「刪除項目」。
gcloud
更新環境時,下列引數會控制網路伺服器存取參數:
--web-server-allow-all
可透過所有 IP 位址存取 Airflow。這是預設選項。--update-web-server-allow-ip
會限制只允許特定來源 IP 範圍的存取。如要指定多個 IP 範圍,請多次使用這個引數。--web-server-deny-all
會禁止所有 IP 位址的存取權。
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION
更改下列內容:
ENVIRONMENT_NAME
:環境名稱。LOCATION
:環境所在的地區。WS_IP_RANGE
:可存取 Airflow UI 的 IP 範圍,以 CIDR 標記法表示。WS_RANGE_DESCRIPTION
:IP 範圍的說明。
範例:
gcloud composer environments update example-environment \
--location us-central1 \
--update-web-server-allow-ip ip_range=192.0.2.0/24,description="example range" \
--update-web-server-allow-ip ip_range=192.0.4.0/24,description="example range 2"
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 UI 的 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": "example range"
},
{
"value": "192.0.4.0/24",
"description": "example range 2"
}
]
}
}
}
Terraform
在 allowed_ip_range
區塊的 web_server_network_access_control
中,指定可存取網路伺服器的 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 UI 的 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 = "example range"
},
allowed_ip_range {
value = "192.0.4.0/24"
description = "example range 2"
}
}
}