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 檔案的工作負載不小,載入 DAG 的時間就可能超過 60 秒。為確保網路伺服器在 DAG 載入期間仍可存取,您可以設定非同步 DAG 載入,在背景以預先設定的時間間隔剖析及載入 DAG (適用於 composer-1.7.1-airflow-1.10.2
以上版本)。這項設定也能縮短 DAG 重新整理時間。
除了超過工作站重新整理間隔外,網路伺服器在大多數情況下都能順利處理 DAG 載入失敗問題。造成網路伺服器當機或結束的 DAG 可能會導致瀏覽器中傳回錯誤。詳情請參閱「DAG 疑難排解」。
如果 DAG 剖析作業持續導致網頁伺服器發生問題,建議您使用非同步 DAG 載入。
事前準備
您必須具備可查看 Cloud Composer 環境的角色。 詳情請參閱存取權控管一文。
建立環境時,Cloud Composer 會為執行 Airflow UI 的網路伺服器設定網址。這個網址不可自訂。
- 如果 Cloud Composer 環境執行 Composer 1.13.4 以上版本、Airflow 1.10.10 以上版本和 Python 3,系統支援 Airflow 使用者介面的存取權控管 (Airflow 角色型存取權控管) 功能。
存取 Airflow UI
Airflow 網路伺服器會部署至 appspot.com
網域,並提供 Airflow UI 的存取權。Cloud Composer 1 會根據使用者身分和為使用者定義的 IAM 政策繫結,提供介面存取權。Cloud Composer 1 使用 Identity-Aware Proxy 達成此目的。
建立新的 Cloud Composer 環境後,使用者介面最多需要 25 分鐘才能完成託管程序,為您提供必要的存取權限。
從 Google Cloud 控制台存取 Airflow 使用者介面
如要從 Google Cloud 控制台存取 Airflow 使用者介面,請按照下列步驟操作:
前往 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 composer environments restart-web-server ENVIRONMENT_NAME \
--location=LOCATION
更改下列內容:
ENVIRONMENT_NAME
:環境名稱。LOCATION
:環境所在的區域。
設定網路伺服器的網路存取權
Airflow 網路伺服器存取參數與環境的網路設定無關。您必須另外設定網路伺服器存取權。 舉例來說,私人 IP 環境仍可從網際網路存取 Airflow UI。
您無法將允許的 IP 範圍設定為私人 IP 位址。
主控台
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。 「環境詳細資料」頁面隨即開啟。
前往「環境設定」分頁。
在「網路設定」部分中,找出「網頁伺服器存取權控管」項目,然後按一下「編輯」。
在「網路伺服器網路存取權控管」對話方塊中:
如要允許所有 IP 位址存取 Airflow 網路伺服器,請選取「允許所有 IP 位址傳出的存取要求」。
如要只允許特定 IP 範圍存取,請選取「只允許來自特定 IP 位址的存取要求」。在「IP range」(IP 範圍) 欄位中,以 CIDR 標記法指定 IP 範圍。在「說明」欄位中,指定這個範圍的說明 (選填)。如要指定多個範圍,請按一下「新增 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"
}
}
}