![[コード無し] 普段使わないRDSのうっかり起動を防ぐ [ブラウザ操作のみ]](https://devio2024-media.developers.io/image/upload/v1747990750/user-gen-eyecatch/bs9ovumg6i4brxfulq0c.png)
[コード無し] 普段使わないRDSのうっかり起動を防ぐ [ブラウザ操作のみ]
AWSのサービスはますます便利になっていますが、たまにしか使わないRDSをしばらく停止しておきたい場合はまだまだ工夫が必要です。
RDSは停止したインスタンスでも、1週間後には自動で起動してしまうため、あまり使わないインスタンスでもうっかり起動してしまって料金が嵩んでしまうことがあります。
公式のポストでは以下の2つの記事が存在しますが、LambdaやIAMロールを作ったり、ちょっとばかり大変です。
今回は、opswitch というクラスメソッドが提供しているサービスを使い、
公式と同じ起動停止スケジュールを、ブラウザだけで 操作する方法を紹介します。
opswitch とは
opswitch とは、クラスメソッドが開発・提供しているサービスです。
無料で使用できるサービスなので、AWSアカウントさえあればどなたでも簡単にご利用いただけます。
opswitch は AWS FTR を通過しており、AWS認定ソフトウェアとして AWS Partner Solutions Finder (PSF) に掲載されています。
無料のサービスですが、皆さんに安心してご利用いただけるよう取り組んでいます。
今回のゴール
re:post の記事で紹介されているような以下の設定を、ブラウザ操作のみ&コーディングなしでやってみます。
- メンテナンスウィンドウが開始する30分前に、DBインスタンスを自動的に起動する。
- メンテナンスウィンドウが終了してから30分後に、DBインスタンスを自動的に停止する。
※メンテナンスウィンドウは、公式の例と同様に日曜日の 22:00〜22:30 に設定されていると仮定します。
手順
サインアップ
まず、以下のページからサインアップし、画面の案内にしたがって必要な情報を入力していきます。
AWSアカウント連携
サインアップ後、画面の案内に従って「ユーザー情報」「組織名」を入力していくと、以下の「AWSアカウント連携」の画面が表示されます。
この画面でopswitchとご利用中のAWSアカウントを連携する作業を行います。opswitch の画面上にも説明がありますが、この記事でも説明していきます。
まず、「IAM Roleを作成」ボタンを押します。
Cloud Formation の画面に移動するので、画面下部の「AWS CloudFormation によって IAMリソースが作成される場合があることを承認します。」にチェックを入れて「スタックの作成」をクリックします。
スタックによるIAMロール作成が完了すると、スタックの「出力」タブに AccountID
と IAMRoleName
の2つの値が出力されます。
この2つを、opswitchの画面にコピー&ペーストします。
最後に「アカウント名」を入力し、「作成」ボタンを押して連携作業は完了です。
タスクの作成
次に、タスクを作成します。
タスクとは、「どんな操作を」「どの対象に行うか」を定義するものです。
画面上部のメニューから「AWSタスク > RDS > DBインスタンスの起動・停止」を選択します。
画面右上の「作成」ボタンから、タスクを作成していきます。
以下のように項目を入力していきます。
「リージョン」では、操作したいインスタンスが存在するリージョンを選択してください。複数のリージョンを選択することも可能です。
「ターゲット」では、対象に付与されているタグを入力します。今回は例として opswitch-start-stop: true
のタグを使用します。
検証用のインスタンス database-1
に、以下のようにマネージドコンソール上からタグを付与しました。
opswitchの画面に戻り、虫眼鏡のアイコンをクリックしてインスタンスに過不足がないかの確認をしてみます。
正しく対象を識別できていることが確認できました。
これで「作成」を押すと、DBインスタンスを起動するタスクの作成が完了します。
同様に、停止タスクも作成しておきます。
起動タスクとは異なり、 「起動・停止」で「停止」を選択する点に注意してください。
これで、以下のように2つのタスクができました。
ジョブの作成
最後に、ジョブを作成します。
opswitch でのジョブとは「どのタスクを」「どんなスケジュールで実行するか」を決めるものです。
ジョブにタスクを設定することで、初めて処理が実行されるようになります。
今回は、「起動ジョブ」と「停止ジョブ」の2つを作ります。
まずは「起動ジョブ」を作っていきましょう。
タスクと同様、メニューから「ジョブ」を選択し、画面右上の「作成」ボタンをクリックします。
次に、以下のように入力していきます。
スケジュールは「週次」を選択し、日曜日(メンテナンスウィンドウの曜日)を選択しています。
時間は 21:30(メンテナンスウィンドウが始まる30分前)に設定します。
※メンテナンスウィンドウは、日曜日の 22:00〜22:30 に設定されていると仮定しています。
環境に合わせて、曜日と時間を修正してください。
最後に「タスク」で先ほど作成した「起動タスク」を選択し、作成ボタンを押したら起動ジョブの作成は完了です。
また、同様に「停止ジョブ」も作成していきます。
こちらは、時間を 23:00(メンテナンスウィンドウが終了してから30分後)に設定し、タスクは「停止タスク」を設定しています。
これで全ての作業が完了しました。ジョブの一覧画面では、以下のようになっています。
作業は完了ですが、動作確認を行いましょう。まず、起動ジョブのメニューから「即時実行」を選択して、DBインスタンスが起動するかを確かめます。
その後、マネージドコンソールにログインしてインスタンスのステータスを確認します。
実行してから数秒後には、マネージドコンソール上で起動中に変化したことが確認できました。
インスタンスの起動が完了したら、停止ジョブも同様に「即時実行」を行い、動作確認を行います。
同様に、数秒後にはステータスが変化しました。問題なさそうですね。
補足:メンテナンスの適用にかかる時間について
メンテナンス適用にかかる時間については、公式ドキュメントには以下のような記載があります。
メンテナンスイベントを特定の週に予定した場合、そのイベントはユーザーが指定した 30 分のメンテナンスウィンドウ中にスタートされます。ほとんどのメンテナンスイベントは 30 分のメンテナンスウィンドウ中に完了しますが、大規模なメンテナンスイベントは 30 分以上かかる場合があります。DB インスタンスが停止すると、メンテナンスウィンドウは一時停止されます。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html
基本的には30分の枠内に終わるとのことですが、一部の場合は30分の枠内には終わらないことがあるようです。
メンテナンス適用中にインスタンスを停止するとメンテナンスが一時停止されてしまうため、完了まで停止処理は行わないようにするのが望ましいです。
公式の例で「メンテナンスウィンドウが終了してから30分後」と設定されていたのは、こういった理由があるようですね。
終わりに
以上で、RDSを毎日止めるLambdaを書いたり、IAMロールを自前でセットアップしたりせず、RDSの起動時間を最小化することができました。
opswitch は他にも、EC2も同様に起動停止したり、ECSの台数を変更したりするコスト削減に便利なタスクのほか、以下の便利なオプションも備えています。
- 祝日にはジョブを実行しない機能
- ジョブの失敗時に、メールによる通知を受け取れる機能
日中のみ利用するインスタンスでも、台数が多かったり、サイズが大きいようなケースでは1日無駄な起動があるだけでコストが大きく嵩んでしまいます。そのような場合は、opswitchでコストの最適化を図ってみてはいかがでしょうか。
この機会に、ぜひ使ってみてください!