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:StopInstancesrds: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の汎用性の高さに改めて気づかされました。「度のサービスが何をどこまでできるのか」という境界線を知ることが、合格への近道ですね。
それでは、次回の記事でお会いしましょう!

