Amazon Aurora Serverlessをv1からv2にアップグレードしてみた

2022.05.09

Amazon Aurora Serverlessはキャパシティ管理が不要なAmazon Auroraです。

v1v2の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インスタンスの管理が全く異なります。

ProvisionedServerlessをキーワードに、違いを確認します。

クラスターの違い

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クラスターは作成できない。

それでは。

参考