
AWS Systems Manager Quick Setup に EC2 の起動・停止が実装できる Resource Scheduler が追加されました!
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
検証環境等で特定時間(夜間など)に利用がない Amazon EC2(以降、EC2)などの AWS リソースを停止することは、コスト削減方法の一つとして知られているものかと思います。
その実装方法もいくつか存在していて、例えば下記のような方法があります。
- Amazon EventBridge と AWS Lambda による実装
- AWS ソリューションである Instance Scheduler の利用
- サードパーティ製品の利用(弊社 Opswitch も対応!)
今回、上記に仲間入りする方法として Resource Scheduler がリリースされました。
- What's new
- ドキュメント
既に AWS Blog 内で、具体的な手順記事がありますが、自分でもやってみようと思います!
やってみた
前準備
今回 EC2 インスタンスのみを対象とする機能(2022/12/22時点)のため、EC2 を2台用意します。またタグで対象を識別するため stop-start:on と stop-start:off のパターンに分けて片方だけ実行されることを確認します。

Resource Scheduler 設定
それでは AWS Systems Manager(以降、SSM)で設定していきます。
Systems Manager >>> Quick Setup >>> Resource Scheduler >>> 作成 を選択

対象となるタグを入力します。(候補選択ではなく完全入力)

(余談) 適切なタグが付与されていない EC2 を停止して... と思いましたがタグが必須項目になっていました。そういう用途は今まで通り Config Rules で実装するのが良いようです。

スケジュールを設定します。

ここで複数リージョンに展開したい場合は、「リージョンを選択」で対象にチェックをつけます。作成を選択します。

各リソースが作成されます。

CloudFormation で必要なリソースを作成しています。
- SSM Change Calendar
- SSM Document
- IAM Role ... etc

SSM Change Calendar を見てみると専用のカレンダーと予定が作成されています。

あとは、結果を待ちます。16:00 に停止して、17:00 に起動する想定です。
結果
AWS Config で結果を確認していきます。
- i-0c156cbd12a2d0cc1 (tag-on)
対象インスタンスのため 16:00 に StopInstances イベントが、17:00 に StartInstances が記録されています。

- i-0de9f7945e50301c8 (tag-off)
非対象インスタンスのため、当該時間帯に停止や起動に関するイベントが記録されていません。

想定した結果が得られました。ついでに SSM 側の処理結果も見てみます。
SSM Automation に結果が記録されています。SSM Change Calendar でスケジュールを管理、Automation で処理を実行しているようですね。

まとめ
EC2 の自動起動・停止が実装できる Resource Scheduler をやってみました。他リージョンや他アカウントへの展開は検証出来ていませんが、とても簡単に実装することが出来ました。設定変更も SSM Quick Setup から可能なため、管理も簡単です。利用しない時間帯のリソースを停止するのはコスト削減効果も大きいため、やっておきたい施策です。その方法の選択肢が多くあるというのは、ワークロードや組織の習熟度によって選択の幅が出るので良いですね。
現在は対象が EC2 インスタンスのみなので、他リソースも可能になるとなお嬉しいですね!
追記
hayashi.masaya さんが Organizations 環境配下での検証記事を書いてくれました!








