Amazon Auroraでタイムゾーンを設定する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

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;と設定します。

RDS_·_AWS_Console

パラメーターグループ適用後

パラメーターグループ適用後に再度接続し、確認すると、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に移行できそうです。是非お試しください!