Rubyからaws-sdkを使ってアラームの一覧を取得する
タグ: rubyaws / 初版公開: 2014-08-25

Rubyのaws-sdkの使い方。

CloudWatchのアラームは、AWS::CloudWatchクラスを使って取得する。AWS::CloudWatch#alarmsでアラームの一覧が得られる。一例としてアラーム名と現在の状態を出力してみよう。

アラーム名はAWS::CloudWatch::Alarm#alarm_nameで、現在の状態はAWS::CloudWatch::Alarm#state_valueでそれぞれ取得できる。

require 'aws-sdk'

AWS.config(:access_key_id => 'YOUR_ACCESS_KEY',
           :secret_access_key => 'YOUR_SECRET_KEY',
           :region => 'YOUR_REGION')

cw = AWS::CloudWatch.new
cw.alarms.each do |alarm|
  p [alarm.alarm_name, alarm.state_value]
end

このスクリプトの実行結果は以下のようになる。

["foo", "OK"]
["bar", "ALARM"]

なおアラームの状態変化の履歴はAWS::CloudWatch::Alarm#history_itemsで取得することができる。このメソッドで取得できる要素はAWS::CloudWatch::AlarmHistoryItemであるが、この要素には少し癖がある。

AWS::CloudWatch::AlarmHistoryItemの主だったデータはAWS::CloudWatch::AlarmHistoryItem#history_dataで取得できるが、データがJSONで格納されているのである。

このデータにアクセスするには標準ライブラリのjsonを使って以下のようにする。

require 'json'

alarm.history_items.each{|history|
  p JSON.parse(history.history_data)
}

以下は1件のhistory_dataのパース結果の例である。

{"version"=>"1.0", "type"=>"Create", "createdAlarm"=>{"namespace"=>"AWS/EBS", "threshold"=>1800.0, "metricName"=>"VolumeIdleTime", "period"=>3600, "dimensions"=>[{"name"=>"VolumeId", "value"=>"vol-XXXXXXXX"}], "stateValue"=>"INSUFFICIENT_DATA", "alarmName"=>"foo", "okactions"=>[], "alarmActions"=>["arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:Notify"], "actionsEnabled"=>true, "evaluationPeriods"=>1, "comparisonOperator"=>"LessThanOrEqualToThreshold", "insufficientDataActions"=>[], "alarmDescription"=>"", "statistic"=>"Sum", "alarmArn"=>"arn:aws:cloudwatch:ap-northeast-1:XXXXXXXXXXXX:alarm:foo", "alarmConfigurationUpdatedTimestamp"=>"2014-08-23T15:48:26.693+0000", "stateUpdatedTimestamp"=>"2014-08-23T15:48:26.693+0000"}}