Amazon-RDS

RDS、停止したままにしたすぎる問題。

新年のごあいさつ

しめまして残念でした(逆張り)。今年の抱負は「全員倒します」、もに倉です。
今年も昨年と変わらず、ちまちまブログを書いていくのでよろしくお願いいたします。

さて、今回はRDSを無限に停止させるためにEventBridgeを活用したいと思います。

なぜRDSは止まらないのか

RDSは、一時的に停止させても7日後には勝手に起動する仕様になっています。
そうです。使わない期間は停止させておいて、料金をセーブする手法が取れないのです。

止めるだけ止めて満足していたら、一週間後には勝手に復活。
気づかぬうちにお金がかかっているという寸法です。
これは完全にAWSの罠です。

一応、RDSを停止させるときに下記のような表示は出るのですが、まあ、忘れます。

(気づかないうちに了承チェックが必要になっている……)

真相

なんで勝手に起動するのかと調べてみたところ、公式に下記の通り記載されていました。

DB インスタンスは最大 7 日間停止できます。7 日後に DB インスタンスを手動で起動しなかった場合、
DB インスタンスは自動的に起動されます。これにより、必要なメンテナンスの更新が遅延することはありません。

というわけで、メンテナンス更新に遅れないようにという配慮だったみたいです。
うれしいような……そうでもないような……。

それでも無理やり止めたい

しかし、検証用なんかは基本的に止めっぱなし・使うときだけ起動させたいのが本音です。

では、本題のRDS無限停止法を実施していきましょう!

手順

EventBridgeの設定

まず、EventBridgeのコンソール画面へ行ってみましょう。

初っ端からいろいろと選べる画面が出てくるので、「EventBridge スケジュール」を選択。

さすればスケジュール設定画面に移ります。

名前などは適当に設定して……。


スケジュールのパターンは、一週間に一度RDSを停止したいので「定期的なスケジュール」とし、
rate式で7日ごととして設定しました。
フレックスタイムウィンドウはよくわからないのでオフ!


開始日時はRDSを停止するときに表示された起動予定時刻ちょい過ぎを設定。
(せっかくEventBridgeが動いたのにRDSがまだ起動していなかったら嫌な気持ちになるため)

続いて、ターゲットの選択へ。

「RDS」を検索して選択すると、よりたくさんの選択肢に分裂します。


「stop」で検索して「StopDBInstance」を選択しましょう。


下のほうに現れるJsonには対象のRDSの名前を入れておきます。
複数対象がある場合は「,」(カンマ)で区切ればOKです!

さくさく行きます。

暗号化は必要ないかと思ったのでオフ。
アクセス許可は謎に「このスケジュールの新しいロールを作成」が選べないので、
自力でIAMロールを作りにいきましょう。

IAMロールの作成

「IAMコンソールに移動」を選択し、IAMロールを作成していきます。


「AWS のサービス」にはなぜかEventBridgeのschedulerを触るやつがなかったので、手書きします。

公式ページを参考に↓を入力。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

続いて、許可ポリシーを選択。

面倒だったら「AmazonRDSFullAccess」でもよい気がしますが(AWSのベストプラクティス無視)、
せっかくなのでRDSを止めるだけのポリシーを作成しましょうか。

「ポリシーを作成」をクリックすると、いろいろ作れそうな画面に飛びます。

便利なもので、ぽちぽち必要な設定を選んでいったら完成します。
サービスはRDS、アクションは書き込みのStopDBInstance、
リソースはすべてのリソースでいきましょう。
タグや名前はお好みで設定してください。
(私は名前を「RDS-StopDBInstance」にしました)

ここまでできたら先ほどのIAM作成画面に戻り、作ったポリシーを選択します。

あとは同様、タグや名前などをお好みで設定し、IAMロールが完成です。

EventBridgeの設定に戻る

EventBridgeの設定に戻り、作成したIAMロールを選択して次へを押せば、
EventBridgeの設定も完了です。

これでRDSは永遠に眠る

さて、以上で設定は完了ですが、本当に止まるかどうか確認するのに
一週間も待たないといけないのが面倒だったので、ちょっと設定をいじってすぐ確認してみました。

RDSをつけて……

実行開始時刻を変えて……

ドキドキしながら待つと……

勝手に止まりました! やったぜ。永遠に眠れ。

あとがき

これでRDSを眠らせ続けることができます。
EventBridgeの設定を作るのを忘れなければですが……。

3件のコメント

  1. 設定方法の詳細ありがとうございます。
    質問ですが1回目は良いと思うのですが、2回目の1週間後の再起動時刻がずれて
    停止の判断が起動よりも早く動作して停止できず、次の1週間後の判定で止まるなんてことにはならないのですか?
    この方法だと手動と異なり1週間後に再起動されなくなるという事なのでしょうか?
    RDSの自動起動と自動停止を少し間をあけて実行しないといけないのかと思っていたので
    もし知っていればご教授いただければ助かります

    1. コメントありがとうございます。

      > 1回目は良いと思うのですが、2回目の1週間後の再起動時刻がずれて
      > 停止の判断が起動よりも早く動作して停止できず、次の1週間後の判定で止まるなんてことにはならないのですか?
      こちら、可能性はございます。
      そのため、実際に使用する場合は様子を見て、必要があれば自動停止の動作タイミング設定を変更する必要があります。
      確実に止めるなら、7日+1時間といった設定がよいかと思います(最大1時間は起動してしまいますが……)。

      1. 早速の返信ありがとうございました
        とりあえず試しに7日+10分で設定して様子見ようと思って設定してみました。
        最悪を考えて毎日の定時停止も設定しておいた方が安全かもしれませんね

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA