こんにちは、テクニカルサポートの鈴木です!

今回は、Amazon RDSインスタンスのストレージが満杯になる Storage-full という状態からの回復方法について、お客様からいただいた事例をもとに解説します。

RDS運用で避けたいトラブルの一つであるStorage-fullですが、万が一発生してしまった際に迅速に対応できるよう、本記事では基本的な回復手順から、コンソールでの変更がうまくいかない場合の対処法までご紹介します。

Storage-full状態とは?

RDSインスタンスに割り当てられたストレージ容量が不足すると、インスタンスは storage-full というステータスに移行します。
この状態になると、データベースへの新たな書き込みが停止し、サービスに影響が出るだけでなく、インスタンスへの接続や再起動といった基本的な操作も行えなくなります。

回復方法:AWSマネジメントコンソール

通常、Storage-full 状態からの回復は、AWSマネジメントコンソールから以下の手順で簡単に行うことができます。

1. DB インスタンスのステータスをチェックして、ステータスがstorage-full であることを確認する
2. DB インスタンスに割り当てられたストレージを少なくとも 10% 増やす

引用:Amazon RDS DB インスタンスのストレージが不足したときに発生する問題を解決するにはどうすればよいですか?

ここで非常に重要なのが、ストレージを現在の割り当て量の少なくとも10%以上増やす必要があるという点です。
例えば、現在100GiBを割り当てている場合、110GiB以上に設定する必要があります。
お客様から「ストレージを増やそうとしてもエラーが出てしまう」というお問い合わせをいただくことがありますが、この10%ルールを満たしていないケースがあります。
変更がうまくいかない際は、まずこの点をご確認ください。

コンソールでエラーが発生する場合の対処法

規定通り10%以上ストレージを増やそうとしても、コンソールからの変更がエラーで失敗することがあります。
ここでは、お客様から実際にいただいたお問い合わせ事例をご紹介します。

お客様の環境で Storage-full となったRDSインスタンスに対し、コンソールからストレージ割り当てを増やそうとしたところ、以下のエラーメッセージが表示され変更に失敗しました。

申し訳ありません。DB インスタンス ********(インスタンス名) の変更のリクエストが失敗しました。
The specified database instance is currently in storage-full state. Please allocate more storage by modifying the DB instance.

原因はストレージ以外の値の変更だった

規定通り10%以上ストレージを増やそうとしているのになぜ…?

このエラーの原因はストレージ容量の変更と同時に、別の値の変更も実施しようとしたことが原因だと判明しました。実は、storage-full状態のRDSインスタンスは、「ストレージ割り当て」に関する変更のみを受け付けるという制約がかかります。

今回のお問い合わせでは、対象インスタンスの認証機関 (CA証明書) が古いバージョンでした。
マネジメントコンソールから変更操作を行うと、ストレージ変更と同時に、この古いCA証明書を新しいバージョンへ更新する処理も実施しようとします。
この「CA証明書の変更」が storage-full の制約に抵触し、リクエスト全体がエラーとして弾かれていたのです。

解決策:CLIによる変更

この問題の解決策とし、CLI を利用します。
CLIを使えば、他のパラメータに影響を与えることなく、「ストレージ割り当て」の変更だけをピンポイントで実行できます。
以下のコマンドを実行することで、無事にストレージ容量のみを変更し、インスタンスを復旧させることができました。

DB インスタンスのストレージを増量するには、AWS CLI の modify-db-instance コマンドを使用します。以下のパラメータを設定します。
--allocated-storage – DB インスタンスに割り当てるストレージの量 (ギビバイト単位)。
--apply-immediately – すぐにストレージの変更を適用するには、--apply-immediately を使用します。
または --no-apply-immediately (デフォルト) を使用して、次のメンテナンスウィンドウ中に変更を適用します。変更が適用されると、すぐに停止が発生します。

引用:DB インスタンスストレージの容量を増加する

まとめ

  • RDSが Storage-full になった場合、DB インスタンスに割り当てられたストレージを少なくとも 10% 増やすことを注意する
  • コンソールでの変更でエラーが発生する場合は、ストレージ以外の変更が同時に実行されていないかを疑う
  • その場合、CLIを利用してストレージ割り当ての変更のみを実行することで、問題を解決できる可能性がある

同様の問題でお困りの方の一助となれば幸いです。