
検証用のEC2とRDSの止め忘れを阻止する
検証に使ったEC2やRDSを止め忘れたことはありますか?私はあります。あらゆる検証リソースは止め忘れられる運命にあります。
金曜日に起動した検証インスタンスが月曜の朝に「起動中」となっていたら、1週間仕事が手につかないくらい落ち込んでしまいますね。
今回はこれを徹底的に防止する方法を紹介します。
実現方法
今回は以下の2つの手順で、目標を達成します。
- 定期的にEC2,RDSを確認し、起動してるインスタンスが1つでもあれば通知する(発見)
- 退勤時間を過ぎて起動しているインスタンスは強制的に止める(自動修正)
1.で、リソースが存在する場合にすぐに気がつけるようになります。
わざわざインスタンスを起動するからには、インスタンスは検証に利用しているはずです。そのインスタンスを強制で止めることは望ましくないため、通知をしてもらうことで止め忘れに気がつきやすくします。
しかし、それでも通知に気がつかなかったり、対応できないなどで停止できないケースもあると思います。
その場合は、2. で指定した時間で強制的にインスタンスを停止させるようにします。
これにより、検証リソースを止め忘れたことにいち早く気づき、万が一止め忘れても夜には自動で止まるという仕組みを作ります。
実際にやってみる
では、実際に設定を行っていきます。
準備: opswitch アカウント
今回は opswitch というサービスを利用します。クラスメソッドが提供している、無料サービスです。
以下のURLからサインアップできます。
サインアップすると、初期設定フローの中でAWSアカウント連携などを行います。
アカウント連携作業は、検証リソースを検知・停止したいAWSアカウントにログインした上で実行してください。
アカウント連携まで済んで、以下の画面が表示されたら準備は完了です。
手順1. 定期的に起動している EC2 と RDS を通知する。
では、まず EC2 と RDS の止め忘れを通知する仕組みを作ります。
ここで作るのは、以下の2つです。
- 「止め忘れチェック」タスク
- 止め忘れチェックを1時間ごとに実行するジョブ
まずタスクから作りましょう。
ヘッダーメニューから「AWS タスク > チェック > リソースの止め忘れチェック」を選択します。
右上の「作成」をクリックして、タスクを作成します。
作成画面では、以下のように入力します。
「組織」「AWSアカウント」は、準備で作成したものをそのまま選択してください。
「リージョン」は、検証に使いそうなリージョンを選択します。今回は東京リージョンに加え、大阪リージョンも選択しておきました。
「チェック対象」は、今回はEC2とRDSにチェックを入れます。
「チェック条件」は、起動中の全てのリソースを選択します。
そして、通知先を入力します。
メール、Slack、Teamsの3つを選択することができ、複数指定することもできます。今回はメールで通知とします。
「通知先メールアドレス」には組織に所属しているユーザーのメールアドレスが表示されるので、自分のメールアドレスを選択しました。
最後に、「止め忘れていたリソースに付与するタグ」は forgot-to-stop: true
を設定しておきます。
これは次の手順で説明します。
最後に作成ボタンを押して、タスクを作成します。
これでタスクの作成は完了です。
次に、これを1時間ごとに実行するよう設定します。
画面上部のメニュー「ジョブ」を選択し、タスク「作成」をクリックします。
作成画面では、以下のように入力します。
スケジュールは「実行間隔を指定」を選択し、開始時間を「9:00」に、実行間隔を「1時間毎」に設定します。
そして、タスクの種別から「リソースの止め忘れチェック」を選択し、タスク名の欄で先ほど作成したタスクを選択します。
これで作成したら、手順1は完了です。
手順2. 退勤時間を過ぎて起動しているインスタンスは強制的に止める
次に、起動しっぱなしのインスタンスは夜に勝手に止まるようにしましょう。
まず、画面上のメニューから「AWSタスク > EC2 > EC2インスタンスの起動・停止」を選択します。
右上の「作成」ボタンから作成画面を開き、以下のように入力していきます。
組織・AWSアカウント・リージョン は先ほどと同様です。
ポイントは、ターゲットに先ほどの止め忘れチェックタスクで止め忘れたインスタンスに付与したタグをターゲットとして指定するところです。
今回は forgot-to-stop: true
を入力します。
解説すると、手順1の作業によって、1時間に1回止め忘れたEC2,RDSをチェックし、起動しているインスタンスには全て forgot-to-stop: true
というタグが付与されるようになっています。
このタグを対象として停止操作を行う、というのが今回のターゲットの指定方法になっています。
そして、「起動・停止」は 停止
を選択し、作成を押して完了です。
RDSも同様にタスクを設定します。
画面上のメニューから「AWSタスク > RDS > RDSインスタンスの起動・停止」を選択し、以下のように入力します。
設定項目はEC2と同様です。
最後に、これを毎日夜に自動で実行するようにスケジュールします。
今回は、20時に実行するようにしてみます。
先ほどと同様に、画面上部のメニュから「ジョブ」を選択し、「作成」ボタンを押します。
作成画面では以下のように入力します。
スケジュールは 日次
を選択し、時間は 20:00
とします。
そして、タスクに先ほど作成した 止め忘れEC2 停止
止め忘れRDS 停止
のタスクを設定します。
これで、止め忘れたEC2とRDSは、毎日20時に自動で止まるようになりました!
終わりに
検証用インスタンスは立ち上げるのは簡単ですが、どうしても削除するのを忘れがちです。そうした場合に不要な費用の発生を最小限にするための工夫を今回は紹介しました。
利用料はもちろんですが、不要なリソースを立ち上げることで不要なコンピューティングリソースの消費(=電力消費)が発生するため、最小限に抑えるようにしましょう。
また、今回は夜に自動で停止するようにしましたが、夜間でも検証が発生しうる場合は通知のみに設定したりしても良いかもしれません。
皆さんの opswitch 活用のきっかけになれば幸いです。