RDSとは
RDSは、MySQL、PostgreSQL、Oracle、Microsoft SQL Serverなどのリレーショナルデータベースエンジンを使用したデータベースをAWSクラウドで作成、管理、スケーリングするためのフルマネージドサービスです。フルマネージドサービスであるため、データベースの設定、セットアップ、監視、バックアップ、アップグレード、パッチ適用など、あらゆる面でAWSが管理してくれます。データベース管理の負担を軽減し、ユーザーは本来の業務に集中することができます。
RDSの一時停止期間は7日間
RDSは従量課金制のサービスとなります。そのため、使っていない時間はRDSを停止してコスト削減をしたいという人が一般的に考えると思います。
EC2の場合もベストプラクティスとして利用しない時間はサーバーを停止することが推奨されています。
しかし、RDSに関しては停止はできますが、一時的なものになります。AWSの仕様として最大で7日間しか停止ができないのです。
なぜRDSは7日後に自動起動されるか
RDSがなぜ7日後に自動で起動されるかという問題は、AWS公式で紹介しています。
”ハードウェア、基盤となるオペレーティングシステム、またはデータベースエンジンのバージョンに必要なメンテナンス更新をインスタンスに確実に適用されるようにするためです。”
https://repost.aws/ja/knowledge-center/rds-stop-seven-days
バージョンアップやメンテナンス更新のため自動起動をする仕様となっているようです。
そうは言っても利用しないデータベースがあるのであれば止めたいです。RDSの費用は結構高く、EC2と同等かAuroraの場合はさらにコストは高くなります。
また、7日後のいつ起動されるかについては言及されていません。
そこで、7日後のいつ起動されるか実際に検証してみました。
RDSの起動時間調査
RDSパラメータ
リージョン:東京
AZ:az-d
DB:MariaDB
インスタンス:db.t4g.nano
ストレージ:20GiB
その他はデフォルトの状態で設定しました。
データベースの中身は空です。
東京リージョンで一番安い構成だと思います。
RDS起動
RDS起動は今回の記事には関連ありません。
GUIでポチポチと作成し、10分程度で「稼働中」ステータスとなりました。
RDS停止
RDSの手動停止を行います。
2023/05/03 11:50 :停止コマンドを実行
2023/05/03 11:58 :停止完了
停止に8分掛かりました。肌間では結構時間が掛かったと思います。
RDSの停止で時間が掛かった場合の対処法は下記で紹介しています。
停止コマンド実施時に下記のような表示が出ました。前までは出なかったので、アップデートされた機能です。

「7日後の2023/05/10 11:49に自動起動」とのことです。
停止コマンドの1分前から起動が始まるようです。
ここから1週間、なにも触らずに経過を見守ります。
7日後のRDS自動起動
7日経過し、11:45分ごろから停止しているRDSの様子を確認しました。
11:49に起動中ステータスになるはずですが、
結果は、、
2023/05/10 12:02 :起動開始
2023/05/10 12:06 :利用可能
という結果でした。
起動時間に13分も誤差がありました。
RDSの起動時間はRDSのデータ量にもよるため、データが入っているRDSの場合は起動にさらに時間を要することが考えられます。
RDS自動起動中の再停止ボタン
ちなみに、起動中の2023/05/10 12:02 ~ 2023/05/10 12:06 の間は停止不可となります。
下記のように、グレーアウトしてボタンを押すことができません。

RDSを永続的に停止したい場合
RDSの自動起動はありますが、何としても永続的に停止したい場合は下記方法があります。
EventBridgeを利用する
EventBridgeを利用することで、cronのような形式でRDSを停止することができます。
EventBridgeはIAMの設定さえ実施すればプリセットされたRDS停止命令が実行できるため非常に簡単な方法です。
しかし、上記の検証の通り、自動起動の時間は誤差があるうえ、週に1度のcron停止命令だと上手くいかないことが考えられます。
例:
EventBridge-1週目:毎週月曜日の12:00に停止
RDS-1週目:月曜の12:00に停止開始
RDS-2週目:月曜の11:59に自動起動※起動時間に誤差あり&起動完了まで数分かかる
EventBridge-2週目:月曜の12:00に停止命令⇀RDSが立ちあがっていないため失敗
RDS-2週目:月曜の12:13分に起動完了
⇀3週目の月曜12時にEventBridge停止までの間は起動しっぱなし
上記のように週1回の停止cronだと失敗してしまうでしょう。
そのため、cronの実施を毎日停止するジョブとするか、数時間おきに実行するジョブに設定が必要です。
しかし上記でも、自動起動から数時間程度は起動したままの状態となってしまいます。
他の方法として、Cloudwatchを併用したRDSのイベント検知による停止も可能です。
しかし、下記に示すやり方のほうが良いかと思います。
Lambdaを利用する
AWS公式ではLambdaを使用することが推奨されています。
https://repost.aws/ja/knowledge-center/rds-stop-seven-days
上記にIAMの設定をLambdaのPythonのランタイムで記載されたコードが載っていますのでそちらを参考に構築することができます。
こちらはRDSのイベント検知により停止をするLambdaとなっているため、EventBridgeのような時間のずれを気にする必要がありません。
AWSの効果的な学習方法は?

最後に、AWSの効果的な学習方法をご紹介します。
自学自習はUdemy講座
オンラインプラットフォームであるUdemyは安価で手軽にAWSの学習が可能です。
しかし、上記で紹介したような実際のAWSエンジニアが実施している構築スキルまでは教えてくれません。初心者~中級者向けの講座が多くなっています。
私も受講した、初心者向けAWS講座を下記記事でまとめています。ご参考ください。
1人で学習が難しい場合はオンラインレッスン
1人で学習が難しい場合はオンラインレッスンがおすすめです。
最近では、AWS講座を提供するオンラインレッスンも増えてきました。
料金は高くなりますが、現役エンジニアからAWSについて学ぶことができます。
本ブログ執筆者のメンタリングも受付中
本ブログを執筆している[KAITech]もメンタリングを受け付けています。
オンラインレッスンは高くて手が出せないという方は私までお気軽にご相談ください。
下記から承っております。
まとめ
RDSは仕様として一時停止後の7日後に自動起動されます。
RDSの自動起動は、「7日後の停止コマンドの1分前の時間」ですが、起動には誤差があることが分かりました。
また、起動から起動完了までの時間はデータ量やAWS側のサーバー状況によって異なり、起動中は停止コマンドを実施することができません。
永続的にRDSを停止したい場合は、Lambdaを利用した停止方法で永続的に停止することが最適解です。