AuroraクラスターからWriterを削除してしまった時のリカバリー
はじめに
どうも、馬場です!
前回 に続き、今回もAuroraに関する記事を書きます。
今回は開発用のAuroraをしばらく使わなくなったので、1次停止で起動がかかるのを回避するためにWriterインスタンスも削除していたのですが、再度利用を開始する際に思っていた手順で再開できなかったので、備忘がてら復旧手順?を記載します。
やろうとしていたこと

こんなレコードを見ながら「適当にリーダーを追加して、ライターに昇格させればええやろ!」と当初は考えていました。
が、実際に操作をしてみたところ以下のようにそもそも有効化状態にありませんでした。

冷静になるとそもそもライターが無いので、リーダーを追加するという概念もないのは確かに、、という感想
解決方法
AWS CLIでWriterインスタンスを作成すること
が解決策となりました。
インスタンスを利用していたケース
元のインスタンスタイプを調べて aws rds create-db-instance を実行します。
リファレンスは ↓
私のケースでは以下の形のコマンドを CloudShell から実行しました。
aws rds create-db-instance \
--db-cluster-identifier {既存クラスター名} \
--db-instance-identifier {これから作成するライターインスタンス名} \
--engine {DBエンジン} \
--db-instance-class {利用するインスタンスタイプ}
インスタンスが作成されます。

※クラスターの設定によって適切なオプションを設定してください。
例えば、クラスターでIAM認証を設定している場合は、 --enable-iam-database-authentication を足してください。
Serverlessを利用していたケース
大体同じです。
--db-instance-class を db.serverless としてください。
aws rds create-db-instance \
--db-cluster-identifier {既存クラスター名} \
--db-instance-identifier {これから作成するライターインスタンス名} \
--engine {DBエンジン} \
--db-instance-class db.serverless
ACUのスケール設定は削除前の状態をどこかで保持しているっぽいです。
以下画像のクラスターでは0~5 ACUの設定をしていて、それが勝手に設定されていました。

設定値が不明だったり、新規に0スケールさせたい場合は、改めてクラスターの設定を行う必要があります。
ライターインスタンスを足した後に設定もできますが、インスタンスが無い状態だとそもそもクラスターの設定値を確認することができません。
本来ならこのような設定箇所があるのですが、ライターインスタンスが無い場合はこの項目が表示されません。

なので、インスタンス作成よりも先にクラスター側でACUのスケール設定を行いたい場合にもAWS CLIから設定してあげる必要があります。
コマンドは modify-db-cluster を利用して --serverless-v2-scaling-configuration オプションで最大値を最小値を設定してあげます。
こんな感じです。( リファレンスはこちら )
aws rds modify-db-cluster \
--db-cluster-identifier {クラスター名} \
--serverless-v2-scaling-configuration MinCapacity={ACUの最小値},MaxCapacity={ACUの最大値} \
--apply-immediately
この設定無しでserverless v2を利用しようとすると
An error occurred (InvalidDBClusterStateFault) when calling the CreateDBInstance operation: Set the Serverless v2 scaling configuration on the parent DB cluster before creating a Serverless v2 DB instance.
と怒られます。
最後に
停止の運用めんどくさいなーと気軽にインスタンスを削除してしまった結果、少し慌てる事態となってしまいましたが、AWS CLIからライターインスタンスを立ててあげることで問題を解決することができました。
この記事が将来の自分と同じ事象に当たってしまった方の役に立てれば幸いです!
Discussion