AWS Lambda を開発する際のユニットテストでは、TZ=UTC にしておこう

時刻判定周りでのローカルタイムゾーンの違いは、うっかりバグの元になりやすいものですが、AWS Lambda の場合、以下のように環境変数 TZ が予約済み環境変数として変更不可能となっているようです。

docs.aws.amazon.com

  • TZ – 環境のタイムゾーン (UTC)。実行環境は、システムクロックを同期するために NTP を使用します。

つまり、AWS Lambda の実行環境ではローカルタイムゾーンUTC 固定になっているということですね。わかり易くはあるのですが、開発PC 上でや CI でユニットテストを走らせるときにローカルタイムゾーンが現地 (JSTとか) に設定されていて、テスト通ったけど本番環境でバグる、ということもありそうです。

テストを実行するときは 環境変数 TZ に UTC を設定しておくようにするのがよさそうですね。Go 言語なら Makefile に書いてしまうのもいいかもしれません。