ディレクターと仲良くするために考えている1つのこと

Speee Advent Calendar 2015 - Qiitaの7日目です! 今回はエンジニアなら誰もが作ったことのあるクローラーの話をしようと考えてましたが、
法令とモラルの遵守から少し外れそうだったので、ちゃんとした記事にします!
クローラー話を期待してくださった方はまた次回ということで。
今回は業務上ジョブ管理が多いのでそれを効率化させてディレクターと仲良くなりたくて書きます

ジョブ????

一番有名なのはエンジニアが誰しもが知っているcronかなと思います。 これを設定することで、定期的にプログラムを実行してくれる素晴らしいやつ。 便利だけど、ちょっと難点が。。。もしかしたら僕の場合だけかもしれないですが。。。

とある業務上での会話

シーン①

Dir: hatappiさんこの定期的にまわっているの今日だけとめてもらっても良いですか?
hatappi: 了解しました!対応しておきます。(crontabの指定箇所をコメントアウトしておいて・・・・)
ーーーー 次の日 ーーーー
Dir: hatappiさん!!定期実行されるものが回ってないです!!確認いただけますか???
hatappi: やばい・・・コメントインしていない・・・

シーン②

Dir: hatappiさんクローラーの処理終わりそうですか?
hatappi: まだ終わってないですねぇ〜
Dir: hatappiさんクローラーの処理終わりそうですか?
hatappi: まだ終わってないですねぇ〜
Dir: hatappiさんクローラーの処理終わりそうですか?
hatappi: まだ終わってないですねぇ〜
DIr: hatappiさん・・・・

本題: Airflowの導入

Airflowとは?

宿泊施設仲介サービスairbnbオープンソースとして公開されたワークフロー管理サービス! pythonで作成されておりスケジュールはコンソールから登録!
このサービスはairbnb社がデータパイプラインのインフラに不満があり生まれたもので今ではすべてのパイプラインをairflowで行っているらしい

導入に関して

過去に導入で書いた記事があるのでこちらで
qiita.com

コード例

# airflowで定義されているものを読みこむ
from airflow import DAG
from airflow.operators import BashOperator
from datetime import datetime, timedelta

# 初期値の設定。実行ユーザーと開始日は最低でも設定しておかないと動かない。
default_args = {
  'owner': 'airflow',
  'start_date': datetime.today(),
}

# ジョブに関するインスタンスの作成 (schedule_intervalにcrontabの記載でスケジューリング)
dag = DAG('print_test', default_args=default_args, schedule_interval='0 0 * * *')

# タスクの定義
task1 = BashOperator(
    task_id='print_hoge',
    bash_command='echo "hoge"',
    dag=dag)

task2 = BashOperator(
    task_id='print_fuga',
    bash_command='echo "fuga"',
    dag=dag)

task3 = BashOperator(
    task_id='print_ping_pong',
    bash_command='echo "ping {{ params.ping }}"',
    params={'ping': 'pong'},
    dag=dag)

# タスクの依存関係を定義する。※下記はtask1が終わった後にtask2, task3の実行
task2.set_upstream(task1)
task3.set_upstream(task1)

感じたこと

  • CUIでタスク登録だがそれ以外は基本webから出来るので楽!
  • 単なるスケジューラーではなく、ワークフロー管理ということ!
    • どこまで進捗しているかなどがweb上で一目瞭然!時間なども計測できる。 f:id:karasumaru-hy:20151207203605p:plain
  • web上でlogが閲覧できるので、エンジニアでなくてもlogを確認できる。

Airflowを導入したディレクターとの未来!

シーン①

Dir: hatappiさん定期的にまわしているタスクですが今日だけ止めておきましたのご認識お願いします!
hatappi: はい!

シーン②

Dir: hatappiさん確認しましたが、クローラーの処理後少しですね!
hatappi: はい!

みんなハッピーになれる!!!!!!1

Airflow以外の選択肢

今回はAirflowを使用したが、他にも

この他にもまだまだある。正直どれが良いかは一長一短な感じ。全部試してないけど・・・ 大事なのは管理するのはシャルやコマンドの実行とスケジューリングでプログラムなどは書かない
これをすれば他に良いツールが出たときも移行しやすい。
これでちょっとでもディレクターとの開発・運用ライフを楽しみたいと思います!