Amazon Lightsail のデータベースのタイムゾーン変更方法について
Amazon Lightsail のデーターベースを使っているときに、time_zone を UTC から Asia/Tokyo などに変更したい場合があると思います。
UTCのまま運用したほうがいい場合も多いと思いますが、そうでない場合にどうやって変更するかを記載します。
まず、Lightsail では直接 SET を使用して変更しようとしても権限がなく変更できません。
1 2 |
MySQL [(none)]> SET GLOBAL time_zone = "Asia/Tokyo"; ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation |
そこで、公式でも紹介されているように aws lightsail コマンドを使用します。
参考: https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-updating-database-parameters
設定方法
まず、AWSコンソールの右上にある CloudShell を起動します。
起動が完了したらまず、どのようなパラメータを変更できるか確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[cloudshell-user@ip-xx-x-x-xxx ~]$ aws lightsail get-relational-database-parameters --relational-database-name [DB名] ~~~ { "applyMethod": "pending-reboot", "applyType": "static", "dataType": "string", "description": "Server current time zone", "isModifiable": false, "parameterName": "default_time_zone" }, { "allowedValues": "time_zone,autocommit,character_set_client,character_set_results,character_set_connection", "applyMethod": "pending-reboot", "applyType": "dynamic", "dataType": "list", "description": "Whether the server tracks changes to the session system variables and notifies the client when changes occur.", "isModifiable": true, "parameterName": "session_track_system_variables" }, ~~~ |
time_zone は pending-reboot となっており、設定反映後にデータベースの再起動が必要となります。
それでは以下のコマンドで time_zone を変更してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[cloudshell-user@ip-xx-x-x-xxx ~]$ aws lightsail update-relational-database-parameters --relational-database-name [DB名] --parameters "parameterName=time_zone,parameterValue=Asia/Tokyo,applyMethod=immediate" { "operations": [ { "id": "xxxx-xxxxx-xxxxx", "resourceName": "[DB名]", "resourceType": "RelationalDatabase", "createdAt": "2023-03-24T14:44:04.709000+00:00", "location": { "availabilityZone": "ap-northeast-1c", "regionName": "ap-northeast-1" }, "isTerminal": true, "operationDetails": "", "operationType": "UpdateRelationalDatabaseParameters", "status": "Succeeded", "statusChangedAt": "2023-03-24T14:44:04.709000+00:00" } ] } |
Statusが Succeeded になっていれば大丈夫です。そして、最後にデータベースの再起動を実行して完了です。
念の為、 time_zone が変更されているか確認してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# mysql -h ls-xxxxxxxxxxxxxxxxx.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u username -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 11541 Server version: 5.7.38-log Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show variables like '%time_zone%'; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | system_time_zone | UTC | | time_zone | Asia/Tokyo | +------------------+------------+ 2 rows in set (0.00 sec) |
まとめ
直接データベースに接続して SET で変更できないため、 aws lightsail コマンドを使用する必要がありました。
しかし、CloudShell があるおかげで、わざわざローカルにコマンドを入れたり、実行のためのIAMを作ったりする必要はないため非常に簡単に変更することができます。