設定組態選項

當您第一次執行 Airflow 時,它會在您的 $AIRFLOW_HOME 目錄(預設為 ~/airflow)中建立一個名為 airflow.cfg 的檔案。這是為了讓您更容易「玩玩」airflow 組態。

然而,對於生產環境,建議您使用命令列產生組態

airflow config list --defaults

此命令將產生您可以複製到您的組態檔案並編輯的輸出。

它將包含所有預設組態選項,並附帶範例,且已妥善註解,因此您只需要取消註解並修改您想要變更的選項。這樣一來,您可以輕鬆追蹤所有您從預設值變更的組態選項,並且當 Airflow 發布新版本時,您可以輕鬆升級您的安裝,並在現有選項變更時自動使用其預設值。

您可以將其重新導向至您的組態檔案並進行編輯

airflow config list --defaults > "${AIRFLOW_HOME}/airflow.cfg"

您也可以使用環境變數設定選項,格式如下: AIRFLOW__{SECTION}__{KEY} (請注意雙底線)。

例如,metadata 資料庫連線字串可以像這樣在 airflow.cfg 中設定

[database]
sql_alchemy_conn = my_conn_string

或透過建立對應的環境變數

export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=my_conn_string

請注意,當 section 名稱中含有點時,您必須在設定環境變數時將其替換為底線。例如,考慮虛擬 section providers.some_provider

[providers.some_provider]
this_param = true
export AIRFLOW__PROVIDERS_SOME_PROVIDER__THIS_PARAM=true

您也可以在執行時透過將 _cmd 附加到 key 來衍生連線字串,如下所示

[database]
sql_alchemy_conn_cmd = bash_command_to_run

您也可以在執行時透過將 _secret 附加到 key 來衍生連線字串,如下所示

[database]
sql_alchemy_conn_secret = sql_alchemy_conn
# You can also add a nested path
# example:
# sql_alchemy_conn_secret = database/sql_alchemy_conn

這將從 Secret Backends (例如 Hashicorp Vault) 檢索組態選項。請參閱 Secrets Backends 以取得更多詳細資訊。

以下組態選項支援 _cmd_secret 版本

  • sql_alchemy_conn[database] section 中

  • fernet_key[core] section 中

  • broker_url[celery] section 中

  • flower_basic_auth[celery] section 中

  • result_backend[celery] section 中

  • password[atlas] section 中

  • smtp_password[smtp] section 中

  • secret_key[webserver] section 中

_cmd 組態選項也可以使用對應的環境變數來設定,與一般組態選項的方式相同。例如

export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD=bash_command_to_run

同樣地,_secret 組態選項也可以使用對應的環境變數來設定。例如

export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_SECRET=sql_alchemy_conn

注意

組態選項必須遵循 secrets backend 中定義的組態前綴命名慣例。這表示 sql_alchemy_conn 並非以連線前綴定義,而是以組態前綴定義。例如,它應該命名為 airflow/config/sql_alchemy_conn

這樣做的目的是為了不要將密碼以純文字檔案形式儲存在伺服器上。

所有組態選項的通用優先順序如下

  1. 設定為環境變數 (AIRFLOW__DATABASE__SQL_ALCHEMY_CONN)

  2. 設定為命令環境變數 (AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD)

  3. 設定為 secret 環境變數 (AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_SECRET)

  4. airflow.cfg 中設定

  5. airflow.cfg 中的命令

  6. airflow.cfg 中的 secret key

  7. Airflow 的內建預設值

注意

對於 Airflow 版本 >= 2.2.1、< 2.3.0,在某些情況下,Airflow 的內建預設值優先於 airflow.cfg 中的命令和 secret key。

您可以使用 airflow config list 命令檢查目前的組態。

如果您只想查看單一選項的值,您可以使用 airflow config get-value 命令,如下例所示。

$ airflow config get-value core executor
SequentialExecutor

注意

有關組態選項的更多資訊,請參閱組態參考

注意

有關 Python 和 Airflow 如何管理模組的詳細資訊,請參閱模組管理

注意

在所有 Airflow 組件中使用相同的組態。雖然並非每個組件都需要所有組態,但某些組態需要相同,否則它們將無法如預期般運作。一個很好的例子是 secret_key,它在 Webserver 和 Worker 上應該相同,以允許 Webserver 從 Worker 取得日誌。

webserver key 也用於授權對 Celery worker 的請求,以便在檢索日誌時使用。使用 secret key 產生的 token 具有短暫的到期時間 - 請確保您執行 airflow 組件的所有機器上的時間都已同步 (例如使用 ntpd),否則在存取日誌時可能會收到「forbidden」錯誤。

設定本機設定

某些 Airflow 組態是透過本機設定配置的,因為它們需要在 Airflow 初始化時執行的程式碼中進行變更。通常在詳細文件中會提到您可以在哪裡設定此類本機設定 - 這通常在 airflow_local_settings.py 檔案中完成。

您應該建立一個 airflow_local_settings.py 檔案,並將其放在 sys.path 中的目錄或 $AIRFLOW_HOME/config 資料夾中。(Airflow 在初始化時會將 $AIRFLOW_HOME/config 新增至 sys.path) 從 Airflow 2.10.1 開始,$AIRFLOW_HOME/dags 資料夾不再包含在初始化時的 sys.path 中,因此該資料夾中的任何本機設定都不會被匯入。請確保 airflow_local_settings.py 位於初始化期間 sys.path 的路徑中,例如 $AIRFLOW_HOME/config。有關此變更的更多背景資訊,請參閱 mailing list announcement

您可以在這裡看到此類本機設定的範例

您可以透過這種方式設定的範例設定

設定 Airflow Webserver 的 Flask 應用程式

Airflow 使用 Flask 來呈現 web UI。當您初始化 Airflow webserver 時,會使用基於 airflow.cfg 檔案的 webserver section 的預定義組態。但是,您可以透過將 flask 組態新增至 $AIRFLOW_HOME 目錄中的 webserver_config.py 檔案來覆寫這些設定並新增任何額外設定。此檔案會由 webserver 自動載入。

例如,如果您想要將速率限制策略變更為「移動視窗」,您可以將 RATELIMIT_STRATEGY 設定為 moving-window

您也可以直接增強/修改底層 flask 應用程式,因為 app context 會被推送到 webserver_config.py

from flask import current_app as app


@app.before_request
def print_custom_message() -> None:
    print("Executing before every request")

此條目是否有幫助?