![[新機能]Amazon Auroraで日本時間が使用可能になりました!](https://devio2023-media.developers.io/wp-content/uploads/2014/05/Amazon_RDS.png)
[新機能]Amazon Auroraで日本時間が使用可能になりました!
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ウィスキー、シガー、パイプをこよなく愛する大栗です。
去年末に対応したRDS for MySQLのタイムゾーン変更に引き続きAuroraでもタイムゾーンが変更可能になりました! Auroraでは対応していなかったでの心待ちにしていたのですが、ようやく対応したので確認してみたいと思います。
変更可能なタイムゾーン
Auroraで設定可能なタイムゾーンは、以下の62個(2016年3月2日現在)となっています。 RDS for MySQLでは84個と設定できる内容に違いがあるのでご注意下さい。 (この記事を読まれている方でUTCとAsia/Tokyo以外を設定する人は少ないと思いますが)
| # | タイムゾーン | # | タイムゾーン | # | タイムゾーン | 
|---|---|---|---|---|---|
| 1 | Africa/Harare | 22 | Asia/Bangkok | 43 | Australia/Sydney | 
| 2 | Africa/Monrovia | 23 | Asia/Beirut | 44 | Canada/Saskatchewan | 
| 3 | Africa/Nairobi | 24 | Asia/Calcutta | 45 | Brazil/East | 
| 4 | Africa/Windhoek | 25 | Asia/Kabul | 46 | Europe/Amsterdam | 
| 5 | America/Bogota | 26 | Asia/Karachi | 47 | Europe/Athens | 
| 6 | America/Caracas | 27 | Asia/Kathmandu | 48 | Europe/Dublin | 
| 7 | America/Chihuahua | 28 | Asia/Muscat | 49 | Europe/Helsinki | 
| 8 | America/Cuiaba | 29 | Asia/Riyadh | 50 | Europe/Paris | 
| 9 | America/Denver | 30 | Asia/Seoul | 51 | Europe/Prague | 
| 10 | America/Fortaleza | 31 | Asia/Shanghai | 52 | Europe/Sarajevo | 
| 11 | America/Guatemala | 32 | Asia/Singapore | 53 | Pacific/Auckland | 
| 12 | America/Halifax | 33 | Asia/Taipei | 54 | Pacific/Guam | 
| 13 | America/Manaus | 34 | Asia/Tehran | 55 | Pacific/Honolulu | 
| 14 | America/Matamoros | 35 | Asia/Tokyo | 56 | Pacific/Samoa | 
| 15 | America/Monterrey | 36 | Asia/Ulaanbaatar | 57 | US/Alaska | 
| 16 | America/Montevideo | 37 | Atlantic/Azores | 58 | US/Central | 
| 17 | America/Phoenix | 38 | Australia/Adelaide | 59 | US/Eastern | 
| 18 | America/Tijuana | 39 | Australia/Brisbane | 60 | US/East-Indiana | 
| 19 | Asia/Ashgabat | 40 | Australia/Darwin | 61 | US/Pacific | 
| 20 | Asia/Baghdad | 41 | Australia/Hobart | 62 | UTC | 
| 21 | Asia/Baku | 42 | Australia/Perth | 
設定してみる
DBパラメータグループを作成する
defaultのDBパラメータグループは項目を編集できないため、パラメータグループを別途作成します。
| グループの種類 | パラメータグループ名 | 
|---|---|
| DB Cluster Parameter Group | aurora-clu-time-param | 
| DB Parameter Group | aurora-time-param | 
Auroraを起動する
作成したパラメータグループを設定してAuroraを起動します。
タイムゾーンを変更する
Manegement ConsoleからRDS画面のParameter Groupsを選択して、作成したDB Cluster Parameter Groupaurora-clu-time-paramを選択します。Edit Parametersボタンから編集画面に遷移してtime_zoneパラメータをAsia/Tokyoに変更してSave Changesボタンで保存します。
time_zoneを変更している最中の挙動を確認してみます。
1秒ごとにAuroraへログインしてselect now()で時刻を確認します。
2016年 3月 2日 水曜日 03:52:31 UTCではAurora上でUTCの2016-03-02 03:52:31でしたが、1秒後の2016年 3月 2日 水曜日 03:52:32 UTCではJSTの2016-03-02 12:52:32が表示されています。
$ date ; (export TZ=JST-9 ; date) ; \ > echo "select now();" \ > | mysql -u awsuser -pmypassword -h localtime.xxxxx.ap-northeast-1.rds.amazonaws.com 2016年 3月 2日 水曜日 03:52:30 UTC 2016年 3月 2日 水曜日 12:52:30 JST now() 2016-03-02 03:52:30 $ date ; (export TZ=JST-9 ; date) ; \ > echo "select now();" \ > | mysql -u awsuser -pmypassword -h localtime.xxxxx.ap-northeast-1.rds.amazonaws.com 2016年 3月 2日 水曜日 03:52:31 UTC 2016年 3月 2日 水曜日 12:52:31 JST now() 2016-03-02 03:52:31 $ date ; (export TZ=JST-9 ; date) ; \ > echo "select now();" \ > | mysql -u awsuser -pmypassword -h localtime.xxxxx.ap-northeast-1.rds.amazonaws.com 2016年 3月 2日 水曜日 03:52:32 UTC 2016年 3月 2日 水曜日 12:52:32 JST now() 2016-03-02 12:52:32 $ date ; (export TZ=JST-9 ; date) ; \ > echo "select now();" \ > | mysql -u awsuser -pmypassword -h localtime.xxxxx.ap-northeast-1.rds.amazonaws.com 2016年 3月 2日 水曜日 03:52:33 UTC 2016年 3月 2日 水曜日 12:52:33 JST now() 2016-03-02 12:52:33
一方、Auroraにログインしたままselect now()で時刻を確認してみます。
タイムゾーンが変わった2016年 3月 2日 水曜日 03:52:31 UTCから2016年 3月 2日 水曜日 03:52:32 UTCで表示はUTCのままとなっています。タイムゾーンが変更されてもログイン中のコネクションでは元のタイムゾーンが維持されて、新しいコネクションからタイムゾーンが変更されます。
mysql> select now(); +---------------------+ | now() | +---------------------+ | 2016-03-02 03:52:30 | +---------------------+ 1 row in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2016-03-02 03:52:31 | +---------------------+ 1 row in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2016-03-02 03:52:32 | +---------------------+ 1 row in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2016-03-02 03:52:33 | +---------------------+ 1 row in set (0.00 sec)
注意
Auroraのドキュメントを読んでいて、以下の記述が気になりました。
This time zone setting can return incorrect values from 30 Sep 1937 15:00:00 GMT to 31 Dec 1937 15:00:00 GMT. (このタイムゾーンの設定は、1937年9月30日15時00分00秒 GMT から1937年12月31日15時00分00秒 GM Tまで誤った値を返すことがあります。)
これだけ読むと実装にバグが有るように思えますが、「1937年9月30日15時00分00秒 GMT」つまり「1937年10月01日00時00分00秒 JST」に日本の標準時に関する法律が変わっています。日本に「西部標準時」があったのですが無くなって「中央標準時」に統一されています。年の途中で標準時の変更があったので地政学的に正しい時刻が返せないと言うことだと自分は認識しました。 他のタイムゾーンでも「This time zone setting can return incorrect values from 〜 to 〜」という記述が散見されますが、同様の問題だと思います。
また、うるう秒についても気になったので確認してみました。 普通にうるう秒無しのタイムゾーン表記のようです。MySQLでもうるう秒を表現できないので当然といえば当然ですね。
mysql> select from_unixtime(1341100799), from_unixtime(1341100800), from_unixtime(1341100801); +---------------------------+---------------------------+---------------------------+ | from_unixtime(1341100799) | from_unixtime(1341100800) | from_unixtime(1341100801) | +---------------------------+---------------------------+---------------------------+ | 2012-07-01 08:59:59 | 2012-07-01 09:00:00 | 2012-07-01 09:00:01 | +---------------------------+---------------------------+---------------------------+ 1 row in set (0.00 sec)
さいごに
最近使用頻度が高くなっているAuroraでタイムゾーンが設定できるようになったので、RDS for MySQLと同じように使用できる事になりました。しかし、Auroraをスナップショットからリストアするときには、デフォルトのパラメータグループが設定されるのでUTCとなります。使用前にパラメータグループを設定して今まで使用していたタイムゾーンに設定すること忘れないようにしてください。













