7
0

More than 1 year has passed since last update.

CFnでプロビジョニング型からAuroraServerless v2 へ移行した話

Last updated at Posted at 2022-12-15

これは ZOZO Advent Calendar 2022 カレンダー Vol.3 の 16 日目の記事です。昨日の投稿は @chichi1091 さんの「SpringBoot+JPAからTiDBを使ってみる」でした。

本記事では、CFn で管理されたプロビジョニング型の Aurora からサーバレス型のAuroraServerless v2 へ移行した話を記載します。
2022/10/5 に AuroraServerless v2 が AWS CloudFormation(CFn) のサポートを開始したことを発表しました。

元々は、 AuroraServerless v2 で構築することを考えておりましたが、CFn がサポートしていなかったためにプロビジョニング型(Aurora MySQL v3)で構築したところでした。
一方その頃、同じようなタイミングで CFn のサポートが発表されました。 「タイミングよ、、、」 と言いたいところですが、嬉しい発表なので Aurora Serverless v2 に移行することにしました。
本記事は2022年10月時点の内容になります。

基本的な作業の流れとしては下記 AWS ドキュメントに従って進めます。
ref. プロビジョニングされたクラスターから Aurora Serverless v2 への切り替え

前提

本記事では下記構成で実施しています。

  • クラスター
    • ライターインスタンス: 1台
    • リーダーインスタンス: 1台

1. [CFn] クラスターに対して Aurora Serverless v2のキャパシティ設定を追加する

AWS::RDS::DBClusterServerlessV2ScalingConfiguration の設定を下記のように追加し、デプロイします。
このとき、置換はFalseのため瞬断はありません。

ServerlessV2ScalingConfiguration:
        MinCapacity: 0.5
        MaxCapacity: 2

ちなみにこの設定は AuroraServerless v2 用にできたようで、ScalingConfiguration の設定ではありません。
ScalingConfiguration は AuroraServerless v1 用の設定になります。

クラスターに AuroraServerless v2 のキャパシティ設定が追加されます。
image.png
この時はまだプロビジョニング型のインスタンスです。

2. [CFn] リーダーインスタンスを AuroraServerless v2 に変更する

コンソールから、現状リーダーとなっているインスタンスを確認し、CFnで定義している該当インスタンスのAWS::RDS::DBInstanceにてインスタンスクラスを db.serverless にしてデプロイします。
ref. https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.create-cluster.html

DBInstanceClass: "db.serverless"

リーダーインスタンス1台で RO のエンドポイントを使用している場合は、影響を受けるかと思います。

リーダーインスタンスが AuroraServerless v2 に変更されました。
image.png

3. [手動] フェイルオーバーを実施する

フェイルオーバーを実施し、AuroraServerless v2 のリーダーインスタンスをライターインスタンスに昇格させます。
このときフェイルオーバーのため、数十秒の断が発生します。

AuroraServerless v2 のインスタンスがライターに変更されました。
image.png

4. [CFn] 残りのプロビジョニング型のインスタンスを AuroraServerless v2 に変更する

2の手順をこの時点でのリーダーインスタンスに対して実施します。

全てのインスタンスが AuroraServerless v2 に変更できました。
image.png

基本的にはここまでの手順で、AuroraServerless v2 に移行することができます。

ここからは AuroraServerless v2 を CFn管理とする際にハマった話になります。

5. [CFn/手動] クラスターで設定していた EngineMode の設定は不要のため削除する

プロビジョニング型のAuroraを構築したとき、CFnにて EngineMode を provisioned で設定していました。
サーバレス化しようと設定を見るに、EngineMode には serverless の設定値があります。

image.png

しかしこの設定は AuoraServerless v1 用の設定で、AuroraServerless v2 には対応していない設定のようでした。

そのため、AuoraServerless v2 にするためにはEngineModeの設定ごと削除する必要がありました。
しかしながら、EngineModeの設定を削除しようとすると置換がTrueとなってしまい、作り直しが発生してしまうという状況でした。
結論としては、CFnよりEngineModeの設定を削除した上で、CFnのImportを実施します。

5-1. クラスターとインスタンスをCFn管理から外す

まずは、CFnよりクラスターとインスタンスに下記のDeletionPolicyが定義されていることを確認します。
この定義がないと、リソースが削除されてしまいます。

DeletionPolicy: Retain

CFnよりクラスターとインスタンスの定義をコメントアウトしてデプロイします。
これを実行すると、CFn管理から外れてリソースだけ残ります。

5-2. CFnよりクラスターとインスタンスを正しい状態に修正する

CFnよりクラスターとインスタンスでコメントアウトを解除し、EngineModeの定義を削除します。
ここではデプロイは実施しません。

5-4. CFnのコンソールからスタックへのリソースのインポートを実施する

image.png
テンプレートファイルのアップロードより、正しい状態に修正したCFnのyamlファイルをアップロードします。
image.png
image.png
image.png

イベントにてステータスがIMPORT_COMPLETEとなればImport完了です!

image.png

これで無事にCFn管理することができました。

まとめ

この記事では、CFn で管理されたプロビジョニング型の Aurora からサーバレス型のAuroraServerless v2 へ移行した話を記載しました。
CFn上では、AuroraServerless v1 と設定が異なる部分があるため注意が必要です。

明日は...

明日のZOZO Advent Calendar 2022 カレンダー Vol.3 の投稿は @takewell さんです。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0