AWS
EC2
CloudWatchEvents

CloudWatch EventsのみでEC2を計画停止する

概要

開発用のEC2インスタンスを、夜間や週末は停止させ平日の朝に起動したい場合、lambdaとCloudWatch Eventsを使って、自動停止/起動させるという方法がありますよね。

※「EC2 lambda 停止」でQiitaを検索すると色々でてきます。
https://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=EC2+lambda+%E5%81%9C%E6%AD%A2

私もこの方法でインスタンスを自動停止/起動させてましたが、自動停止については、AWSマネジメントコンソール画面でポチポチと設定するだけで実現出来るようになってたので、備忘録として設定方法を残しておきます。(ついでに自動起動もCloudWatch Eventsのみで出来るようになれば楽チンですが…!)

設定手順

今回は、日本時間の毎晩22時に対象のEC2インスタンスを停止したい場合を想定して設定します。
AWSマネジメントコンソールの CloudWatch>イベント>ルール の画面を開き「ルールの作成」をクリックします。

スクリーンショット 2018-03-14 11.50.46.png

イベントソース設定

イベントソースについて、以下のように設定していきます。

スクリーンショット 2018-03-14 12.08.55.png

イベントパターンorスケジュール:スケジュールを選択
一定の速度orCron式:Cron式を選択し、 0 13 * * ? * とCron式を入力。

ここで1点注意ですが、Cron式のタイムゾーンはグリニッジ標準時(GMT)で解釈されます。
日本時間(JST)の設定をGMTに変換して入力する必要があります。(日本時間の22時は、GMTだと13時ですね)

ターゲット設定

ターゲットを設定していきます。

スクリーンショット 2018-03-14 11.55.46.png

プルダウンで「EC2 StopInscances API 呼び出し」を選択し、インスタンスIDを設定します。
「この特定のリソースに対して新しいロールを作成する」を選択すると、対象インスタンスに対して、"ec2:RebootInstances", "ec2:StopInstances", "ec2:TerminateInstances"の3つのポリシーが紐付けられたロールが、CloudWatch Eventsのルール作成時に同時作成されます。

また「ターゲットの追加」で複数のアクションが設定可能です。
例えば、他のインスタンスIDの「EC2 StopInscances API 呼び出し」アクション追加で、複数インスタンスの自動停止が可能です。

ルールの定義

「設定の詳細」ボタンクリックで、ルールの定義画面に進み、ルールの名前・説明・状態を設定します。
最後に「ルールの作成」ボタンクリックで設定完了です。

スクリーンショット 2018-03-14 12.10.20.png

補足

設定したルールが正しく動作しているかについて、対象のインスタンスの状態を確認する方法もありますが、
CloudWatchメトリクスでも動作状況を確認できます。(ルール名で検索するとでてきます)

おわりに

AWSは、今までできなかったこと・実現するにはちょっと工夫が必要だったことが、気付けばマネジメントコンソールからサクッとできる様になってたりするので、こまめにチェックしていこうと思います!