1
0

AWS Instance Schedulerを使ってEC2インスタンスを自動起動・自動停止する

Last updated at Posted at 2024-04-28

はじめに

AWS Instance Schedulerは、Amazon Elastic Compute Cloud (Amazon EC2) と Amazon Relational Database Service (Amazon RDS) のインスタンスの開始と停止を自動化するためのアーキテクチャです。

本記事では、実際にInstance SchedulerをCloudFormationテンプレートから払い出して、最もシンプルな形でのEC2インスタンスの自動起動・自動停止を実践してみます。

Instance Scheduler アーキテクチャ

AWSの公式からアナウンスされているInstance Schedulerのフル機能は、下記のようなアーキテクチャ図になります。

instance-scheduler-on-aws.6a76bdccb7ff3610934f86dba7d1d4678a0b9e4b.jpg

↓ 今回利用する機能だけに絞ったアーキテクチャ図はこんな感じ。

図1.png

かなりシンプルな図になりましたね。
流れとしては、以下のようになります。

①CloudWatchが定義した間隔で、Lambda関数が呼び出される。
②呼び出されたLambda関数は、DynamoDBに保存されているスケジュール定義を読み込む。
③読み込んだスケジュール定義とEC2に付与されている「Schedule」タグを照合して、
 Lambda関数がインスタンスの起動停止をコントロールする。

Instance Scheduler ハンズオン

実際にInstance SchedulerをCloudFormationから払い出してみましょう。

ざっくり手順
1. CloudFormationテンプレートからInstance Schedulerを払い出す。
2. DynamoDBに保存されているスケジュール定義を変更して、
  独自のスケジュールを作成する。
3. インスタンスに、Lambda関数が参照するタグを付与する。
4. インスタンスが自動で停止・起動していることを確認する。

それではやっていきます。

1. CloudFormationテンプレートからInstance Schedulerを払い出す。

・まずは下記のURLから、[AWSコンソールで起動する]を選択して、
 AWSコンソールとCloudFormationを起動させる。
【URL】https://aws.amazon.com/jp/solutions/implementations/instance-scheduler-on-aws/

aaa240427_005.JPG

画面遷移後、ログイン先のアカウント払い出し先のリージョン
想定通りであることを確認する。


・スタックの作成
 全部デフォルトで[次へ]

画面キャプチャ

240428_001.JPG


・スタックの詳細を指定
 下記の設定を変更して[次へ]

パラメータ
スタック名 InstanceScheduler
Default time zone Asia/Tokyo
Enable CloudWatch Metrics Yes
画面キャプチャ

240428_002.JPG

240428_003.JPG

240428_015.JPG

240428_005.JPG


・スタックオプションの設定
 全部デフォルトで[次へ]

画面キャプチャ

240428_006.JPG

240428_007.JPG


・確認して作成
 画面最下部の下記にチェックを入れて[送信]

  • AWS CloudFormationによってIAMリソースが作成される場合があることを承認します。
画面キャプチャ

240428_008.JPG

240428_009.JPG

240428_010.JPG


スタックのステータスが[CREATE_COMPLETE]になったら完了です。

240428_014.JPG


2. DynamoDBに保存されているスケジュール定義を変更して、独自のスケジュールを作成する。

DynamoDBのレコードと、インスタンスの自動停止・起動のスケジューリングは、
以下のように紐づけされています。
ピリオド定義、スケジュール定義、インスタンスに付与するタグをカスタマイズしていきます。
IMG_1666758004.png

・DynamoDBにアクセスして、レコードを確認
 DynamoDBの中に、[InstanceScheduler-ConfigTable-*******]テーブルが
 あることを確認して、左ペインの[項目を探索]から上記テーブルの内容を参照する。

画面キャプチャ

240428_023.JPG

 それぞれのtypeと定義は下の表のように対応しています。

type 対応する定義
Config InstanceSchedulerのコンフィグ情報(変更不可)
period ピリオド定義
schedule スケジュール定義

・新しい「ピリオド定義」(period)を作成
 typeがperiodのレコードを、どれでもいいので[項目の複製]から複製後、
 インスタンスの起動停止時刻を指定する。

画面キャプチャ

240428_033.JPG

240428_044.JPG

 今回は下記のように定義しました。
 土日のお昼頃に検証してただけなので、
 定義した時間に深い意味はありません。

属性名
name InstanceSchedulerTest
begintime 11:10
endtime 11:20
weekdays sat-sun

図にすると今こんな感じ。
図2.png


・新しい「スケジュール定義」(schedule)を作成
 ピリオド定義と同じように、typeがscheduleのレコードを、
 どれでもいいので[項目の複製]から複製後、
 インスタンスに付与するタグ名とtimezoneを指定する。

画面キャプチャ

240428_027.JPG

 下記のように定義しました。

属性名
name InstanceSchedulerTestSchedule
periods InstanceSchedulerTest
time zone Asia/Tokyo

図にすると今こんな感じ。
図3.png

これでDynamoDB内の操作は完了です。


3. インスタンスに、Lambda関数が参照するタグを付与する。

 インスタンスに、先ほどDynamoDBで指定した[Schedule]タグを付与します。
 インスタンスは前もって作成しておいたテスト用のインスタンスを使います。

画面キャプチャ

240428_028.JPG

240428_029.JPG

240428_030.JPG

図にすると今こんな感じ。完成です。
図4.png


4. インスタンスが自動で停止・起動していることを確認する。

 定義した時刻にインスタンスが起動され、
 その後定義した時刻に終了していることが確認できます。

 インスタンスには起動・停止時に[InstanceScheduler-LastAction]タグが付与されます。
240428_040.JPG
240428_041.JPG

所感

今回は最もシンプルな形での起動・停止でしたが、
CloudFormationテンプレートを変更することで機能拡張することも可能です。
必要ない機能を削ってもいいですし、機能を追加してもいいですし、
IaCはこうして容易に再現・拡張できるところがやはり大きなメリットですね。

引用元

[1]AWS での Instance Scheduler
https://aws.amazon.com/jp/solutions/implementations/instance-scheduler-on-aws/

[2]AWS での Instance Scheduler実装ガイド
https://d1.awsstatic.com/Solutions/ja_JP/instance-scheduler-on-aws.pdf

[3]InstanceScheduler on AWS Workshop ( Japanese )
https://catalog.us-east-1.prod.workshops.aws/workshops/7afe32b1-9ffa-4372-9a12-5905de89b593/ja-JP

1
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
1
0