Instance Schedulerを使ってEC2, RDSの定期停止

AWS

概要

  • 平日昼間しか稼働しないお値段高めのインスタンスがあるので節約します。
  • CloudWatchやLambdaで簡易的に実装されている例がありますが、ステート管理や設定の柔軟さに欠けます。
  • こちらの設定が良さげです。
    • 停止やスタートのステートを保管しているので効率的な実行

設定概要

テンプレートの内容

デフォルトではいくつか設定が入っているのでDynamoDBのテーブルを見てみるのが良いと思います。どのようなロジックなのかがなんとなくわかると思います。typeがscheduleになっているレコードが実行される設定です。crontabの行のようなものです。

CloudFormationでのデプロイ後

デフォルトで入稿されているオフィスアワーの設定を更新します。fish用設定

set stack sleep-night-and-weekend-ec2
set aws_profile default
set name office-hours
set region ap-northeast-1
scheduler-cli update-period --name $name --begintime 09:00 --endtime 23:00 --weekdays mon-fri --stack $stack --profile-name $aws_profile --region $region

日本時間での計画停止の設定を入稿します。

set periods office-hours
set schedule jp-office-hours
set description "Office hours in Japan"
set stack sleep-night-and-weekend-ec2
set aws_profile default
set region ap-northeast-1
scheduler-cli create-schedule --stack $stack --name $schedule --periods $periods --description "$description" --timezone Asia/Tokyo --profile-name $aws_profile --region $region

以下のレコードが追加されます。

あとは規定のTagをEC2に打てば終わり。

set instance_id 'i-0d13c9eb8xxxxxxxxxx'
aws ec2 create-tags \
    --resources $instance_id \
    --tags Key=Schedule,Value=jp-office-hours

CloudWatchLogsを確認。デフォルトは5分ごとにこのスタックが実行されるので5分以内にはas-isになります。

コメント