いわさです。
みなさん Amazon Lightsail のデータベース、使っていますか?
Lightsail では仮想サーバーの他にデータベースを作成することが出来て、バックアップやリストア、メトリクスやクエリなど、様々なマネージド機能を使うことが出来ます。
エンジンは本日時点では MySQL と PostgreSQL を選択することが出来て、メンテナンスウィンドウ中にでマイナーバージョンの自動アップグレードも行ってくれます。
ただしこのアップグレード機能ですが、本日時点では公式ドキュメントでは次のように記載がされています。
Amazon Lightsail で新バージョンのデータベースのサポートを開始した場合、既存のマネージドデータベースを新バージョンにアップグレードできます。アップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類があります。現在、Lightsail はマイナーバージョンのアップグレードのみサポートしています。
実際に Lightsail のコンソール上を確認してみても、手動でメジャーバージョンアップグレードを行えそうなメニューや機能は見当たりません。
AWS CLI がメジャーバージョンアップグレードをサポートしたっぽい
AWS CLI の今朝のアップデート v1.32.41 にて次のようなアナウンスがありました。
- lightsail
- This release adds support to upgrade the major version of a database.
そう、どうやらメジャーバージョンアップグレードがサポートされたようなのです。
コンソールからは確認出来なかったのですが、AWS CLI を使ったメジャーバージョンアップグレードを行うことが出来たので、その様子を紹介したいと思います。
MySQL 5.7 → 8.0 を試してみた
今回は Lightsail コンソールから MySQL 5.7.44 のデータベースを作成し、それを AWS CLI を使って MySQL 8.0 系にアップグレードしてみようと思います。
上記のデータベースを作成後に、適当なテーブルやレコードを作成しておきました。
% mysql -h ls-94b0b2fecfb1a85b1698c8c13b332e804db4d5d0.c87s48ujizwe.ap-northeast-1.rds.amazonaws.com -u dbmasteruser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.44-log Please upgrade to 8.0 or opt-in to the paid RDS Extended Support service before 5.7 reaches end of standard support on 29 February, 2024: https://a.co/hQqiIn0
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database hogedb;
Query OK, 1 row affected (0.04 sec)
mysql> use hogedb;
Database changed
mysql> create table fuga (col1 int, col2 varchar(10));
Query OK, 0 rows affected (0.05 sec)
mysql> insert into fuga values (1, 'aaa');
Query OK, 1 row affected (0.03 sec)
mysql> insert into fuga values (2, 'bbb');
Query OK, 1 row affected (0.04 sec)
mysql> insert into fuga values (3, 'ccc');
Query OK, 1 row affected (0.04 sec)
mysql> select * from fuga;
+------+------+
| col1 | col2 |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+------+------+
3 rows in set (0.04 sec)
mysql>
今回使うコマンドはこちら、update-relational-database
です。
今回のアップデータで新たにrelational-database-blueprint-id
パラメータを指定することが出来るようになりました。アップグレード先のデータベースのブループリント ID を指定する形のようです。
ブループリント ID はget-relational-database-blueprints
で一覧を確認することが可能です。
% aws-v1 lightsail get-relational-database-blueprints
{
"blueprints": [
{
"blueprintId": "mysql_5_7",
"engine": "mysql",
"engineVersion": "5.7.44",
"engineDescription": "MySQL Community Edition",
"engineVersionDescription": "MySQL 5.7.44",
"isEngineDefault": false
},
{
"blueprintId": "mysql_8_0",
"engine": "mysql",
"engineVersion": "8.0.36",
"engineDescription": "MySQL Community Edition",
"engineVersionDescription": "MySQL 8.0.36",
"isEngineDefault": true
},
{
"blueprintId": "postgres_11",
"engine": "postgres",
"engineVersion": "11.22",
"engineDescription": "PostgreSQL",
"engineVersionDescription": "PostgreSQL 11.22-R2",
"isEngineDefault": false
},
:
},
{
"blueprintId": "postgres_16",
"engine": "postgres",
"engineVersion": "16.1",
"engineDescription": "PostgreSQL",
"engineVersionDescription": "PostgreSQL 16.1-R2",
"isEngineDefault": false
}
]
}
mysql_8_0
を指定してデータベースを更新してみます。
この時、applyImmediately
オプションを指定しない場合はその場では何も起こりませんでした。おそらくメンテナンスウィンドウのタイミングでアップグレードが発生するのだと思います。
今回はapplyImmediately
オプションを指定し、ダウンタイムを伴いますが即時アップグレードを指示しました。
% cat hoge.json
{
"relationalDatabaseName": "hoge0214database",
"applyImmediately": true,
"relationalDatabaseBlueprintId": "mysql_8_0"
}
% aws-v1 lightsail update-relational-database --cli-input-json file://hoge.json
{
"operations": [
{
"id": "a43a738b-2ea8-498e-8551-b840dad95b90",
"resourceName": "hoge0214database",
"resourceType": "RelationalDatabase",
"createdAt": 1707886502.813,
"location": {
"availabilityZone": "ap-northeast-1a",
"regionName": "ap-northeast-1"
},
"isTerminal": true,
"operationDetails": "",
"operationType": "UpdateRelationalDatabase",
"status": "Succeeded",
"statusChangedAt": 1707886503.944
}
]
}
実行して十秒ほど待機すると Lightsail コンソールで対象データベースのステータスが「アップグレード中」に変化しました。おお。
この機能はインプレースアップグレードが行われるようで、最終的にはほぼデフォルトの MySQL 5.7 で 15 ~ 20 分ほど完了まで時間がかかりました。
アップグレード中に表示が次のように変わりました。
アップグレード完了後は Lightsail コンソール上でも MySQL 8.0.36 としてアクセスすることが出来ます。
確認してみるとデータベースやテーブル、レコードも移行されているので、単純に新しいデータベースインスタンスで置き換わっているわけではなく、きちんとアップグレードされていますね。
% mysql -h ls-94b0b2fecfb1a85b1698c8c13b332e804db4d5d0.c87s48ujizwe.ap-northeast-1.rds.amazonaws.com -u dbmasteruser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 8.0.36 Source distribution
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use hogedb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from fuga;
+------+------+
| col1 | col2 |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+------+------+
3 rows in set (0.04 sec)
なお、アップグレードに関する公式ドキュメントの情報がまだありませんでしたが、次の RDS ドキュメントに記載のあるようにメジャーバージョンアップグレード時にはいくつか注意点もありますので、こちらも併せて確認しておくと良いでしょう。
さいごに
本日は Amazon Lightsail のデータベースがメジャーバージョンアップグレード機能をサポートしたようなので AWS CLI で試してみました。
Lightsail データベースのメジャーバージョンアップグレードがサポートされておらず古いバージョンを使い続けている方も多かったのではないでしょうか。
今回メジャーバージョンのインプレースアップグレードがサポートされたので、事前評価の上アップグレードを計画されては如何でしょうか。