AWS Systems Manager Quick Setup に EC2 の起動・停止が実装できる Resource Scheduler が追加されました!

Amazon EC2 起動・停止の自動化ツールに新しい選択肢が登場!
2022.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

検証環境等で特定時間(夜間など)に利用がない Amazon EC2(以降、EC2)などの AWS リソースを停止することは、コスト削減方法の一つとして知られているものかと思います。

その実装方法もいくつか存在していて、例えば下記のような方法があります。

  1. Amazon EventBridge と AWS Lambda による実装
  2. AWS ソリューションである Instance Scheduler の利用
  3. サードパーティ製品の利用(弊社 Opswitch も対応!)

今回、上記に仲間入りする方法として Resource Scheduler がリリースされました。

  • What's new

  • ドキュメント

既に AWS Blog 内で、具体的な手順記事がありますが、自分でもやってみようと思います!

やってみた

前準備

今回 EC2 インスタンスのみを対象とする機能(2022/12/22時点)のため、EC2 を2台用意します。またタグで対象を識別するため stop-start:onstop-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 環境配下での検証記事を書いてくれました!