Amazon MWAA (Amazon Managed Workflows for Apache Airflow) のタイムゾーンを東京に変更する。

記事タイトルとURLをコピーする

こんにちは。
技術課の山本です。

そろそろ雪が恋しいです。

Amazon MWAA を使用しているとき、DAGファイル内の"start_date"や"end_date"を日本時間で設定したいことがあると思います。
また、出力ログも可能な限り、日本時間の方がログを探す時にも便利です。
公式ドキュメントにタイムゾーンの変更方法の記述があったので、実際に試して、どこが日本時間になるのか見てみました。
参考:Amazon MWAA で DAG のタイムゾーンを変更する

今回は MWAA の v2.2.2 で検証しています。

Amazon MWAA のタイムゾーンを東京に変更する。

1. DAGを実行する時のタイムゾーンを東京に変更する。

以下に、DAGファイルの例を記載します。
pendulum というライブラリをインポートして local_tz 変数に東京のタイムゾーン情報を格納します。4〜7行目です。
DAGファイル内の"start_date"や"end_date"で時間を設定する際に、tzinfo に local_tz 変数を指定します。 11行目です。
これで "start_date"や"end_date"を日本時間で指定できるようになります。11行目は日本時間で指定しています。

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

# pendulum ライブラリを Import する。
import pendulum

# local_tz 変数にタイムゾーン情報(Asia/Tokyo)を格納する。
local_tz = pendulum.timezone("Asia/Tokyo")

default_args = {
    "owner": "tetsuya_yamamoto", 
    "depends_on_past": False,
    "start_date": datetime(2022, 9, 7, hour=21, minute=11, second=0, microsecond=0, tzinfo=local_tz), # tzinfo に local_tz 変数を指定する。

上のDAGを登録すると、UTC 時間の12時11分、すなわち 日本時間(JST)の21時11分にスケジュールされています。

なお、Airflow の管理画面の時間表示も、日本時間にできます。以下の画面を参考にしてください。管理画面の右上に設定ボタンがあります。

DAG実行ログ(タスクログ)のタイムゾーンも変わっています。

タイムゾーンが変わっています。

2022/09/28 追記。注意事項。

Airflow の 管理画面の時間表記を 日本時間に変更すると、JSTで出しているログの時間に更に9時間追加されるようです。
おそらく Airflow のバグなのでは、と考えています。 Airflow のリポジトリ に Issue を起票する予定です。
v2.3.4rc1 以降では修正されているようです。Amazon MWAA でも、今後バージョンアップのタイミングに修正されるでしょう。Webserver shows wrong datetime (timezone) in log #23796

Airflow の 管理画面で、表記を JST にすると、JSTで出しているログの時間に更に9時間追加されるバグ。

ちなみに、Airflow の 管理画面の時間表記が UTC の時には、ログは 日本時間になっています。ただし、末尾に "UTC" と表示が出ています。

2. Amazon MWAA の Web Server(管理画面) から出力するログのタイムゾーンを変更

Web Server (管理画面)から出力するログは Cloud Watch Logs に 「MWAAの環境名-WebServer」という形で出力します。

以下2つのファイルを用意します。

  • __init__.py
    • 中身は空で大丈夫です。
  • dag-timezone-plugin.py
import time
import os

os.environ['TZ'] = 'Asia/Tokyo'
time.tzset()

上の2ファイルを plugins.zip という zip ファイルに圧縮します。

plugins.zip
|-- __init__.py
|-- dag-timezone-plugin.py

zip ファイルを Amazon MWAA の S3 バケットにアップロードします。

aws s3 cp plugins.zip s3://<MWAAのバケット>/

Amazon MWAA の環境にプラグインファイルを追加します。

plugins.zip を追加します。

「更新中」から「利用可能」になるのを待ちます。

Amazon MWAA の Web Server から出力するログのタイムゾーンを変更できました。

まとめ

公式ドキュメントに沿うと、以下を日本時間に変更可能でした。

  • DAGファイルの"start_date"や"end_date"で設定する時間
  • DAG実行ログ(タスクログ)
  • Web Server(管理画面) から出力するログ

他のログについては、日本時間に変更する術はなさそうです。

山本 哲也 (記事一覧)

カスタマーサクセス部のエンジニア(一応)

好きなサービス:ECS、ALB

趣味:トレラン、登山(たまに)