[新機能]Amazon RDSで日本時間が使用可能になりました!
ウィスキー、シガー、パイプをこよなく愛する大栗です。
私の好きなサービスとして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のパラメータグループを作成します。
作成したパラメータグループを編集します。time_zone
を<エンジンのデフォルト>から設定したいタイムゾーンへ変更します。今回は日本時間にしたいため、Asia/Tokyo
を選択します。
次に普通にMariaDBを起動します。起動するときのパラメータグループは、先ほど作成したものを選択します。
ログインして時刻を確認します。
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では対応が難しいとは思っていますが、速く対応して欲しいです。