上一篇我們大致看過了 Airflow 的架構,這篇會帶大家暸解,如果要調整架構設定時,可以到哪裡調整。
設定檔
Airflow 的設定檔相當的繁雜,以 airflow initdb
創造出來的設定檔就高達 990 行,所以這篇只會帶大家看一些比較常見的設定。
首先打開設定檔,會發現設定檔分成了幾個部分,像是 core, debug, webserver, smtp 等等,這些在 airflow.cfg 裡面會被標示成像下面的格式,接下來我們就分區塊看吧。
[core]
[debug]
[webserver]
[smtp]
...
core
core 是 Airflow 設定參數的核心,也是每個 Component 都會去讀取的值,所以會記錄像是 Metadata Database, DAG 資料夾位置、Plugins 資料夾位置等每個 Component 都需要知道的設定。
dags_folder
: 存放 DAG 的資料夾,在 local 一般會是~/airflow/dags
對應的絕對路徑,不過現在部署幾乎都會用 Docker,所以要記得改成 Docker 內的絕對路徑。plugins_folder
: 存放 Operator 的資料夾,與 dags_folder 類似,不過在 local 一般會是~/airflow/plugins
對應的絕對路徑,到了 Docker 一樣要記得改變路徑。sql_alchemy_conn
: Database 的連線位置,如果沒有動過設定檔的話,應該會是用 SQLite 連到~/airflow/airflow.db
的位置,SQLite 在 Airflow 裡一般只用於開發,到了線上環境要記得換成其他 Database。base_log_folder
: 存放 log 的資料夾,一樣要是絕對路徑。- Remote Logging
remote_logging
: 是否開啟遠端紀錄 Log,目前支援 AWS S3, Google Cloud Storage 或是 Elastic Search。remote_log_conn_id
: 如果要開啟的話,要記得先到 Connections 頁面創建一個 conn_id,以 s3 為例,可以在 Connections 設定一個 conn_id 為 s3_conn,對應的值如下:- Conn Id: s3_conn
- Conn Type: S3
- Extra: {"aws_access_key_id":"your_aws_key_id", "aws_secret_access_key": "your_aws_secret_key"}
remote_base_log_folder
: 與base_log_folder
類似,也就是在遠端 log 要存放的相對位置。
executor
: 預設的 Executor 是SequentialExecutor
,如上一篇架構裡的 Executor 所說明的,我們可以換成我們想要的 Executor,像是LocalExecutor
,CeleryExecutor
或是KubernetesExecutor
。load_examples
: 在線上環境,如果不想看到 Airflow 預設的 Example DAG,可以透過這個參數關掉。
cli
在 local 如果我們想透過 cli 跟線上環境溝通要怎麼做呢?可以改變 cli 的設定值。
api_client
: 有兩種,airflow.api.client.local_client
及airflow.api.client.json_client
,如果選擇 local_client,Airflow 會直接跟設定檔裡設定的 Database 溝通;如果選json_client
,Airflow 會跟endpoint_url
所設定的 WebServer 溝通。endpoint_url
: Airflow WebServer 的 url。
debug
debug 只有一個設定值 fail_fast
,如果要啟用的話,記得把 executor
改成 DebugExecutor
,這個設定值會讓 DAG 裡面只要有一個 Task 狀態是 failed,整個 DAG 的狀態也會變成 failed。
webserver
base_url
:base_url
雖然放在 webserver,但其實跟 email 比較有關係,第二篇實作 DAG 時,有提到 Default Args 裡面的email_on_failure
可以在 Task 失敗時自動寄信,Airflow 信中的內容會包括 WebServer 的位置,而這個位置就是base_url
。- SSL: 可以透過
web_server_ssl_cert
及web_server_ssl_key
設定 SSL 憑證。 secret_key
: 如果在線上環境,也要記得指定secret_key
,因為 Airflow 的 WebServer 是使用 Flask 實現的,Flask 會透過secret_key
來對 cookies 簽名。
smtp
可以在 smtp 裡面設定 Airflow 寄信的相關設定。
使用環境變數更改設定檔
有了 Airflow 設定檔分成幾個部分的認識之後,我們可以來看看 Airflow 如何透過環境變數取代設定檔裡面的值,畢竟我們不太可能直接用明文把一些密碼寫在 Airflow,所以 Airflow 提供了透過環境變數傳遞設定值的做法,格式上會像 AIRFLOW__{which part}__{which key}
,開頭是 AIRFLOW,接下來兩條底線,中間代表是設定檔的哪個部分,再兩條底線,最後是設定值的 Key,如果要設定 core 裡面的 sql_alchemy_conn
,就會像是:
export AIRFLOW__CORE__SQL_ALCHEMY_CONN=your database
總結
這次只介紹幾個 Airflow 中比較常會碰到的設定,但 Airflow 還有很多其他設定,像是上線後可能需要使用者登入才能進去 Airflow 的頁面,這部分 Airflow 就提供了內建的 Authenticate、LDAP 或者甚至是自己的 Authentication 後台,另外像是 Executor 其實也有很多設定,明天我們將 Airflow 部署在 Kubernetes 時,會在看 KubernetesExecutor
相關的設定。