概要
Apache AirflowのDBはデフォルトではSQLiteになっているが、これをPostgreSQLに切り替えてみる。
バージョン情報
- Python 3.6.5
- apache-airflow==1.10.1
- psycopg2==2.7.5
上記が既にインストールされている前提で作業を進める。
DBとUserの生成
下記のSQLを流してariflowデータベースとairflowユーザーを生成する。
CREATE USER airflow PASSWORD 'foo'; CREATE DATABASE airflow; GRANT ALL ON DATABASE airflow TO airflow;
設定ファイルの変更
Airflowの設定ファイルを書き換えてPostgreSQLを見るようにする。
文中のAIRFLOW_HOMEは適宜指定するか読み替えてください。
設定ファイルは下記に存在する。
$AIRFLOW_HOME/airflow.cfg
デフォルトでは下記のようにsqliteが指定されている。
sql_alchemy_conn = sqlite:////home/user/airflow/airflow.db
これをPostgreSQL用の記述に変更する。
sql_alchemy_conn = postgresql://airflow:foo@localhost/airflow
mysqlの場合はこちら
sql_alchemy_conn = mysql://airflow:foo@localhost/airflow
initdbの実行
$ airflow initdb
psqlで繋いでDBの状況を確認。
\c airflow \d Schema | Name | Type | Owner --------+-------------------------+----------+--------- public | alembic_version | table | airflow public | chart | table | airflow public | chart_id_seq | sequence | airflow public | connection | table | airflow public | connection_id_seq | sequence | airflow (以下略)
これでDBの切り替えは完了。
パスワードをcfgに入れないようにする
上記の記述ではcfgファイルにパスワードがベタ書きされてしまっている。cfgには書かずに環境変数で設定することも可能。
まずは sql_alchemy_conn の設定をコメントアウト。
# sql_alchemy_conn = postgresql://airflow:foo@127.0.0.1:54320/airflow
何も指定しないとデフォルトのSQLiteが選ばれる。
$ airflow initdb DB: sqlite:////home/user/airflow/airflow.db
環境変数で sql_alchemy_conn を環境変数で指定して実行する。
$ export AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql://airflow:foo@127.0.0.1:54320/airflow $ airflow initdb [2018-12-15 01:00:22,515] {__init__.py:51} INFO - Using executor SequentialExecutor DB: postgresql://airflow:***@127.0.0.1:54320/airflow
Exampleをロードしない
デフォルトの設定ではinitdbするとExampleなDagがずらずらとロードされるが、下記をFalseに変えるとロードされなくなる。
load_examples = True
書き換えてinitdbすればExamplesは消える。
$ airflow initdb
自分で定義したDAGだけが表示され、それ以外は消えていることが確認できる。
改定履歴
Author: Masato Watanabe, Date: 2019-02-21, 記事投稿