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?

Instance Scheduler を使って、EC2 と RDS の起動時間を管理するメモ

Posted at

概要

基本的に土日はテスト環境とステージング環境を使う事がないので、コスト削減停止しておきたい。

以前は Lambda を使ってゴニョゴニョやっていたが、正直面倒というか最近転職したのもあってやり方を失念しているので他に簡単な方法は無いかとググってみたら Instance Scheduler という便利そうなものがあったので、やり方をメモしながらやっていく。

スタック作成手順

Instance Scheduler テンプレートを利用

Instance Scheduler のデプロイオプションから「AWSコンソールで起動する」ボタンをクリック

スクリーンショット 2024-12-31 143826.png

テンプレートの選択

GitHub上のテンプレートリストから利用するテンプレートが既に選択された状態になっているので、そのまま次へ移動

スクリーンショット 2024-12-31 144107.png

スタックの詳細を指定

スタック名はスケジュールを設定したい EC2, RDS のタグ名に指定するので覚えておく。
(※今回「DevSchedule」を設定している)

パラメータ

スクリーンショット 2024-12-31 180507.png

Schedule tag key

Instance Scheduler がスケジュールを反映するために必要なタグの名前。このタグ名を持つEC2, RDS が対象となる

Scheduling interval (minutes)

Lambda を実行するインターバル時間。設定された時間が短いほどスケジュール通りに起動・停止する。
正直 EC2, RDS が5分動く場合と Lambda が100回動いたとしても圧倒的に Lambda が安いので、必要以上に下げる必要はない。というかデフォルトの5分でよい。

Default time zone

名前のまま。スケジュールのタイムゾーン。日本で動かしているサービスであれば「Asia/Tokyo」一択。

Enable scheduling

スケジュールのオンオフ。今すぐ動かすなら Yes, 仮で設定しているだけなら No

Enable EC2 scheduling

EC2 をスケジュール対象とするか。
Enabled か Disabled

Enable RDS instance scheduling

RDS をスケジュール対象とするか。
Enabled か Disabled

Enable RDS cluster scheduling

RDSのDBクラスターをスケジュール対象とするか。Aurora や RDS マルチAZが対象。
Enabled か Disabled

Enable Neptune cluster scheduling

グラフデータベースである Nepture をスケジュール対象とするか。
Enabled か Disabled

Enable DocumentDB cluster scheduling

MongoDB互換である DocumentDB をスケジュール対象とするか。
Enabled か Disabled

Enable AutoScaling Group scheduling

時間帯によって EC2 のオートスケーリングをスケジュール対象とするか。
例えば、18:00 ~ 22:00 はアクセスが増えるのでインスタンスを増やすとか。
Enabled か Disabled

Tagging

Start tags

この設定で開始されたインスタンスにタグを設定する。
無効化する場合は空白を追加。

Stop tags

この設定で停止されたインスタンスにタグを設定する。
無効化する場合は空白を追加。

Service-specific

よく分からないのでデフォルトのまま

Create RDS instance snapshots on stop

RDS 停止時にスナップショットを取得するか。
Enabled か Disabled

Account structure

よくわからないので除外

Region(s)

このスタックを適用するリージョン。現行リージョンのみでよいなら空白のまま。

Monitoring

Log retention period (days)

ログ保存期間。短くても良さそう。

Other

SchedulingRequestHandler Memory size (MB)

Lambda 関数のメモリサイズ。まぁデフォルトで良さそう。

AsgHandler Memory size (MB)

ASGリソースをスケジュールするLambda関数のメモリサイズ。
よく分からないがタイムアウトが多い場合に増やすっぽい。

Orchestrator Memory size (MB)

マルチアカウント、マルチリージョンのスケジューリングを調整するラムダ関数のメモリサイズ。
よく分からないがタイムアウトが多い場合に増やすっぽい。

Protect DynamoDB Tables

このスタックで作成される DynamoDB に削除保護を設定するかどうか。
設定しない場合、このスタックを削除すると一緒に DynamoDB も削除される。
Enabled か Disabled

スタックオプションの設定

基本的にデフォルトにした。

スクリーンショット 2024-12-31 180617.png

アクセス許可 - オプション

設定しない場合、スタックを作成したユーザーの権限を利用する

確認画面

問題なければOK

スケジュールの設定

設定値を保持している DynamoDB に移動

CloudFormation -> スタックの詳細 -> 該当のスタックを選択 -> リソースタブを選択 -> ConfigTable から該当の DynamoDB に移動できる

スクリーンショット 2024-12-31 180853.png

[タグ名]-ConfigTable-xxxxxxxxxx テーブルの確認

「テーブルアイテムの探索」ボタンを押すとテーブルの中身を参照できる

スクリーンショット 2024-12-31 163011.png

type の種類

  • config
  • schedule(利用する period を設定する)
  • period(起動時間や曜日を設定)

今回、下記画像のように「jp-office-hours」という名称の schedule を作成し、periods には office-hours を設定した
(※office-hours には beginTime: 17:00、endTime: 17:40 が設定されているため、17:00 ~ 17:40 の間起動するスケジュールを設定したということ)

スクリーンショット 2024-12-31 181915.png

スクリーンショット 2024-12-31 181934.png

EC2, RDS にタグを設定する

スタック名は「DevSchedule」にしたため、タグ名を「DevSchedule」とする
タグの値については、設定したい schedule の name を設定する。
今回 17:00 ~ 17:40 の間起動させたいという場合は jp-office-hours を格納する

スクリーンショット 2024-12-31 182300.png

これで、17:00 ~ 17:40 の間起動する設定を EC2, RDS インスタンスに追加できる

感想

Lambda より簡単!

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?