【CloudFormation】CloudWatchダッシュボードを一発で作成する

本記事では、CloudFormationによる、CloudWatchダッシュボードの作成について、コード付きで解説します。

dashboard

前提

RDSとALBは事前に作成する。

各リソースの名前は下記。

・ALB:test-alb

・RDS:test-rds

説明

コード内のPropertyのうち、x,yに値を入れることで、各Widgetの縦横幅を決めることが出来る。

今回は横幅12、縦幅6で作成する。

Widgetを追加する場合、x,yの値の変更とmetricsを変更することで実現可能。

各サービスのmetrics、名前空間(namespace)は [1] のようなドキュメントから確認することが出来る。

[1] Application Load Balancer の CloudWatch メトリクス

RDSとして、下記メトリックをダッシュボードに載せる。

・CPUUtilization

・FreeableMemory

ALBとして、下記メトリックをダッシュボードに載せる。

・HTTPCode_ELB_4XX_Count

・HTTPCode_ELB_5XX_Count

実際のコード

AWSTemplateFormatVersion: '2010-09-09'

#####################################################################
#
# Parameters
#
#####################################################################
Parameters:
  AlbLoadBalancer:
    Description: AlbLoadBalancer
    Type: String
    Default: app/test-alb/<alb-id>
  RdsDBInstanceIdentifier:
    Description: RDS DBInstanceIdentifier
    Type: String
    Default: test-rds


#####################################################################
#
# CloudWatch Dashboard
#
#####################################################################
Resources:
  CWDashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardName: !Sub '${AWS::StackName}'
      DashboardBody: !Sub |
        {
          "widgets": [               
              {
                  "type": "metric",
                  "x": 0,
                  "y": 0,
                  "width": 12,
                  "height": 6,
                  "properties": {
                      "view": "timeSeries",
                      "stacked": false,
                      "metrics": [
                          [ "AWS/RDS", "CPUUtilization", "DBInstanceIdentifier", "${RdsDBInstanceIdentifier}" ]
                      ],
                      "region": "ap-northeast-1",
                      "title": "RDS  CPU Utilization"
                  }
              },
              {
                  "type": "metric",
                  "x": 12,
                  "y": 6,
                  "width": 12,
                  "height": 6,
                  "properties": {
                      "view": "timeSeries",
                      "stacked": false,
                      "metrics": [
                          [ "AWS/RDS", "FreeableMemory", "DBInstanceIdentifier", "${RdsDBInstanceIdentifier}" ]
                      ],
                      "region": "ap-northeast-1",
                      "title": "RDS FreeableMemory"
                  }
              },
              {
                  "type": "metric",
                  "x": 0,
                  "y": 96,
                  "width": 12,
                  "height": 6,
                  "properties": {
                      "view": "timeSeries",
                      "stacked": false,
                      "metrics": [
                          [ "AWS/ApplicationELB", "HTTPCode_ELB_4XX_Count", "LoadBalancer", "${AlbLoadBalancer}" ]
                      ],
                      "region": "ap-northeast-1",
                      "title": "HTTPCode_ELB_4XX_Count"
                  }
              },
              {
                  "type": "metric",
                  "x": 12,
                  "y": 96,
                  "width": 12,
                  "height": 6,
                  "properties": {
                      "view": "timeSeries",
                      "stacked": false,
                      "metrics": [
                          [ "AWS/ApplicationELB", "HTTPCode_ELB_5XX_Count", "LoadBalancer", "${AlbLoadBalancer}" ]
                      ],
                      "region": "ap-northeast-1",
                      "title": "HTTPCode_ELB_5XX_Count"
                  }
              }                                                    
          ]
        }