エンジニア

EC2の自動停止アラームスクリプト

投稿日:2013年12月3日 更新日:

こんにちは、サーバー担当の山内です。
今回はPython版のAWS CLIを介して、CPU使用率の低いEC2を自動的に停止させるアラームを作ります。

AWS CLI

いつの間にかリリースされ、日々進化を遂げているAWS CLI。
Amazon Linuxには最初からAWS CLIが含まれているので、インストールの必要はありません。

自動停止対象

今回は、Amazon Linuxのオンデマンドインスタンスを対象にします。

初期設定

対象インスタンスへSSHログインして、AWS CLIの初期設定をします。

$ sudo su
# aws configure
AWS Access Key ID [None]: AKIAWONDERPLANET
AWS Secret Access Key [None]: wonderPLANET/K7MDENG/bPxRfiCY
Default region name [None]: ap-northeast-1
Default output format [None]:json

設定ファイルは.awsディレクトリ内に置かれます。
~/.aws/config

configには複数のプロファイルを設定することもできます。
たとえば、新たにusというプロファイルを追加する場合は下のようにします。

[default]
output = json
region = ap-northeast-1
aws_access_key_id = AKIAWONDERPLANET
aws_secret_access_key = wonderPLANET/K7MDENG/bPxRfiCY

[profile us]
output = json
region = us-west-1
aws_access_key_id = AKIBWONDERPLANET
aws_secret_access_key = WONDERplanet/2Zp9Utk/h3yCo8nvb

--profileオプションを使って任意のプロファイルを指定することができます。

# aws ec2 describe-instances --profile us

このようにして実行すれば、usプロファイルのEC2一覧を取得することができます。
結果はjsonで返りますが、--output table--output textと指定して結果のフォーマットを変更することもできます。

アラームの作成

CloudWatchのアラームを作成します。
下の例は、インスタンスIDの取得からアラームの作成までの一連の流れを処理するスクリプトです。

# vim ec2-auto-stop.sh
#!/bin/bash  

# インスタンスIDの取得  
EC2_INSTANCE_ID=wget --quiet --output-document - http://169.254.169.254/latest/meta-data/instance-id

# 停止条件: 300秒間CPU使用率が10%以下のとき  
PERIOD='300'
THRESHOLD='10'
EVAL_PERIODS='1'

PUT_METRIC_ALARM="aws cloudwatch put-metric-alarm --alarm-name $EC2_INSTANCE_ID-AutoStop --namespace \"AWS/EC2\" --dimensions Name=InstanceId,Value=$EC2_INSTANCE_ID --statistic Average --metric-name CPUUtilization --comparison-operator LessThanThreshold --threshold $THRESHOLD --period $PERIOD --evaluation-periods $EVAL_PERIODS --alarm-actions \"arn:aws:automate:ap-northeast-1:ec2:stop\"";

# 実行  
eval $PUT_METRIC_ALARM

exit 0

スクリプトを実行します。

# bash ec2-auto-stop.sh

スクリプトを実行すると次のようなコマンドを実行することになり、CloudWatchにアラームが1つ新規作成されます。

aws cloudwatch put-metric-alarm --alarm-name i-abcdefgh-AutoStop \
--namespace "AWS/EC2" \
--dimensions Name=InstanceId,Value=i-abcdefgh \
--statistic Average \
--metric-name CPUUtilization \
--comparison-operator LessThanThreshold \
--threshold 10 \
--period 300 \
--evaluation-periods 1 \
--alarm-actions "arn:aws:automate:ap-northeast-1:ec2:stop"

これでアラームが鳴ればEC2が停止するようになります。
スポットインスタンスではうまくいかないようなので注意が必要です。

採用情報

ワンダープラネットでは、一緒に働く仲間を幅広い職種で募集しております。

-エンジニア
-

© WonderPlanet Inc.