AWSが提供しているインスタンススケジューラ用のCloudFormationテンプレートを使用して、インスタンス(EC2やRDS)の起動停止をスケジュールで制御できるようになります。
インスタンススケジューラ概要
インスタンススケジューラはAWSの1つのサービスとして提供しているわけではなく、
複数のAWSサービス組み合わせて実装しているサービスになります。
公式にも記載のおとり下記サービスを実際に使ってます。

インスタンススケジューラ用のCloudFormationテンプレートが用意されているのでこれをダウンロード
してCloudFormationに取り込めば上記環境が構築されるようになってます。
インスタンススケジューラ実装
事前準備として上記URLからCloudFormationテンプレートをDLしておく。
1.CloudFormationのスタック作成
CloudFormation ⇒ スタックの新規作成を実行。
テンプレートの指定は「テンプレートファイルのアップロード」を選択して、DLしたテンプレートを指定。

スタックの詳細を指定する。
Instance Scheduler tag name:ここで指定したタグをインスタンスに付与するとスケジューラ対象のインスタンスになる。(デフォルトのScheduleを指定。)
Service(s) to schedule:スケジュール対象のサービスを選択。(BothはEC2とRDSの両方。)
Regions:対象のリージョンを選択。(東京リージョンを指定。)
Default time zone:タイムゾーンを設定。(日本時間で設定したいのでAsia/TOKYOを指定。)
その他項目についてはデフォルトで「次へ」



次のスタックオプションの設定も特に変更しないで「次へ」
最後にこれまでの設定した内容のレビュー画面になるのでそのまま「スタックの作成」をする。
スタックが作成されていることを

2.DynamoDBでスケジュール設定
スケジュールの設定はDynamoDBで実施します。
DynamoDBにテーブルが作成されていることを確認。

「Stack-Instance-Scheduler-ConfigTable~」を選択した状態で、アクション ⇒ 項目を探索を実施。
下記の通りType列がconfig/schedule/periodの項目が表示される。

「poriod」Typeは起動や停止の曜日や時間を指定できます。
「項目作成」からまずはperiodを作成する。
今回は下記の様に指定して「変更を保存」。
type:period
name(poriodの名前):test-stop-start
begintime(起動時刻):16時30分
endtime(停止時刻):17時00分
曜日(weekdays):土曜~日曜

次に「schedule」を作成。
type:schedule
name(poriodの名前):test-schedule
periods:test-stop-start (先ほど作ったやつ)
timezone:Asia/Tokyo

以上でスケジュール設定は完了。
3.動作確認
インスタンススケジューラで制御したいインスタンス(今回はEC2)に対してタグを付与します。
タグ名はkeyが「Schedule」でValueが「test-schedule」と設定。

対象のインスタンスが停止済みの状態で

(土曜もしくは日曜)16時30分になると勝手に起動します。

また、17時ちょうどになると勝手に停止します。

クロスアカウントでのインスタンススケジューラ
インスタンススケジューラはクロスアカウント環境でも適用することができます。
Aアカウントで作成したスケジュール定義をBアカウント上のインスタンスにタグ付与することで
スケジュール制御することが可能。
まず、クロスアカウント用のテンプレートをDLします。
テンプレートを使ってアカウントBのCloudFormationに新規作成でスタックを作成します。
その際、Primary account欄にアカウントAのAWSアカウントIDを入力します。

スタック作成後、出力タブからCrossAccountRoleの値を控えておく。
次にアカウントA側のCloudFormationのスタックで「Cross-account roles」に
先ほど控えたアカウントBのCrossAccountRoleの値を設定します。

以上の設定でアカウントBにもスケジューラが適用されます。
コメント