定期的に EC2・RDS インスタンスを停止・起動する仕組みの CloudFormation テンプレート

2017.06.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

以前、EC2 を定期的に停止・起動する CloudFormation テンプレートを作成しました。

定期的に EC2 インスタンスを停止・起動する仕組みの CloudFormation テンプレート

先日、RDS も停止・起動できるようになったので、 RDS の停止・起動も CloudFormation に組み込み、EC2/RDS を定期的に自動停止・起動できるようにしました。

RDS の停止・起動は制約がありますので、事前に下記エントリを一読することをオススメします。

[速報] RDSインスタンスの起動/停止

仕組み

起動/停止それぞれの CloudWatch Events により、指定したcron形式の日時で Lambda が実行され、特定のタグが設定されたインスタンスが起動/停止されます。

自動停止起動(ブログ用)

リトライ処理が実装されていないため、本番のインスタンスへのご利用はお控えください。

手順

  • CloudFormation からデプロイする
  • 対象とする EC2 インスタンス、RDS インスタンスへタグを設定する

CloudFormation からデプロイする

下のボタンから CloudFormation の画面へ遷移します。

State Scheduler を起動

対象の EC2 / RDS は同一リージョンからしか検索しないため、必要に応じて、リージョンを変更してください。

CloudFormation テンプレートは URL が入力されていますので、そのまま「Next」をクリックします。

Create_A_New_Stack

パラメータを設定します。

Create_A_New_Stack

デフォルト設定の場合、state-scheduler:Trueのタグが設定された EC2インスタンス、RDSインスタンスを日本時間の月〜金の24時に停止し、月〜金の6時に起動します。平日の6時〜24時のみ起動している、ということになります。

パラメータ名 説明 デフォルト値
StartSchedule 起動を実行するスケジュールをUTCタイムゾーンで cron 式で記述します。 cron 式についてはこちら 0 21 ? * SUN-THU *
StopSchedule 停止を実行するスケジュールをUTCタイムゾーンで cron 式で記述します cron 式についてはこちら 0 15 ? * MON-FRI *
TagKey 起動/停止したいEC2、RDSに設定するタグのキー state-scheduler
TagValue 起動/停止したいEC2、RDSに設定するタグの値 True

設定したら「Next」をクリックします。

オプションはそのまま「Next」をクリックします。

Create_A_New_Stack 3

チェックボックスをチェックし、「Next」をクリックします。(IAM を操作する場合は承認操作としてチェックボックスへのチェックが必要)

Create_A_New_Stack 4

CloudFormation Stack の完了を待ちます。

CloudFormation_Management_Console

EC2 インスタンス、RDS インスタンスへタグを設定する

EC2 のタグ設定画面から対象となるインスタンスを選択し、CloudFormation のパラメータで設定したタグを設定します。

EC2_Management_Console

RDS のインスタンス一覧画面から対象となるインスタンスを選択し、「Tags」ボタンをクリックします。「Add Tag」ボタンをクリックします。CloudFormation のパラメータで設定したタグを設定します。

RDS_·_AWS_Console 4

以上で設定完了です。

動作確認

停止、起動の動作を確認します。

CloudWatch Events の時間を調整しました。14時に停止、14時10分に起動するように設定しました。

しばし、放置。。

CloudTrail のログから EC2 の API を確認します。

CloudTrail_Management_Console

14:00 に EC2 インスタンスを停止、14:10 に EC2 インスタンスを起動しています。

RDS のログから動作を確認します。

RDS_·_AWS_Console 5

14:06 に停止完了、14:15 に起動完了となっていますね。

まとめ

AWS の機能を使えば、このようなジョブ処理も簡単に実装できます。仕組みも、ソースコードもシンプルなので必要に応じて修正していただければと思います。特にリトライ処理は含まれていませんので、CloudFormation も Step Functions に対応したことだし、組み合わせて実装するのがいいと思います。