Amazon SNS – Twilioゲートウェイ Labrie(仮) v0.2

よく訓練されたアップル信者、都元です。昨日に引き続き、Labrieの件。早速バージョンアップしました。

CloudWatchが言ってくることが分からない

昨日のエントリでは「HOOT24ライト(無人監視)」等と書いていたのですが、昨日のv0.1ではCloudWatchのアラームに対応していませんでした。

というのも、Labrieのエンドポイント/twilio/{telnum}は、SNSメッセージ本文にTwiMLを記述する、という仕様でした。しかしCloudWatchのアラームとして送られてくるSNSメッセージの本文は、以下のようなJSONです。

{
    "AWSAccountId": "XXXXXXXXXXXX",
    "AlarmDescription": null,
    "AlarmName": "cpu-80",
    "NewStateReason": "Threshold Crossed: 1 datapoint (100.0) was greater than or equal to the threshold (80.0).",
    "NewStateValue": "ALARM",
    "OldStateValue": "OK",
    "Region": "US - N. Virginia",
    "StateChangeTime": "2013-04-25T08:32:55.133+0000",
    "Trigger": {
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "Dimensions": [
            {
                "name": "InstanceId",
                "value": "i-XXXXXXXX"
            }
        ],
        "EvaluationPeriods": 1,
        "MetricName": "CPUUtilization",
        "Namespace": "AWS/EC2",
        "Period": 60,
        "Statistic": "AVERAGE",
        "Threshold": 80.0,
        "Unit": null
    }
}

当然、LabrieがsubscribeしているSNSトピックとCloudWatchアラームのアクションを繋いでも、「Twilio APIエラーですよ」的な電話が掛かってくるだけです。

よろしい、ならばバージョンアップだ

CloudFormationテンプレートURL

https://s3-ap-northeast-1.amazonaws.com/cm-cfn-templates/labrie/labrie-0.2.template

v0.2のテンプレートのURLがこちら。ああっ…。アップデートの配布も簡単過ぎる。CloudFormationカコイイ…。

変更点

v0.1のインターフェイスは基本的に壊してません。

v0.2の新機能として「CloudWatchアラームメッセージを理解するエンドポイント」を追加しました。/twilio-cw/{telnum}です。このURLをエンドポイントとして、SNSトピック *1を購読してください。電話が掛かって来てconfirmする手順等は/twilio/{telnum}と同じです。

labrie02-subscrubed

あと、準備として、監視対象のEC2インスタンスを1つ立てておきましょう。Labrieのインスタンスとは別の方が良いと思います。Amazon Linuxのt1.microで充分です。その起動したらインスタンスIDを控えておき、SSHでログインできることも確認しておいてください。

では早速、CloudWatchのアラームを作成し、SNSトピックlabrie-cw-testと繋いでいきましょう。CloudWatchのManagement Consoleの左側メニューよりAlarmsを選択し、Create Alarmボタンをクリックします。検索キーワードとして先ほど控えたインスタンスIDを入力し、そのCPUUtilizationを選択し、Continueボタンをクリックします。

labrie02-cw-1

次の画面で、アラームの詳細を決めます。5分間のCPU使用率の平均値が80を越えたらアラーム、ということで、下図のように設定します。

labrie02-cw-2

さらに次の、画面では状態がアラームになる等、状態変化が起こった時に何をするかを設定します。ここでSNSトピックと繋ぐわけですね。

labrie02-cw-3

あとは順当に、確認等を済ませ、アラームを作成します。

labrie02-cw-5

続きまして、監視対象サーバに負荷を掛けます。以下のコマンドで、CPUが100%に張り付くはずです。

gzip -9 < /dev/urandom > /dev/null

そして待つ事約5分。おなじみ、ラブリー息子の登場です。

labrie-8

「You are receiving this phone because your Amazon CloudWatch Alarm "cpu-80" in the US - N. Virginia region has entered the ALARM state, because "Threshold Crossed: 1 datapoint (100.0) was greater than or equal to the threshold (80.0)." at "Thursday 25 April, 2013 09:15:55 UTC".」...

すみません、英語ですw 日本語対応等は、そのうちそのうち…。

もっと作り込めば、HOOT24ライトになっていくわけです。

脚注

  1. ここではlabrie-cw-testとしました