RDSがmodifying状態のとき停止できない

  • AWS
  • RDS

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

RDSのDBインスタンスステータスがmodifyingのとき、Stopは通せない。無理に叩くとInvalidDBInstanceStateで弾かれる。availableに戻るまで待つしかない。

modifyingとは何か

AWS公式ドキュメント(Viewing instance status)では、modifyingは「顧客からのModify要求によってDBインスタンスが変更中である」状態と定義されている。課金は継続する。

Modify要求を投げた後、その処理は途中でキャンセルできない。完了するまでずっとmodifyingのままになる。

Stop/Rebootを試すとどうなるか

modifying中にstop-db-instanceやreboot-db-instanceを叩くと、以下のようなエラーが返ってくる。

An error occurred (InvalidDBInstanceState) when calling the
StopDBInstance operation: Instance example-db is not in available state.

実際にAWS re:Postでも、アップグレード中のインスタンスを止めようとしてコンソール側の操作がグレーアウトし、CLIから叩いても同じエラーで拒否された、という報告がある。回避策はなく、Modifyが完了してavailableに戻るのを待つしかない。

Terraformでmodify-db-instanceを投げるケースでも同種のエラーが出ることがある。自動化パイプラインが変更完了前に次の変更を重ねて投げてしまうと発生しやすいらしい。バックアップウィンドウと処理が重なった場合も同様のエラーになる。

なぜ待つべきか

  • Modify処理はキャンセル不可なので、途中で無理に止めると整合性が崩れるリスクがある
  • 一部のModifyは再起動を伴うため、その途中でStopを重ねると状態がさらに不安定になりうる
  • AWS側もそもそもAPIレベルで拒否してくるので、待つ以外の選択肢が実質ない

停止したい場合は、describe-db-instancesでステータスを確認しつつavailableになったタイミングでStopするのが素直なやり方になる。

aws rds describe-db-instances \
--db-instance-identifier example-db \
--query "DBInstances[0].DBInstanceStatus"

所要時間について

modifying状態がどれくらい続くかは、変更内容・インスタンスサイズ・エンジン・現在の負荷によって変わる。AWSの公式ドキュメントに「この変更はX分」という固定の目安表は見当たらなかった。数分で終わることもあれば、大規模インスタンスのメジャーバージョンアップグレードのように長時間かかるケースもある、という程度の話で、具体的な分数を断定するのは避けた方がいい。

実務で待ち時間を把握したいなら、目安の数字を探すよりdescribe-eventsでイベントログを追いながら進捗を見る方が確実だと思う(未確認・実機での挙動は変更内容ごとに要確認)。