LoginSignup
6
5

More than 1 year has passed since last update.

CloudFormationでCloudWatchアラームを作成する

Last updated at Posted at 2021-06-11

はじめに

複数環境への横展開を目的としてCloudWatchアラームをCloudFormationを用いて作成する機会があったので、備忘録として残そうと思います。

CloudWatchアラームに関する知識はあるが、CloudFormationを用いてアラームのリソースを作成したことがない方へ向けての内容になります。
CloudWatchアラームとは?という方は以下をご参照ください。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html

また今回はCloudFormationのテンプレートをYAML形式で作成していますが、Visual Studio CodeのプラグインでYAML⇔JSON変換もできるそうなので(試してはいません)、JSON派の方も参考にしていただければと思います。
https://bsblog.casareal.co.jp/archives/4936

早速作ってみる

Lambdaのエラーを検知するCloudWatchアラームとそれを通知するためのSNSトピックを作成します。
環境ごとにリソース名を変える為に、環境識別子をパラメータにとり各リソース名の頭につけます。

以下がCloudFormationのテンプレートになります。

CloudWatchAlarm.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  # 環境識別子毎にリソースの名前を変える必要があるので、環境識別子をパラメータとして用意
  EnvironmentIdentifier:
    Description: Environment Identifier
    MaxLength: 15
    Type: String
Resources:
  # SNS Topic (エラーアラームの通知用)
  TopicError:
    Type: AWS::SNS::Topic
    Properties: 
      TopicName:
        Fn::Join:
        - "-"
        - - Ref: EnvironmentIdentifier
          - topic-error
      Subscription:
        - Protocol: email
          Endpoint: xxxx@example.com

  # CloudWatchアラームのリソース
  AlarmLambdaError:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: 
        Fn::Join:
        - "-"
        - - Ref: EnvironmentIdentifier
          - alarm-lambda-error
      AlarmDescription: Alarm for Lambda Error
      # アラームのアクションとしてSNSのTopicを指定
      AlarmActions: 
        - Fn::Join:
          - ":"
          - - 'arn:aws:sns:ap-northeast-1'
            - Ref: 'AWS::AccountId'
            - Fn::Join:
              - "-"
              - - Ref: EnvironmentIdentifier
                - topic-error
      ComparisonOperator: GreaterThanThreshold
      MetricName: Errors
      Namespace: AWS/Lambda
      DatapointsToAlarm: '1'
      EvaluationPeriods: '1'
      Period: '300'
      Statistic: Sum
      Threshold: '0'

CloudFormationスタックの作成

CloudFormationの「スタックの作成」からスタックの作成をします。
001.PNG

実際に作成されたリソースはこちら。
002.jpg

まとめ

今回のシステムでは多い時で10環境程度あり、1環境に100個弱のアラームが存在していたため、コンソールからアラームを作成していたのではとても間に合いませんでした。
CloudFormationによってリソースをIaC化することにより、横展開の工数を大幅に削減することに成功しました。

皆様も環境数の多いシステムではIaC化を検討されてはいかがでしょうか。

6
5
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
6
5