タグ別アーカイブ: CloudWatch

EC2の起動時・停止時に処理を実行する方法

| コメントをどうぞ

AWSでEC2を使い始めると、インスタンスの起動時・停止時に処理を実行したいことってありますよね。

今回はインスタンス起動時にCloudWatchのアラームを作成して、インスタンス停止時にアラームを削除する方法を紹介します。

環境

  • OS: Amazon Linux
  • rootで作業
  • CloudWatchを利用可能なIAMを作成(キーとシークレットを用意)
  • aws configure を実行済

設定手順

1. スクリプトを作成する

vi /etc/init.d/cloudwatch_alarm

以下を記述して保存します。

#!/bin/bash
# chkconfig: 2345 99 10
# description: Create & Delete CloudWatch Alarm

INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
prog=cloudwatch_alarm
lock=/var/lock/subsys/$prog

case "$1" in
  start)
      aws cloudwatch put-metric-alarm --alarm-name test-alarm-$INSTANCE_ID --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --dimensions Name=InstanceId,Value=$INSTANCE_ID --period 60 --evaluation-periods 1 --threshold 80 --comparison-operator GreaterThanOrEqualToThreshold
      touch $lock
      ;;
  stop)
      aws cloudwatch delete-alarms --alarm-names test-alarm-$INSTANCE_ID
      rm -f $lock
      ;;
  restart)
      ;;
  *)
      echo $"Usage: $0 {start|stop}"
      exit 2
esac

exit

2. ファイルの実行権限を設定する

chmod 755 /etc/init.d/cloudwatch_alarm

3. サービスに追加する

chkconfig --add cloudwatch_alarm

4. インスタンスを再起動する

まとめ

今回は、

  • インスタンス起動時に「CPU使用率が80%を超えたらアラートを出す」というアラームを作成する
  • インスタンス停止時に上記アラームを削除する

という設定をしてみました。

上記スクリプトのstartまたはstopの処理を書き換えれば、

  • インスタンス起動時にEIPを設定する
  • インスタンス停止時にログをS3に保存する

といった処理も設定可能です。

CloudWatch Monitoring Scriptsの監視データ(メトリクス)がすぐに反映されない場合の解決策

| コメントをどうぞ

AWS便利ですね。今回は運用時にハマったことについて紹介します。
タイトルの通り、CloudWatch Monitoring ScriptsでEC2インスタンスの監視をしようとしたときの話です。
AMIから起動したインスタンスの監視データが、CloudWatchのコンソールになかなか表示されないという現象に遭遇しました。

 

CloudWatch Monitoring Scriptsについて

AWSのインスタンスを監視する方法としてCloudWatchが提供されています。
CloudWatchで監視できるEC2用のメトリクス(監視項目)は、以下の10項目です。

  • CPUUtilization
  • DiskReadOps
  • DiskWriteOps
  • DiskReadBytes
  • DiskWriteBytes
  • NetworkIn
  • NetworkOut
  • StatusCheckFailed
  • StatusCheckFailed_Instance
  • StatusCheckFailed_System

これに加えて、2013年2月にLinux用のMonitoring Scriptsがリリースされたことにより、公式のスクリプトでメモリやディスク使用量などの監視が可能になりました。

設定方法や使い方は下記の記事が大変参考になります。
http://dev.classmethod.jp/cloud/aws/cloudwatch-monitoring-script-for-linux/

 

監視データがすぐに反映されない場合の解決策

AMI作成前か、新しいインスタンス起動時に以下を実行する。

 rm -rf /var/tmp/aws-mon/*

 

Monitoring Scriptsを実行すると以下のファイルが作成され、すでにファイルが存在している場合は、インスタンスIDとゾーンを参照してしまうことが原因のようです。

  • /var/tmp/aws-mon/instance-id : EC2のインスタンスIDを記録するファイル
  • /var/tmp/aws-mon/placement/availability-zone : アベイラビリティゾーンを記録するファイル