1. はじめに
- AWS環境のコスト削減に取り組んでいる。コスト削減の一番ベーシックな対策である、EC2インスタンスの夜間休日の自動停止方法について、いくつかやり方があるようなので、それぞれ試してみる。
- 今回、4つの方法を実機確認し、それぞれ記事にまとめた。
- それぞれをやってみた結果をふまえて、自分なりのメリット・デメリットやお勧めの方法をまとめる。
2. 方法の比較(個人的見解)
2.1 想定ユースケース
- 数10台程度のインスタンスを夜間休日に一括で自動停止させたい。(例: 月~金の9:00AM~21:00PMのみインスタンスを起動)
- 対象インスタンスは、インスタンスIDで指定すればよい。
- 指定時間外のインスタンス起動などは許容する。(例:朝7:00AMに開発者が個別にインスタンスを起動)
2.2 お勧めの方法
- 上記のようなユースケースであれば、方法(3)Amazon EventBridge Schedulerで実施するのが最も簡単。(実装が単一のAWSサービスで完結するため、管理面でも一番楽。)
- 原理的には方法(1)、方法(2)も方法(3)とほぼ同じであり、LambdaやSSM Automationで対応しても難易度はあまり変わらない。既存のシステムがこれらを採用しているのであれば、わざわざ変える必要はなく、そのまま使えばよい。
- 「起動・停止の状態を厳密に定義したい(指定時間外の起動は許容しない)」、「クロスアカウントで管理したい」、などの要件がある場合は、方法(4)を検討してもよい。
2.3 比較表
方法 | (1) Lambda + EventBridge | (2) SSM Automation + EventBridge | (3) EventBridge Scheduler | (4) Instance Scheduler |
---|---|---|---|---|
仕組み | EventBridgeルールで、開始・停止用Lambdaを呼出し | EventBridgeルールで、開始・停止用SSM Automation ドキュメントを呼出し | EventBridge Schedulerで、開始・停止をするAPIを直接呼出し | DynamoDBに登録されたスケジュールに従い、定期実行されるLambdaが開始・停止を制御 |
シンプル度 | ○ | ○ | ◎ | △ |
必要コンポーネント | Lambda EventBridge ルール |
SSM Automation ドキュメント EventBridge ルール |
EventBridge Schedulerのみ | Lambda EventBridge ルール DynamoDB その他(KMSなど) |
対象インスタンスの指定 | インスタンスID | インスタンスID | インスタンスID | タグ |
その他備考 | Lambda内のスクリプト修正により機能カスタマイズは可能 | SSM Automation ドキュメント修正により機能カスタマイズは可能 | 既定のAPI一覧からターゲットアクションを選択(カスタマイズは基本不可) | クロスアカウント管理など付加機能あり |
3. 所感
- ネットで検索するといろいろな方法があり混乱したが、一通り実機確認して、それぞれどのような仕組みなのかある程度理解することができた。自分で設定する場合は基本的には一番簡単な方法(3)Amazon EventBridge Schedulerを使うようにしたい。
- 自分の管理対象のシステムには、ミドルウェア操作が追加で必要などの理由で単純に上記の方法でのインスタンス開始・停止ができず、いったん自動停止の対象外にしたものもあった。そういったものにも対処できるよう工夫して対象範囲を広げていきたい。