こんにちは。サーバーサイドを担当している橋本です。
この記事は Enigmo Advent Calendar 2021 の23日目の記事です。
普段は Ruby on Railsを書くことが多いですが、とあるプロジェクトでAirflowを使った既存バッチの性能改善を行いました。プロジェクトはAirflowについて全く知らない状態からスタートして学ぶことが多かったので、この記事でAirflowの紹介と開発の感想を書いていきたいと思います。
Airflowとは?
Airflowとはワークフローの管理ツールで、あるタスクを実行したら次のタスクを実行するといった形で一連のタスクを管理するものになります。Airflowではjobの実行順や依存関係をDAGで定義していて、DAG自体はPythonで作成されています。
簡単にDAGのコードのご紹介です。(環境構築は省略させていただきます。)
下記のプログラムは 文字列をprintするタスクを順番に実行するものです。DAG
で実行時刻やDAGの名前の設定をします。PythonOperator
を使ってタスクを定義し、一番下の行の execute_task1 >> execute_task2
で実行するタスクの順番を定義します。
import airflow from airflow.operators.python_operator import PythonOperator from airflow.models import DAG from datetime import datetime args = { 'owner': 'airflow' } dag = DAG( dag_id = 'advent_calendar_tasks', default_args = args, schedule_interval = '0 0 * * *' ) def task1(): print('task1') def task2(): print('task2') execute_task1 = PythonOperator( task_id = 'execute_task1', retries = 2, python_callable = task1, dag = dag) execute_task2 = PythonOperator( task_id = 'execute_task2', retries = 2, python_callable = task2, dag = dag) execute_task1 >> execute_task2
管理画面にアクセスするとDAGの情報を見ることができ、実際に実行することもできます。
使ってみてよかったこと
モニタリングがGUIから管理できる
DAGのスケジュールや実行状況を同一画面で見ることができるので、モニタリングがしやすかったです。また、DAGの実行やスケジュールの on/offの設定も管理画面からできるので、コマンドを実行する手間を減らすことができたのが便利でした。
タスク単位で確認できる
管理画面のDAGの詳細画面ではタスクを個別で見ることができます。プログラム作成時にタスクを上手く分割すればDAGが実行するタスクを簡単に確認できます。
タスク実行に便利なライブラリが提供されている
実際のタスクではSQLを実行したりファイルをアップロードする必要があると思いますが、DAGで使用できるライブラリが提供されています。プロジェクトではFTPをアップロードするために FTPHook
というライブラリを使いましたが、Pythonで標準で使える ftplib
よりも簡単にFTPを扱うことができました。
使ってみて難しかったこと
Pythonに不慣れだったこと
プロジェクトではRuby on Rails => Pythonへ刷新したのですが、普段はRubyを書いているのでPythonに慣れるのが大変でした。
セキュアな情報の設定が初見だとわかりにくかったこと
Airflowではセキュアな情報をConnectionsで管理していますが、最初はDAGに接続情報を書いてしまいました。あらかじめドキュメントを読んでAirflowのコンセプトを理解する必要があると感じました。
まとめ
ここまでAirflowの紹介と感想を書きましたが、開発中は学ぶことが多く新鮮な気持ちで開発ができました。 明日の記事の担当は インフラエンジニアの加藤さんです。お楽しみに。
株式会社エニグモ すべての求人一覧