LoginSignup
9
10

More than 5 years have passed since last update.

CloudFormationでCPU使用率を監視&通知するテンプレート

Posted at

はじめに

EC2インスタンスおよびメールアドレスを指定して、リソース監視&通知するCloudFormationの定義を作成してみました。
まずはやってみようと思い、マニュアルのサンプルを元に作成しましたので、けっこう適当です。

テンプレートファイル

テンプレートは以下のとおり
Parametersで指定した値をResourcesのにて、代入しています。("Ref"~ってなっているとこです)
Resourcesにて、MySNSTopicを作成し、CPUAlarmのAlarmActionsプロパティで、MySNSTopicを通知先と指定してます。

cF_CloudWatchAlarmBase.template
{
  "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」をクリック

image

5.「Stack name」に任意の名称を入力
6.「instanceid」に監視したいinstance idを入力
7.「MailAddress」に通知先のメールアドレスを入力 
8.「Threshold」にしきい値を入力
9.「Next」をクリック

image

10.「Next」をクリック
image

11.Review画面がでるので、「Create」をクリックして作成実施!
12.対象のスタックのステータスが「CREATE_COMPLETE」がでればOK
image

この後、指定したメールアドレスにSNSからメールが来ているので「Confirm subscription」をクリックしてあげてください。
指定したインスタンスのCloudWatchアラームが追加されていたらOKです。

変更前)
image
変更後)
image

まとめ

ここまでやれば、他の標準メトリックスの監視についてはコピペで追加していくだけなので、簡単かなと。
41行目の"AlarmActions" : [ { "Ref" : "MySNSTopic" } ]のSNSとCloudWatchの連携部分は、こんなに単純でいいんですね。
#どうやってArnを渡せばよいのかと無駄に悩みました。
#CLIより楽なんじゃないかCloudFormationって気分です。

次は、Ansibleのcloudformation モジュールでこのテンプレートを指定して実行してやろうかなと。
ちなみにカスタムメトリックスもAnsibleでやると楽かなあと思ってるので別途検証してみます。

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10