はじめに
Airflowを使ってバッチ処理だったり、CI/CDとかって何かうまいことできないのかなと、
試行錯誤しているこの頃です。
可用性の高い構成を考えた時、一番安くて簡単なのがGCPのCloudSQLに任せてしまうという方法があります。
この時に必要なノウハウについてまとめました。
まぁ、CloudComposer使いなよ。って話なんですが、少しでも安く済ませたいので、
実験してわかったことをまとめたいと思います。
まずはGCP-CloudSQLにDBインスタンスを作成する
GCPの左側の欄からSQLを選択し、インスタンスを立ち上げます。

ここでPostgreSQLを選択し、順番にしたがって行けばインスタンスが立ち上がります。
ユーザを登録&DB作成
Airflowから接続するためにはAirflowの専用DBを作成する必要があります。
ユーザ>ユーザを作成でpostgreSQLのユーザを作成することができます。
ユーザ名でairflowと入力し、passwordにとりあえずrootと入力しておきましょう。
(外からアクセスされることはありませんので大丈夫です。)

またDBも同様に設定しましょう。
データベース>データベースを作成から作成できます。
名前をairflowとしましょう。
外からのアクセスを許可する
Airflowを立ち上げる管理用のMasterNode(VMインスタンス)に静的アドレスを付与して
CloudSQLに接続できるIPをそれだけに設定します。
静的アドレスを設定するには、
VPCネットワーク>外部IPアドレス>静的アドレスを予約
でできます。あとはMasterNodeを指定するだけでOKです。
(静的アドレスは使用先を指定さえしていれば無料で使用可能です)
そのあと、SQL側で当該のIPを許可します。
SQL>接続>パブリックIP>ネットワークを追加で、許可するネットワークを追加できます。
名前と予約できた静的アドレスを入力し、許可します。
これでMasterNodeからPostgreSQLを読むことができます。
(CeleryでWorkerNodeを立てる場合でも同様の手順を踏んで許可してあげてください)
airflow.cfgをいじる
ひとまずSQLiteでairflow initdbまでできた状況を想定してます
airflow.cfgをいじって接続先DBをSQLiteからPostgreSQLに変更します。
[core]設定のsql_alchemy_connを以下のように書き換えます。
sql_alchemy_conn = postgresql://airflow:[password]@[DBインスタンスIP]/airflow
このあとairflow initdbを再度行い、成功すれば大丈夫です。
あとは勝手にairflowデータベースにmetadataを貯めていってくれます。
さいごに
実はこの方法でなくても接続する方法はあったりするかもしれません。
まぁでもわかりやすいのはこちらだと思うので、こちらを選択しました。
これからもAirflow関連記事をメモ書きとしてQiitaに投稿していきます。
よろしくお願いいたします。