【AWS SAA対策 #06】Lambdaでコスト削減!EC2とRDSを自動で「夜間停止」させる賢い方法

AWS

AWSを運用していて、こんな風に思ったことはありませんか?

「夜間や休日、誰も使っていない開発環境のサーバー代がもったいない⋯⋯」

塵も積もれば山となるクラウド利用料。業務時間外にインスタンスを自動で止めて、朝になったら自動で起動する。そんな「当たり前だけど、手動でやるのは面倒な運用」をスマートに解決するのが、今回のテーマです。

私は最初、「cronジョブ(定期実行の設定」があれば十分かな?」と思っていましたが、AWSの世界ではもっと「確実で拡張性の高い正解」がありました。

「いつ」と「何を」を分ける考え方

自動起動・停止を実現するには、2つの役割を組み合わせます。

1.「いつ」実行するか(トリガー):Amazon EventBridge スケジュール
 「平日の朝8時に起動」「夜20時に停止」といったスケジュールを管理します。

2.「何を」実行するか(アクション):AWS Lamda
 実際に「EC2を止めて!」「RDSを動かして!」とAWSに命令を出すプログラム(関数)です。

なぜLamdaを使うのか?

EventBridgeから直接EC2を止めることも一部可能ですが、実務や試験ではLamdaを介する構成が推奨されます。
理由は、複数のインスタンスを一括で処理したり、エラーが起きた時にログを残したりといった「かゆいところに手が届く」制御ができるからです。

実践!自動停止システムを構築する3ステップ

ステップ1:Lamdaに「権限(IAMロール)」を与える

Lamdaは勝手に他人のサーバーを止めることはできません。

  • ec2:StartInstances / ec2:StopInstances
  • rds:StartDBInstance / rds:StopDBInstance

これらの許可証(IAMポリシー)を持たせたIAMロールを作成し、Lamdaにアタッチします。

ステップ2:Lamda関数を作成する

Pythonなどのコードで、対象のインスタンスIDを指定して「止める(Stop)」または「動かす(Start)」処理を書きます。
※ここでのポイントは、EC2だけでなくRDSも止められるということ。RDSも「停止中」はインスタンス料金がかからないため、節約効果が絶大です!

ステップ3:EventBridgeでスケジュールを組む

「月〜金の20:00(JST)」といったスケジュールを設定します。
【注意点】AWSのスケジュール設定(Cron式)は基本的にUTC(協定世界時)です。日本時間(JST)にするには、「-9時間」の計算が必要なので、設定ミスには気をつけましょう!

試験で役立つ!キーワード判別法

コスト削減やスケジュール実行の問題で、以下の組み合わせがあれば正解の可能性が高いです!

  • 「コスト効率の向上」 ✕ 「自動起動・停止」 → Lamda + Eventbridge
  • 「業務時間外のみ停止」 → EventBridge(スケジュール)
  • 「Auto ScalingではRDSを制御できない」 → Lamdaが必要

今回の学び:攻略の格言

「夜休む サーバー代を Lamdaでカット。時差を忘れるな EventBridge!」

あとがき:一歩ずつ、合格へ

最後まで読んでいただき、ありがとうございました!

今回の構成は、SAAの試験対策としてはもちろん、実際の業務でもすぐに導入できる非常に実用的な内容です。

私は最初、「Auto Scalingで台数を0にすればいいのでは?」と考えましたが、RDSはAuto Scalingの対象外だということに気づき、Lamdaの汎用性の高さに改めて気づかされました。「度のサービスが何をどこまでできるのか」という境界線を知ることが、合格への近道ですね。

それでは、次回の記事でお会いしましょう!