この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon Aurora Serverlessはキャパシティ管理が不要なAmazon Auroraです。
v1とv2の2種類が存在し、v1は2018年10月に、v2は2022年4月にGAになりました。
今回は、Amazon Aurora Serverless v1をv2に移行する方法を紹介します。
v1とv2は対象とするユースケースが大きく異なるため、v1からv2へ移行する機会はレアかもしれませんが、 このような移行作業を行うと、この2つの違いやAmazon AuroraのProvisionedとServerlessの違いを体感する機会としても有用です。
どのAmazon Auroraを使う?
Amazon Aurora Serverlessはバージョンが一つ違うだけで、データベースエンジンのメジャーアップグレードとは比較にならないほど大きな変更が入っており、実質的に、全く別のサービスです。
ユースケースに応じてどちらが適しているのか異なります。 本番環境のAuroraを楽に運用したいならv2、普段は利用しない開発環境のAuroraを低コストかつ楽に運用したいならv1を検討しても良いかもしれません。
次のドキュメントを参考に、ユースケース別に、どのAuroraを選ぶべきかご検討ください。
Adapting Aurora Serverless v1 use cases to Aurora Serverless v2
ProvisionedとServerlessの違い
Amazon Aurora Serverlessのv1と2はクラスターとDBインスタンスの管理が全く異なります。
ProvisionedとServerlessをキーワードに、違いを確認します。
クラスターの違い
Auroraクラスターは ServerlessとProvisionedの2種類があります。
従来型のクラスター、つまり、クラスター内のDBインスタンスをユーザーが作成するのが、Provisionedクラスターです。 一方で、Aurora Serverless v1のように、ユーザーはクラスターの単位で作成し、クラスター内のDBインスタンスには直接介入しないのが、Serverlessクラスターです。
Aurora Serverless v2はProvisioned型クラスターの一機能です。
DBインスタンスの違い
DBインスタンスにも ServerlessとProvisionedの2種類があります。
db.r6g.xlarge
のような特定サイズのDBインスタンスを作成するのがProvisioned DBインスタンスです。
一方で、Aurora Serverless v2(=db.serverless
)のように、インスタンス単位で動的にキャパシティがオートスケールするのが Sererless DBインスタンスです。
Provisionedクラスターには、ProvisionedとServerlessの両方のDBインスタンスを追加できます。
やってみた
Aurora Serverless v1 MySQL 5.7(2.07.1)を Aurora Serverless v2 に移行してみます。
移行の流れ
Aurora Serverless v1 PostgreSQL の場合は、適宜読み替えてください。
Aurora Serverless v1のスナップショットを取得
Auroraクラスターをv1のServerless型からv2のProvisioned型に作り直すため、スナップショットを取得します。
Provisionedクラスターの起動
このスナップショットから Serverless v1と同じバージョン(Aurora 2.07.1)のProvisioned Clusterを作成します。
コンソール操作では、バージョン一覧に3系も含まれていますが、いざ構築しようとすると、以下のエラーが発生します。
The engine version you requested for your restored DB cluster (8.0.mysql_aurora.3.02.0) is not compatible with the engine version of the DB cluster snapshot (5.7.mysql_aurora.2.07.1).
コンソールで表示されるバージョン一覧はProvisionedクラスターのスナップショットに対するもの(=aws rds describe-db-engine-versions
)であり、Severless v1のスナップショットからリストアできるバージョンには強い制限があるためです。
- Aurora Serverless v1 (Aurora MySQL 5.6) は5.7系バージョン
- Aurora Serverless v1 (Aurora MySQL 5.7) は同一バージョン
- Aurora Serverless v1 (Aurora PostgreSQL 10.18)は同一バージョン
を指定してください。
また、バージョンごとに対応しているDBインスタンスが異なります。
$ aws rds describe-orderable-db-instance-options
で確認してください。
2.07.1
の場合、db.r5.*
や db.t3.medium
などが対応しています。
db.t3.large
や Graviton 2系の db.r6g.*
などは対応していません。
$ aws rds describe-orderable-db-instance-options \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.07.1 \
--query 'OrderableDBInstanceOptions[].[DBInstanceClass,StorageType,Engine,EngineVersion]' \
--output table
-------------------------------------------------------------------------
| DescribeOrderableDBInstanceOptions |
+-----------------+---------+---------------+---------------------------+
| db.r3.2xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r3.4xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r3.8xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r3.large | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r3.xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r4.16xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r4.2xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r4.4xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r4.8xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r4.large | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r4.xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.12xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.16xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.24xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.2xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.4xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.8xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.large | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.r5.xlarge | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.t2.medium | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.t2.small | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.t3.medium | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
| db.t3.small | aurora | aurora-mysql | 5.7.mysql_aurora.2.07.1 |
+-----------------+---------+---------------+---------------------------+
Aurora 2 Provisioned Clusterのスナップショットを取得
Aurora 2からAurora3へのin-placeアップグレードはできないため、スナップショットを取得します。
Aurora 3 Provisioned Clusterを起動
Provisioned Cluster 2.07.1(MySQL 5.7)から取得したスナップショットから、Aurora Serverless v2が対応している Provisioned Cluster 3.0.2(MySQL 8.0) を作成します。
なお、スナップショットからのクラスター作成時には、スナップショット元エンジンバージョンが対応している Provisioned型のDBインスタンスを指定してください。
Serverlessインスタンスを指定すると、次のエラーが発生します。
You can't create a DB instance using the instance class db.serverless in the DB cluster v3-migrate-cluster. For the cluster's initial instance, use an instance class other than the AWS Graviton2 instance classes.
Serverless v2インスタンスはARM系のGravitonで稼働しており、2.07.1 は Graviton に対応していないために、このようなエラーメッセージが表示されているものと思われます。
Amazon AuroraのGraviton 対応は、Aurora MySQL は バージョン 2.09.1 以降、Aurora PostgreSQL はバージョン 11.9 以降です。
Graviton対応したバージョンのスナップショットからServerless v2のリストアを試みると、より直接的なエラーメッセージが表示されます。
ProvisionedインスタンスをServerless v2に変更
ProvisionedクラスターのDBインスタンスはProvisioned型とServerless型を混在したり、インスタンスをProvisioned型とServerless型で行き来させることができます。
クラスター作成後、Provisioned型で作成したDBインスタンスのクラスをServerless v2に変更します。
以上で、Serverless v1からv2への移行が完了しました。
最後に
Amazon Aurora Serverlessをv1からv2に移行するのは、簡単そうに思えて複雑です。 v1とv2は似ても似つかないためです。
ポイントは以下です。
- v1はクラスターがServerless。v2はクラスターがProvisioned、DBインスタンスがServerless
- v1のスナップショットからリストアできるバージョンには強い縛りがある。メジャーアップグレードのために、一度Provisionedクラスターをリストアしてスナップショットを取得し直す
- ProvisionedクラスターのDBインスタンスはProvisioned型とServerless型で切り替え可能
- Serverless型DBインスタンスは最新のAuroraエンジンでのみ対応。非対応のバージョンで取得されたスナップショットからServerless v2 DBインスタンスのProvisionedクラスターは作成できない。
それでは。