AWS Instance Schedulerとは?
AWS Instance SchedulerはAWSが提供するソリューションの一つで、EC2、RDSインスタンスの起動、停止をスケジューリングすることができます。
ソリューションというのは、AWSのサービスを組み合わせて提供される機能のことです。公式が提供するOSSのようなイメージ。CloudFormationでスタックを作成するだけで作れてしまうのが素晴らしいところです。
そんなAWS Instance Schedulerですが、かなり昔からあるソリューションで、あまりアップデートなど多いイメージはないのですが、2026年1月21日にアップデート情報が公開されました。
主なアップデート情報は以下の通りです。
- AWS タグ付けイベントを追跡するための強化されたスケジューリングオーケストレーション
- 情報リソースタグによるセルフサービストラブルシューティング
- 代替インスタンスタイプを使用したオプションの EC2 容量不足再試行フロー
- AWS 上の Instance Scheduler (IS) のイベントをスケジュールするための専用 EventBridge バスの自動作成
個人的には3つ目の代替インスタンスタイプを使用したオプションのEC2容量不足再試行フローが非常に気になります!
せっかくなので、復習もかねていろいろ試してみようと思います。
AWS Instance Schedulerのデプロイ
実装ガイドに従ってデプロイしていきます。
「Launch solution」をクリックすると、CloudFormationの画面が開き、スタック作成画面に遷移します。デフォルトでバージニア北部に遷移してしまうので、作成したいリージョンに変更します。
テンプレートが自動的に入力されていますね、次に進みます。
スタック名に任意の名前を入力し、パラメータを編集します。
今回は、クロスアカウントの検証をする予定もないので、「Default time zone」だけ編集しました。
パラメータの詳細は実装ガイドにあるので、そちらをご参照ください。
スタックオプションは特に編集せず、最後のチェックだけ入れて次へ進みます。
レビュー画面に遷移するので、送信します。
作成に時間のかかるリソースもないので、5分ほどで作成完了します。
ちなみにアーキテクチャはこちら。
超サーバーレスアーキテクチャですね、②③あたりの矢印をちょっとずらして描く感じがかっこいい
スタックの状態が「CREATE_COMPLETE」になれば作成完了です。
オペレーション
ここからは実際に設定を行っていきます。
おすすめはIaCで設定することのようですが、今回はわかりやすさ重視で、マネコンから操作します。
Instance SchedulerにはPeriodとScheduleという二つの概念があります。
Periodというのが期間を定義する概念です。例えば、「平日の9:00~17:00」「月初の9:00」などの定義をします。
Scheduleは実際にインスタンスに割り当てるスケジュールで、Periodを組み合わせて定義します。例えば「月曜日の9:00に開始」と「金曜日の17:00に停止」という二つのPeriodを組み合わせることで「月曜日の9:00から金曜日の17:00まで」というスケジュールを作成することができます。
これらの設定はすべてDynamoDBで管理されるので、さっそく設定してみます。スタックの「リソース」タブにあるConfigTableを開いてみましょう。
テーブルアイテムを開くと、デフォルトでいくつかの設定が入っています。
これらの設定を参考に作ってみましょう。
Periodの作成
まずは先ほど例に挙げた「月曜日の9:00から金曜日の17:00まで」というスケジュールを作るため、「月曜日の9:00に開始」と「金曜日の17:00に停止」という二つのPeriodを作ってみます。
以下のような設定で項目を作成します。
| 属性名 | 値 | タイプ |
|---|---|---|
| type | period | 文字列 |
| name | monday-9am-start | 文字列 |
| begintime | 09:00 | 文字列 |
| description | Begin 9 AM on Monday | 文字列 |
| weekdays | mon | 文字列セット |
これで「月曜日の9:00に開始」が完成です。
同様に「金曜日の17:00に停止」も作成します。
【参考】weekdays/months/monthdaysの書き方
weekdays/months/monthdaysには特殊な書き方があり、結構柔軟に設定が可能です。
【weekdays】
| 例 | 意味 |
|---|---|
| mon | 月曜日 |
| mon-fri | 月曜日から金曜日 |
| mon, tue | 月曜日と火曜日 |
| mon#1 | 第一月曜日 |
| friL | 最終金曜日 |
【months】
| 例 | 意味 |
|---|---|
| jan | 1月 |
| jan-mar | 1~3月 |
| jan/3 | 1月から3か月ごと |
【monthdays】
| 例 | 意味 |
|---|---|
| 1, 2, 3 | 1, 2, 3日 |
| 1-3 | 1~3日 |
| 1/7 | 1日から7日ごと |
| 1L | 後ろから1日 |
| 15W | 15日に一番近い平日 |
祝日も大抵第1月曜日のような定義があるので、設定できますが、春分の日など、どうしても難しい日もあるんですよね。
Scheduleの作成
次にスケジュールを作ります。
| 属性名 | 値 | タイプ |
|---|---|---|
| type | schedule | 文字列 |
| name | mon9am-fri5pm | 文字列 |
| description | Begin 9 AM on Monday and end 5 PM on Friday | 文字列 |
| periods | monday-9am-start,friday-5pm-end | 文字列セット |
これでスケジュールもできました。
スケジュールの適用
スケジュールを適用するにはEC2インスタンスにタグをつけます。
スタック作成時にパラメータ「TagName」に指定した値がタグキー、タグ値は設定したいScheduleの名前です。
タグをつけてしばらく待つとResourceRegistryテーブルにインスタンスの情報が記録されます。
これで管理下になったことがわかります。
このレジストリテーブルがAWS タグ付けイベントを追跡するための強化されたスケジューリングオーケストレーションで追加された要素のようです。今まではStateテーブルで追うしかなかったんですが、これは便利ですね。
これで基本の使い方は終わりです!
AutoScalingGroup(ASG)のスケジューリング
Instance SchedulerではEC2インスタンスやRDSインスタンスを単純にスケジューリングするだけでなく、EC2 ASGのスケジューリングをすることもできます。
ASGの設定は「最小容量」「希望容量」「最大容量」でMin/Desire/Maxの頭文字をとってMDMと略すようです。
この3つの設定値をスケジューリングすることができます。たとえば「営業時間中はMDMを1,2,3に設定し、それ以外の時間は0,0,0に設定する」といった感じです。
ASGの停止状態はデフォルトでMDM 0,0,0で設定されます。今は変更できないっぽいので「営業時間中はMDMを3,5,7に設定し、それ以外の時間は1,2,3に設定する」みたいなことをしたい場合は、自分でCloudFormationの中身をいじくる等の工夫が必要そうです。
いくつか制限事項があるので、注意してください。(一部のPeriodの表現が使えないなど)
さっそくやってみたいと思います!
適当な設定で作成したEC2 ASGにタグをつけます。(MDMは0,0,0で作りました)
タグには以下のような設定を入れます。
ドキュメントを見てもわからなかったですが、ハイフン区切りで書く必要があるようです。
設定はできてそうだし、メッセージも正常に見えるけど、設定が変わらないぞ??
理解しました、ASGの設定自体を書き換えるわけではなく、予定されたアクションを追加する仕様のようです!
テスト用に直前の時間で設定してたので、予定されたアクションが編集されたころにはアクションの時間を過ぎてしまっていたんですね。
時間になってもう一度確認してみたところ、無事変わっていました!
CloudWatch ダッシュボード
めちゃくちゃいい感じのダッシュボードを自動で作ってくれます!
テスト用に一つしかないので、面白くないですが、これも非常にうれしい!
アプデ情報確認
情報リソースタグによるセルフサービストラブルシューティング
以下のタグが自動で追加されるようになったようです。
- IS-ManagedBy-- インスタンス スケジューラ ハブ スタックの場所を示します
- IS-LastAction-- インスタンス スケジューラによって実行された最後の成功したアクションを表示します
- IS-Error-- スケジュール中にエラーが発生した場合にエラーコードを表示します
- IS-ErrorMessage-- 最新のエラーコードに関する追加情報を表示します
これもめちゃくちゃうれしいですね!
代替インスタンスタイプを使用したオプションの EC2 容量不足再試行フロー
容量不足の場合に別のインスタンスタイプで立ち上げてくれるオプションです!
かなりうれしいですね、お手製で作っていた人もいらっしゃるのではないでしょうか?
試したいのはやまやまですが、大変迷惑が掛かるので自重して、設定方法だけ共有します。
以下のように、「IS-PreferredInstanceTypes」というタグキーに、カンマ区切りでインスタンスタイプを設定します。
インスタンスタイプは左から順に優先されるそうです。
ASGから実行する場合はどうなるのか、検証ができないですが、「新しいインスタンスをタグ付けする」オプションをオンにして設定してあげればできそうですね!
さいごに
進化したInstance Scheduler 皆さんも試してみてはいかがでしょうか!
もう、SSMとSchedulerでよくない?とは言わせない!
弊社では一緒に働く仲間を募集中です!
現在、様々な職種を募集しております。
カジュアル面談も可能ですので、ご連絡お待ちしております!
募集内容等詳細は、是非採用サイトをご確認ください。


















