はじめに
EC2インスタンスおよびメールアドレスを指定して、リソース監視&通知するCloudFormationの定義を作成してみました。
まずはやってみようと思い、マニュアルのサンプルを元に作成しましたので、けっこう適当です。
テンプレートファイル
テンプレートは以下のとおり
Parametersで指定した値をResourcesのにて、代入しています。("Ref"~ってなっているとこです)
Resourcesにて、MySNSTopicを作成し、CPUAlarmのAlarmActionsプロパティで、MySNSTopicを通知先と指定してます。
{
"AWSTemplateFormatVersion" : "2010-09-09" ,
"Description" : "CloudFormation create CloudWatch Alarm",
"Parameters" : {
"MailAddress" : {
"Description" : "Please specify the E-mail Address" ,
"Type" : "String",
"Default" : "xxxxx@yyyy.co.jp"
},
"InstanceId" : {
"Description" : "Please specify the name of the EC2 ID" ,
"Type" : "String" ,
"Default" : "i-xxxxx"
},
"Threshold" : {
"Description" : "Please specify the number of the Threshold" ,
"Type" : "String" ,
"Default" : "90"
}
},
"Resources" : {
"MySNSTopic":{
"Type" : "AWS::SNS::Topic",
"Properties" : {
"Subscription" : [ {
"Endpoint" : { "Ref" : "MailAddress" },
"Protocol" : "email"
} ],
"TopicName" : "CloudWatchAlertSNS"
}
},
"CPUAlarm" : {
"Type" : "AWS::CloudWatch::Alarm",
"Properties" : {
"AlarmDescription" : "CPU alarm for my instance",
"AlarmActions" : [ { "Ref" : "MySNSTopic" } ],
"MetricName" : "CPUUtilization",
"Namespace" : "AWS/EC2",
"Statistic" : "Average",
"Period" : "60",
"EvaluationPeriods" : "3",
"Threshold" : { "Ref" : "Threshold" },
"ComparisonOperator" : "GreaterThanThreshold",
"Dimensions" : [ {
"Name" : "InstanceId",
"Value" : { "Ref" : "InstanceId" }
} ]
}
}
},
"Outputs" : {
"MySNSTopicTopicARN":{
"Description" : "Availability Zone of the newly created EC2 instance",
"Value" : { "Fn::GetAtt" : [ "MySNSTopic", "TopicName" ] }
}
}
}
実行例
1.上記テンプレートファイルをローカルPC上に保存
2.AWSコンソールで、CloudFormationを選択
3.「Update a template to Amazon S3」の「ファイル選択」で上記のローカルに保存したテンプレートファイルを選択
4.「Next」をクリック
5.「Stack name」に任意の名称を入力
6.「instanceid」に監視したいinstance idを入力
7.「MailAddress」に通知先のメールアドレスを入力
8.「Threshold」にしきい値を入力
9.「Next」をクリック
11.Review画面がでるので、「Create」をクリックして作成実施!
12.対象のスタックのステータスが「CREATE_COMPLETE」がでればOK
この後、指定したメールアドレスにSNSからメールが来ているので「Confirm subscription」をクリックしてあげてください。
指定したインスタンスのCloudWatchアラームが追加されていたらOKです。
まとめ
ここまでやれば、他の標準メトリックスの監視についてはコピペで追加していくだけなので、簡単かなと。
41行目の"AlarmActions" : [ { "Ref" : "MySNSTopic" } ]のSNSとCloudWatchの連携部分は、こんなに単純でいいんですね。
#どうやってArnを渡せばよいのかと無駄に悩みました。
#CLIより楽なんじゃないかCloudFormationって気分です。
次は、Ansibleのcloudformation モジュールでこのテンプレートを指定して実行してやろうかなと。
ちなみにカスタムメトリックスもAnsibleでやると楽かなあと思ってるので別途検証してみます。