0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Cloud Composer × Airflow】DAGのcron設定を理解する!

Last updated at Posted at 2025-05-23

はじめに

AirflowをCloud Composer上で運用する場合、DAGのスケジュールを cron 形式で指定する機会がほとんどです。

慣れていないと、、、

cronの書き方が毎回あやふやになる
「0 9 * * *」って、何時に実行だっけ?
Cloud ComposerだとUTCで動くんだっけ?

こうした疑問やつまづき、誰もが一度は経験するはずです。
本記事では、Cloud Composer × cron をテーマに、Airflowのスケジューリングを完全に理解できるようまとめます。


DAGの基本的なcron構文

Airflowでは、DAG定義に以下のように schedule_interval を指定します。

from airflow import DAG
from datetime import datetime

dag = DAG(
    dag_id="sample_dag",
    start_date=datetime(2024, 1, 1),
    schedule_interval="0 9 * * *",  # 毎日 9:00 に実行
)

cron構文の基本

分 時 日 月 曜日

例えば:

cron式 意味
0 9 * * * 毎日 午前9時(UTC)
30 15 * * 1 毎週月曜 午後3時30分(UTC)
0 */6 * * * 6時間おき(0時, 6時, 12時, 18時)

Cloud Composerとタイムゾーン

Cloud Composer/AirflowではcronがUTC基準で評価されます。

よくあるミス:

  • "0 9 * * *" → これは JSTの18:00 に実行されます!
  • JST(日本時間)で朝9時に動かしたいなら → "0 0 * * *"(UTCの0時=JSTの9時)

対応策①:UTCのまま書く(最も安定)

# 例:日本時間 9:00 に動かす
schedule_interval="0 0 * * *"  # UTCで0時

対応策②:DAG側で明示的にタイムゾーン指定(Airflow 2.x)

from pendulum import timezone

dag = DAG(
    dag_id="japan_dag",
    start_date=datetime(2024, 1, 1, tzinfo=timezone("Asia/Tokyo")),
    schedule_interval="0 9 * * *",  # JST 9時に実行される
)

Cloud Composer 2.x では pendulum ベースのタイムゾーン指定が安定します。


よく使うcronパターン集(JST対応)

実行したい時間(JST) cron式(UTC)
毎日 9:00 0 0 * * *
毎日 23:00 0 14 * * *
毎週月曜 8:00 0 23 * * 0
毎月1日 10:00 0 1 1 * *
平日毎日18:00 0 9 * * 1-5
毎時30分 30 * * * *
3時間ごと 0 */3 * * *

テスト時の注意点:start_dateとcatchup

dag = DAG(
    dag_id="test_dag",
    start_date=datetime(2024, 1, 1),
    schedule_interval="0 0 * * *",
    catchup=False  # ← これが重要!
)

catchup=True だと何が起こる?

  • DAG登録時から現在までの過去全実行スケジュール分が実行されてしまう
  • 初回テスト時は catchup=False を推奨!

Cloud Composerにおける注意点

✅ cron式はUTC前提で記述すること
✅ 必要に応じて start_datetzinfo をつけること
✅ 開発中のDAGでは catchup=False にする
✅ スケジュールの実行タイミングは**「終了時刻=そのスケジュール分のデータを処理する」という仕様**に注意!


おわりに

Airflow/Cloud ComposerでのDAG管理において、cronとタイムゾーンの理解は極めて重要です。
「日本時間で何時に動くんだっけ?」という疑問を、この記事で解消できれば幸いです。


参考リンク


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?