注目の記事

[新機能]Amazon RDSで日本時間が使用可能になりました!

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

ウィスキー、シガー、パイプをこよなく愛する大栗です。
私の好きなサービスとしてAmazon RDSがあります。大好きなサービスなのですが、一つだけ大きな不満がありました。それはOracle以外タイムゾーンがUTC固定であることでした。

しかし、本日のアップデートにより、MySQLとMariaDBでタイムゾーンを変更できるようになり、日本時間を設定できるようになりましたのでご紹介します。

今までのタイムゾーン変更

今までRDS for MySQLでタイムゾーンを変更する方法といえば、『RDS(MySQL)でJSTを使う たった1つの冴えたやり方』を使う方法がテッパンでした。
これは、init_connect に「RDSの管理ユーザ(rdsで始まるユーザ)以外の場合にタイムゾーンを設定する」ストアドプロシージャを設定するという方法です。

これからのタイムゾーン変更

DBパラメータグループで time_zoneを設定することができるようになったため、これからはRDSらしい方法で設定できるようになりました。

今回パラメータグループでタイムゾーンを変更できるようになったのは、以下の3種類です。残念ながらMySQLでも5.1には対応していないので、5.1の場合はバージョンアップを検討しましょう。

  • MySQL 5.5
  • MySQL 5.6
  • MariaDB

設定可能なタイムゾーンは、以下の84個です。

# タイムゾーン # タイムゾーン # タイムゾーン
1 Africa/Cairo 29 Asia/Bangkok 57 Australia/Darwin
2 Africa/Casablanca 30 Asia/Beirut 58 Australia/Hobart
3 Africa/Harare 31 Asia/Calcutta 59 Australia/Perth
4 Africa/Monrovia 32 Asia/Damascus 60 Australia/Sydney
5 Africa/Nairobi 33 Asia/Dhaka 61 Brazil/East
6 Africa/Tripoli 34 Asia/Irkutsk 62 Canada/Newfoundland
7 Africa/Windhoek 35 Asia/Jerusalem 63 Canada/Saskatchewan
8 America/Araguaina 36 Asia/Kabul 64 Europe/Amsterdam
9 America/Asuncion 37 Asia/Karachi 65 Europe/Athens
10 America/Bogota 38 Asia/Kathmandu 66 Europe/Dublin
11 America/Caracas 39 Asia/Krasnoyarsk 67 Europe/Helsinki
12 America/Chihuahua 40 Asia/Magadan 68 Europe/Istanbul
13 America/Cuiaba 41 Asia/Muscat 69 Europe/Kaliningrad
14 America/Denver 42 Asia/Novosibirsk 70 Europe/Moscow
15 America/Fortaleza 43 Asia/Riyadh 71 Europe/Paris
16 America/Guatemala 44 Asia/Seoul 72 Europe/Prague
17 America/Halifax 45 Asia/Shanghai 73 Europe/Sarajevo
18 America/Manaus 46 Asia/Singapore 74 Pacific/Auckland
19 America/Matamoros 47 Asia/Taipei 75 Pacific/Fiji
20 America/Monterrey 48 Asia/Tehran 76 Pacific/Guam
21 America/Montevideo 49 Asia/Tokyo 77 Pacific/Honolulu
22 America/Phoenix 50 Asia/Ulaanbaatar 78 Pacific/Samoa
23 America/Santiago 51 Asia/Vladivostok 79 US/Alaska
24 America/Tijuana 52 Asia/Yakutsk 80 US/Central
25 Asia/Amman 53 Asia/Yerevan 81 US/Eastern
26 Asia/Ashgabat 54 Atlantic/Azores 82 US/East-Indiana
27 Asia/Baghdad 55 Australia/Adelaide 83 US/Pacific
28 Asia/Baku 56 Australia/Brisbane 84 UTC

設定してみる

まず、DBパラメータグループを作成します。今回はMariaDBのパラメータグループを作成します。

RDS_·_AWS_Console

作成したパラメータグループを編集します。time_zone を<エンジンのデフォルト>から設定したいタイムゾーンへ変更します。今回は日本時間にしたいため、Asia/Tokyoを選択します。

RDS_·_AWS_Console_と_KDDI_ChatWork_-_AWSチーム

次に普通にMariaDBを起動します。起動するときのパラメータグループは、先ほど作成したものを選択します。

RDS_·_AWS_Console

ログインして時刻を確認します。
EC2からRDSへログインして確認します。EC2はJSTの時刻(2015年 12月 22日 火曜日 07:49:18 JST)になっており、RDSも同じ時刻(2015-12-22 07:49:18)を指しています!

$ date ; echo 'select now();' | mysql -u awsuser -pmypassword -h mariainstance.abcdefghijkl.ap-northeast-1.rds.amazonaws.com
2015年 12月 22日 火曜日 07:49:18 JST
now()
2015-12-22 07:49:18

なお、time_zone パラメータは適用タイプがDynamicであるため、起動済みのRDSのタイムゾーンを変更するときにも再起動しません。ログイン中のセッションは元のタイムゾーンですが、再ログインすると変更済みのタイムゾーンでアクセスできます。

さいごに

タイムゾーンが変更できないという制限は、RDSを使いはじめるときのアルアルで、『RDS(MySQL)でJSTを使う たった1つの冴えたやり方』は有名なバッドノウハウでした。しかし、今回のアップデートで最初の躓きがなくなると期待しています。
RDSは最近Auroraを触ることが多いのですが、今回のアップデート対象からは外れています。ストレージレイヤが共通基盤になっているAuroraでは対応が難しいとは思っていますが、速く対応して欲しいです。