iMind Developers Blog

iMind開発者ブログ

Apache AirflowのDBをPostgreSQLに切り替える

概要

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

f:id:imind:20181215010457p:plain

自分で定義したDAGだけが表示され、それ以外は消えていることが確認できる。

改定履歴

Author: Masato Watanabe, Date: 2019-02-21, 記事投稿