0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Instance Schedulerがアプデされたので触ってみる!

Posted at

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の画面が開き、スタック作成画面に遷移します。デフォルトでバージニア北部に遷移してしまうので、作成したいリージョンに変更します。

image.png

テンプレートが自動的に入力されていますね、次に進みます。
スタック名に任意の名前を入力し、パラメータを編集します。

image.png

今回は、クロスアカウントの検証をする予定もないので、「Default time zone」だけ編集しました。
パラメータの詳細は実装ガイドにあるので、そちらをご参照ください。

スタックオプションは特に編集せず、最後のチェックだけ入れて次へ進みます。

image.png

レビュー画面に遷移するので、送信します。

image.png

作成に時間のかかるリソースもないので、5分ほどで作成完了します。
ちなみにアーキテクチャはこちら。

image.png

超サーバーレスアーキテクチャですね、②③あたりの矢印をちょっとずらして描く感じがかっこいい

スタックの状態が「CREATE_COMPLETE」になれば作成完了です。

オペレーション

ここからは実際に設定を行っていきます。

おすすめはIaCで設定することのようですが、今回はわかりやすさ重視で、マネコンから操作します。

Instance SchedulerにはPeriodScheduleという二つの概念があります。

Periodというのが期間を定義する概念です。例えば、「平日の9:00~17:00」「月初の9:00」などの定義をします。

Scheduleは実際にインスタンスに割り当てるスケジュールで、Periodを組み合わせて定義します。例えば「月曜日の9:00に開始」と「金曜日の17:00に停止」という二つのPeriodを組み合わせることで「月曜日の9:00から金曜日の17:00まで」というスケジュールを作成することができます。

これらの設定はすべてDynamoDBで管理されるので、さっそく設定してみます。スタックの「リソース」タブにあるConfigTableを開いてみましょう。

image.png

テーブルアイテムを開くと、デフォルトでいくつかの設定が入っています。
これらの設定を参考に作ってみましょう。

image.png

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 文字列セット

image.png

これで「月曜日の9:00に開始」が完成です。
同様に「金曜日の17:00に停止」も作成します。

image.png

【参考】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 文字列セット

image.png

これでスケジュールもできました。

スケジュールの適用

スケジュールを適用するにはEC2インスタンスにタグをつけます。
スタック作成時にパラメータ「TagName」に指定した値がタグキー、タグ値は設定したいScheduleの名前です。

image.png

タグをつけてしばらく待つとResourceRegistryテーブルにインスタンスの情報が記録されます。
これで管理下になったことがわかります。
このレジストリテーブルがAWS タグ付けイベントを追跡するための強化されたスケジューリングオーケストレーションで追加された要素のようです。今まではStateテーブルで追うしかなかったんですが、これは便利ですね。

image.png

これで基本の使い方は終わりです!

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で作りました)

タグには以下のような設定を入れます。
ドキュメントを見てもわからなかったですが、ハイフン区切りで書く必要があるようです。

image.png

設定はできてそうだし、メッセージも正常に見えるけど、設定が変わらないぞ??

image.png
image.png

理解しました、ASGの設定自体を書き換えるわけではなく、予定されたアクションを追加する仕様のようです!
テスト用に直前の時間で設定してたので、予定されたアクションが編集されたころにはアクションの時間を過ぎてしまっていたんですね。

image.png

時間になってもう一度確認してみたところ、無事変わっていました!

image.png

CloudWatch ダッシュボード

めちゃくちゃいい感じのダッシュボードを自動で作ってくれます!
テスト用に一つしかないので、面白くないですが、これも非常にうれしい!

image.png

アプデ情報確認

情報リソースタグによるセルフサービストラブルシューティング

以下のタグが自動で追加されるようになったようです。

  • IS-ManagedBy-- インスタンス スケジューラ ハブ スタックの場所を示します
  • IS-LastAction-- インスタンス スケジューラによって実行された最後の成功したアクションを表示します
  • IS-Error-- スケジュール中にエラーが発生した場合にエラーコードを表示します
  • IS-ErrorMessage-- 最新のエラーコードに関する追加情報を表示します

これもめちゃくちゃうれしいですね!

代替インスタンスタイプを使用したオプションの EC2 容量不足再試行フロー

容量不足の場合に別のインスタンスタイプで立ち上げてくれるオプションです!
かなりうれしいですね、お手製で作っていた人もいらっしゃるのではないでしょうか?
試したいのはやまやまですが、大変迷惑が掛かるので自重して、設定方法だけ共有します。

以下のように、「IS-PreferredInstanceTypes」というタグキーに、カンマ区切りでインスタンスタイプを設定します。
インスタンスタイプは左から順に優先されるそうです。

image.png

ASGから実行する場合はどうなるのか、検証ができないですが、「新しいインスタンスをタグ付けする」オプションをオンにして設定してあげればできそうですね!

さいごに

進化したInstance Scheduler 皆さんも試してみてはいかがでしょうか!
もう、SSMとSchedulerでよくない?とは言わせない!

弊社では一緒に働く仲間を募集中です!

現在、様々な職種を募集しております。
カジュアル面談も可能ですので、ご連絡お待ちしております!

募集内容等詳細は、是非採用サイトをご確認ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?