インスタンススケジューラによる自動起動停止

AWS

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にもスケジューラが適用されます。

コメント

タイトルとURLをコピーしました