1. はじめに
- AWS環境のコスト削減に取り組んでいる。コスト削減の一番ベーシックな対策である、EC2インスタンスの夜間休日の自動停止方法について、いくつかやり方があるようなので、それぞれ試してみて、難易度やメリット・デメリットを比較する。
- 本記事ではシンプルかつノーコードで設定できる方法(Systems Manager Automation + EventBridge)の動作確認を行う。
2. やったこと
- 自動起動・停止対象とするインスタンスを1台用意する。
- 以下のスケジュール設定により、夜間休日のインスタンス自動停止を実現する。
- EventBridgeルールで、月~金の9:00AMに、インスタンスを起動するSystems Manager Automation ドキュメント(以下 SSM Automationドキュメント)を設定する。
- EventBridgeルールで、月~金の21:00PMに、インスタンスを停止するSSM Automation ドキュメントを設定する。
3. 構成図
4. 手順
4.1 事前準備
- 自動起動・停止の対象とするEC2インスタンスを作成する。このインスタンスのインスタンスIDを指定して自動起動・停止の操作を行う。
4.2 IAMロールの作成
- EventBridgeに対し、SSM Automationを呼び出すことを許可する権限を付与する必要があり、そのためのIAMロールを作成する。
- IAM -> ロール -> ロールを作成 ->「信頼されたエンティティタイプを選択」にて、「一般的なユースケース」-> 「EC2」を選択する。
このロールの作成時、最初から信頼されたエンティティを「EventBridge」にしたいが、2023/5現在、その指定ができないので、いったんEC2などの別のエンティティを選択し後で変更する。
- 許可ポリシーとして、「AmazonSSMAutomationRoleを選択する。
- ロール名(mksamba-AmazonSSMAutomationRole)を付けて、いったんロールを作成する。
- 作成したロールを開き、「信頼関係」のところの「信頼されたエンティティ」内のJSONにて、「ec2.amazonaws.com」を「events.amazonaws.com」(EventBridgeサービス)に変更する。
4.3 EventBridgeからのSSM Automation ドキュメントの呼び出し
- インスタンス停止を行うSSM Automation ドキュメントを呼び出すEventBridgeルールを作成する。
- Amazon EventBridge > ルール > ルールを作成にて、ルール名「mksamba-instance-stop-SSM
」とし、ルールタイプは「スケジュール」を選択し、「続行してルールを作成する」に進む。
- 月~金の21:00PMに動作するよう、cron式を設定する。今回は「0 12 ? * MON-FRI *」で設定。動作スケジュールの確認はJSTで可能だが、CRON式はUTCで入力する必要がある。
- ターゲット(時間になったら実行する内容)として、「AWSのサービス」->「Systems Manager オートメーション」-> 「AWS-StopE2Instance」を選択し、対象のInstanceIdを入力し、実行ロールとして前の手順で作成した「mksambaSSMAutomationRole」を選択し、ルールを作成する。
- 同様に、インスタンス開始を行うSSM Automation ドキュメントを呼び出すルール「mksamba-instance-start-SSM」を作成する(画面は省略)。開始は月~金の9:00AMとするため、CRON式は「0 0 ? * MON-FRI *」となる。また、実行するSSMオートメーションドキュメントは「AWS-StartEC2Instance」となる。
4.4 停止・起動の動作確認
-
検証用に、13:59に起動、14:02に停止するようにEventBridgeの時刻設定を変更する。
-
SSM Automation の実行ログは以下のようになる。
- Cloudtrailのログは以下のようになる。
5. 参考
-
Amazon EventBridge と AWS Systems Manager オートメーション を使用したEC2インスタンスの起動、停止の自動化
- Systems Manager Automation + EventBridge を使った手順を詳細に説明。こちらの記事を参考に本記事も後追い検証させて頂いた。
-
- 上記記事同様、Systems Manager Automation + EventBridgeを使用した手順の解説。
6. 所感
- SSM Automation を初めて使った。今回は既定(出来合い)のドキュメントを使用したが、ドキュメントを修正することで動作のカスタマイズが可能であり、SSM Automation に慣れている人にマッチする方法かなと思った。