Amazon Auroraでタイムゾーンを設定する
はじめに
Amazon RDS for MySQLにおいて、system_time_zoneはUTC固定となっており、変更することができません。このためinit_connectで「SET SESSION」コマンドを設定し、接続時にタイムゾーンを変更します。詳細はAWS - RDS(MySQL)でJSTを使う たった1つの冴えたやり方 - Qiitaをご参照下さい。
さて、Amazon Auroraは「MySQL 5.6 と強い互換性」があるのが売りです。Amazon Auroraでのタイムゾーンの設定も、MySQLと同じやり方で出来るのかを試してみました。
やってみた
初期状態
なにも設定しない状態で確認すると、以下のようにtime_zoneが「SYSTEM」となっています。そしてsystem_time_zoneが「UTC」なので、時刻はUTCで表示されます。
$ mysql -u dbadmin -h aurora.cluster-hoge.us-east-1.rds.amazonaws.com -p Enter password: mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+ 2 rows in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2015-07-31 03:51:38 | +---------------------+ 1 row in set (0.00 sec)
パラメーターグループを設定する
以下のように、init_connectにSET SESSION time_zone = CASE WHEN POSITION('rds' IN CURRENT_USER()) = 1 THEN 'UTC' ELSE 'Asia/Tokyo' END;と設定します。
パラメーターグループ適用後
パラメーターグループ適用後に再度接続し、確認すると、time_zoneが「Asia/Tokyo」となっています!もちろん時刻もJSTで表示されます。
$ mysql -u dbadmin -h aurora.cluster-hoge.us-east-1.rds.amazonaws.com -p Enter password: mysql> show variables like '%time_zone%'; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | system_time_zone | UTC | | time_zone | Asia/Tokyo | +------------------+------------+ 2 rows in set (0.01 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2015-07-31 13:01:47 | +---------------------+ 1 row in set (0.00 sec)
さいごに
そんなわけで、本当に「強い互換性」があるんだなぁと納得した次第です。Aurora がリリースされたので concrete5.7 をインストールしてみた!のようにMySQLに対応したアプリケーションであればほぼ意識することなくAuroraに移行できそうです。是非お試しください!