【AWS】CloudWatch入門/使っていないEC2を自動シャットダウンしよう

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

はじめに

こんにちは植木和樹です。AWSで検証目的でEC2インスタンスを立てたままSTOPするのを忘れてしまうことが良くあります。使ってないインスタンスでも、起動していれば当然課金されてしまいますので、ちゃんと停止させてコスト削減しましょう。今回は「Use Amazon CloudWatch to Detect and Shut Down Unused Amazon EC2 Instances」(初出:2013/01/08)で紹介されている方法を翻訳しながら進めたいと思います。

使っていないEC2は自動でシャットダウンしよう

本日はAmazon CloudWatchのアラーム機能を使ったEC2の自動検知と自動シャットダウンの方法をご紹介します。あなたは時々EC2を使うだけの個人開発者かもしれませんし、複数開発者向けのEC2を管理するITプロフェッショナルかもしれませんが、そういう立場に関係なく不必要な課金が請求されないためにCloudWatchを活用することができます。

使用していない・利用率の低いEC2インスタンスを停止・終了させましょう

Amazon CloudWatchは様々なAWSリソースとアプリケーションのモニタリングデータを収集します。CloudWatchのアラーム機能は、メールを通知することで問題発生時の迅速な対応を促したり、ある値が決められた閾値に達した時 自動的にタスクを実行したりすることができます。
本日紹介する方法で、未使用だったり長期間に渡って利用頻度の低いEC2インスタンスを、自動的に停止・終了させるアラームが設定できるようになります。例えばAWS利用料金を無料枠内に収めたい学生さんなら、1時間アイドル状態になったインスタンスを自動的に停止することができます。また、もしあなたが企業のIT管理者だったら、開発者個々で管理しているEC2インスタンスが8時間利用されていなかったらまずメールで通知し、24時間使用されなかったインスタンスを終了する、というようなアラームグループを作成することができます。

自動シャットダウンアラームを設定してみましょう

CloudWatchが使っていないEC2インスタンスを検知し、シャットダウンするよう設定するのは簡単です。まずはAWSマネージメントコンソールのEC2の画面を開きましょう。次にインスタンスを選んだら、画面下部のMonitoringタブにある「Create Alarm」ボタンをクリックします。

20130815_ec2-auto-stop_01

次に通知先のメールアドレスを入力し、「STOP」または「Terminate」を選びます。使用率の閾値は適宜適切な値に設定してください。そして閾値に達すると、Amazon CloudWatchはインスタンスをシャットダウンし、あなた宛にメールで通知します。

20130815_ec2-auto-stop_02

このアラーム設定は、CloudWatchのコンソールからだけでなく、AWS SDK、Amazon CloudWatch API、コマンドラインインターフェースからも行うことができます。さらに詳しい情報はAmazon CloudWatch 開発者ガイドの「Create Alarms That Stop or Terminate an Instance 」を参照してください。

インスタンスがシャットダウンした時に送られるメールの例

 You are receiving this email because your Amazon CloudWatch Alarm
 "awsec2-Web-i-XXXXXXXX-High-CPU-Utilization" in the APAC - Tokyo region has entered the ALARM state, 
 because "Threshold Crossed: 1 datapoint (1.915) was less than the threshold (2.0)." at 
 "Tuesday 13 August, 2013 15:08:50 UTC".

View this alarm in the AWS Management Console:
https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#s=Alarms&alarm=awsec2-Web-i-XXXXXXXX-High-CPU-Utilization

Alarm Details:
- Name:                       awsec2-Web-i-XXXXXXXX-High-CPU-Utilization
- Description:                Created from EC2 Console
- State Change:               OK -> ALARM
- Reason for State Change:    Threshold Crossed: 1 datapoint (1.915) was less than the threshold (2.0).
- Timestamp:                  Tuesday 13 August, 2013 15:08:50 UTC
- AWS Account:                123456789012

Threshold:
- The alarm is in the ALARM state when the metric is LessThanThreshold 2.0 for 3600 seconds.

Monitored Metric:
- MetricNamespace:            AWS/EC2
- MetricName:                 CPUUtilization
- Dimensions:                 [InstanceId = i-XXXXXXXX]
- Period:                     3600 seconds
- Statistic:                  Average
- Unit:                       not specified

State Change Actions:
- OK:
- ALARM: [arn:aws:sns:ap-northeast-1:123456789012:InstanceDown]
- INSUFFICIENT_DATA:

まとめ

EC2のコンソール画面から、ちょっと設定するだけで自動でインスタンスを停止するよう設定することができました。サーバを使っているとついついインスタンスを止め忘れてしまいがちです。みなさんも検証用のインスタンスに設定してみてはいかがでしょうか?