Posted at

AWS Lambdaのタイムゾーンを変更する(コード内での変更は反映されない)


Lambdaのタイムゾーン

AWS Lambdaでは 東京(ap-northeast-1)リージョンであっても タイムゾ-ンはUTCになります。


タイムゾーンと時間を表示する例

import datetime

import os

def lambda_handler(event, context):
now_dt = datetime.datetime.now()

print("TZ: {}".format(os.environ['TZ']))
print("now: {}".format(now_dt))
print("now_timestamp: {}".format(now_dt.timestamp()))

return 'Hello from Lambda'



TZ: :UTC

now: 2018-10-19 14:13:02.141871

now_timestamp: 1539958382.141871



タイムゾーンの変更方法

Lambda関数の設定にある「環境変数」で変更することができます。

キーに TZ 、値に Asia/Tokyo と入力します。

lambda-tz.png

同じスクリプトを実行すると次のようにタイムゾーンの変更が反映されています。


TZ: Asia/Tokyo

now: 2018-10-19 23:13:46.994964

now_timestamp: 1539958426.994964



コード内で TZ 環境変数を変えても変更は反映されない

「環境変数」ということで Pythonの os.environ を書き換えてみましたが、タイムゾーンの変更が反映されませんでした。

Lambda関数の「環境変数」の設定を忘れた時の対策として別な方法を考えたほうが良いでしょう。


コード内でタイムゾーンの変更が反映されない

import datetime

import os

def lambda_handler(event, context):
default_tz = 'Asia/Tokyo'
if os.getenv('TZ', '') != default_tz:
os.environ['TZ'] = default_tz
now_dt = datetime.datetime.now()

print("TZ: {}".format(os.environ['TZ']))
print("now: {}".format(now_dt))
print("now_timestamp: {}".format(now_dt.timestamp()))

return 'Hello from Lambda'


実行結果を見ると TZだけが "Asia/Tokyo" になっています。


TZ: Asia/Tokyo

now: 2018-10-19 14:15:45.675777

now_timestamp: 1539958545.675777



参考

AWS Lambdaのタイムゾーン変更 - Qiita

https://qiita.com/nullian/items/39ecf1f6d0194b72e8e6

Python で環境変数の取得と追加 | TM Life

http://tmlife.net/programming/python/python-environ.html

16.1. os — 雑多なオペレーティングシステムインタフェース — Python 3.6.4 ドキュメント

https://docs.python.jp/3/library/os.html#os.putenv