EC2の自動起動・自動停止を行う方法を紹介したいと思います。
Lambda+CloudWatch eventsのポピュラーな構成で自動起動・自動停止を行っても良いのですが、AWSの推奨はAWS Instance Schedulerを利用して自動起動・自動停止を行う方法なので、是非AWS Instance Schedulerを構成してみてください。
CloudFormationで構成は簡単に作れます。
AWS Instance Schedulerのアーキテクチャは以下の通りです。
CloudFormationで下記構成が自動で構成されます。
前提条件
- Amazon CLIで操作を行いますので、事前にAmazon CLIがセットアップ済みのインスタンス(Linux)をご準備ください。
設定の概要
AWS Instance SchedulerでEC2のスケジュール自動起動/自動停止する方法
AWS Instance Schedulerのセットアップ方法は以下のページなどを参考にしました。
「AWS Instance Scheduler を使用してインスタンスを停止および開始する方法を教えてください。」と公式ドキュメントを参考にしました。
AWS Solution Implementation overviewのページも参考になります。
CloudFormationの展開
以下のページにアクセスして「Launch Solution」を選択します。
Step 1. Launch the Instance Scheduler Stack
マネージドコンソールにログインしていない方はログイン画面が表示されます。
ログイン後、以下のスタックの作成画面が表示されますので、リージョンをお使いのリージョンに変更して「次へ」を選択してください。
デフォルトでバージニア北部のリージョンが選択されてしまいますので、ご注意ください。
以下の画像のを参考にパラメータを入力、変更してください。
ピンクの四角い箇所以外はデフォルトのままでOKです。
スタックの名前:任意の名前
Default timezone:Asia/Tokyoに変更
Frequency:スケジュールを実行する頻度を選びます。分単位です。デフォルトの5分で問題ないと思います。
Enable CloudWatch Logs:Yesに変更
Started tags:state=startedを入力
Stopped tags:state=stoppedを入力
値をすべて入力・変更したら「次へ」を選択してください。
スタックオプションはなにも入力せず「次へ」を選択してください。
最後に承認にチェックを入れて「スタックの作成」を選択します。
イベントタブでステータスが「CREATE_COMPLETE」になれば作成完了です。
scheduler-cliのインストール
Amazon CLI設定済みインスタンスで以下のコマンドを実行してscheduler-cliをインストールします。
適当なフォルダを作ります。
mkdir
作成したフォルダに移動します。
cd temp
scheduler-cliをダウンロードします。
wget https://s3.amazonaws.com/solutions-reference/aws-instance-scheduler/latest/scheduler-cli.zip
scheduler-cliを回答します。
unzip scheduler-cli.zip
scheduler-cliをインストールします。
sudo python setup.py install
以下のメッセージが表示されましたら正常にインストール完了です。
Using /usr/lib/python2.7/site-packages
Finished processing dependencies for scheduler-cli==1.2.0
スケジュール期間を構成
続いて起動時間、停止時間を設定します。
以下のコマンドは月曜から金曜日の09:00-17:30を設定してます。
環境に応じて適意置き換えてください。
scheduler-cli create-period --stack InstanceScheduler --region ap-northeast-1 --name weekdays --begintime 09:00 --endtime 17:30 --weekdays mon-fri
書き換え箇所は以下の画像を参考にしてください。
最後の実行間隔の変更は以下のページをご参考ください。
参考情報
例えば月の1日と2日だけ起動とかでしたら「–moundays 1,2」とかになります。「–weekdays mon-fri」だと月曜日〜金曜日になります。
土日だけ止めるとかは以下のように3コマンド実行する必要があります。
複数コマンド実行もOKです。
月曜日の9時に起動するコマンド
scheduler-cli create-period –stack instanceScheduler –name mon-start-9am –weekdays mon –begintime 9:00 –endtime 23:59
火曜日から木曜日はフル稼働のコマンド
scheduler-cli create-period –stack instanceScheduler –name tue-thu-full-day –weekdays tue-thu
金曜日の17時に停止するコマンド
scheduler-cli create-period –stack instanceScheduler –name fri-stop-5pm –weekdays fri –begintime 0:00 –endtime 17:00
スケジュールを定義する
それでは続いて前項で設定した期間で動作するようにスケジュールを定義します。
以下のコマンドを実行して定義します。
scheduler-cli create-schedule --stack InstanceScheduler --name ec2-office-hours --periods weekdays --description “ec2startend” --timezone Asia/Tokyo --region ap-northeast-1
書き換え箇所は以下の画像を参考にしてください。
任意の名前は後ほどタグ付で入れます。
インスタンスへのタグ付け
自動起動・停止を行いたいインスタンスにチェック→アクション→インスタンスの設定→タグの追加/編集 を選択してください。
キーに「Schedule(スタックのデフォルト値)」値に前項で入力した任意の名前を入力して「保存」をしてください。
以上で自動起動・自動停止の設定は完了です。
設定した時間に起動・停止が行われたら正常に設定が完了しております。
スタックを一度作成してスケジュールの定義をしておけばあとは種別に応じてタグを変えていくだけなので非常に便利だと思います!
リージョン毎に作成する必要がありますので、複数リージョンをお使いの方はリージョンの数だけ繰り返し行ってください。
わかりやすく書いたつもりですが、コマンドなどわからない方はtwitterのDMやお問い合わせフォームからご質問いただければ回答します。