Amazon Web Services ブログ

新機能 – Amazon CloudWatch ダッシュボードでの API と CloudFormation のサポート

当社は、数年前に CloudWatch ダッシュボードの提供を開始しました。提供開始にあたって私が書いた投稿で、選択された CloudWatch メトリクスをグラフィカル形式で表示するダッシュボードをインタラクティブに作成する方法をご紹介しました。提供開始後に、フルスクリーンモード、暗いスキンのテーマ、Y 軸範囲のコントロール、名前変更の簡略化、永続的ストレージ、新しい視覚化オプションなどの追加の機能を導入しました。

新しい API および CLI
コンソールのサポートはインタラクティブな使用には非常に役立ちますが、多くのお客様から、ダッシュボードとその内部のウィジェットのプログラムによる作成と操作のサポートを求める声が寄せられました。ダッシュボードの動的な構築と管理、および対応する AWS リソースの作成と削除に応じたウィジェットの追加と削除が求めらました。その他のお客様からは、2 つ以上の AWS アカウント間で一貫したダッシュボードのセットを設定、管理する機能の要望が寄せられました。そして、CloudWatch ダッシュボードの API、CLI、AWS CloudFormation のサポートの提供が開始され、今すぐご利用いただけるようになったことをここに発表いたします。4 つの新しい API 関数 (および同等の CLI コマンド) があります。

ListDashboards / aws cloudwatch list-dashboards – アカウント内のすべてのダッシュボードのリスト、または共通のプレフィックスを共有するサブセットを取得します。

GetDashboard / aws cloudwatch get-dashboard – 1 つのダッシュボードの詳細を取得します。

PutDashboard / aws cloudwatch put-dashboard – 新しいダッシュボードを作成するか、既存のダッシュボードを更新します。

DeleteDashboards / aws cloudwatch delete-dashboards – 1 つ以上のダッシュボードを削除します。

ダッシュボードの概念
これらの関数とコマンドの使用方法を説明したいと思います。詳細な説明に移る前に、ダッシュボードの重要な概念と属性のいくつかを示します。

グローバル – ダッシュボードは AWS アカウントの一部であり、特定の AWS リージョンとは関連付けられていません。各アカウントは最大 500 個のダッシュボードを持つことができます。名前が付けられる – 各ダッシュボードには、AWS アカウント内で一意の名前があります。名前の長さは最大 255 文字です。グリッドモデル – 各ダッシュボードはセルのグリッドで構成されます。グリッドは全体で 24 個のセルで、必要なだけ高くすることができます。ダッシュボードの各ウィジェットはグリッド座標の特定のセットに配置され、整数値の数のグリッドセルにまたがるサイズです。ウィジェット (視覚化) – 各ウィジェットは、テキストまたは CloudWatch メトリクスのセットを表示できます。テキストは Markdown を使って指定し、1 つの値、折れ線グラフ、または積み上げ棒グラフとして表示できます。各ダッシュボードは最大 100 個のウィジェットを持つことができます。メトリクスを表示するウィジェットは、CloudWatch アラームと関連付けることもできます。ダッシュボードには、コンソール内から表示および編集できる JSON 表現があります。[Actions] メニューをクリックして、[View/edit source] を選択します。

ダッシュボードのソースは以下のとおりです。

この JSON は、実際のアプリケーションを構築する際の参考にしてください。ご覧のとおり、ダッシュボードの各ウィジェットに対して widgets 配列にエントリがあります。各エントリは、タイプ、位置、サイズで始まる 1 つのウィジェットを示します。

API を使用したダッシュボードの作成
特定のリージョンの各 EC2 インスタンスに対するウィジェットがあるダッシュボードを作成するとします。Python および AWS SDK for Python を使用して、次のように開始します (私のコードの未熟さはご容赦ください)。

import boto3
import json

cw  = boto3.client("cloudwatch")
ec2 = boto3.client("ec2")

x, y          = [0, 0]
width, height = [3, 3]
max_width     = 12
widgets       = []

次にインスタンスを反復処理し、それぞれに対して widget ディクショナリを作成し、それを widgets 配列に追加します。

instances = ec2.describe_instances()
for r in instances['Reservations']:
    for i in r['Instances']:

        widget = {'type'      : 'metric',
                  'x'         : x,
                  'y'         : y,
                  'height'    : height,
                  'width'     : width,
                  'properties': {'view'    : 'timeSeries',
                                 'stacked' : False,
                                 'metrics' : [['AWS/EC2', 'NetworkIn', 'InstanceId', i['InstanceId']],
                                              ['.',       'NetworkOut', '.',         '.']
                                             ],
                                 'period'  : 300,
                                 'stat'    : 'Average',
                                 'region'  : 'us-east-1',
                                 'title'   : i['InstanceId']
                                }
                 }

        widgets.append(widget)

位置 (xy) をループ内で更新し、グリッドを作成します (位置を指定しない場合、ウィジェットは左から右へ、上から下へレイアウトされます)。

        x += width
        if (x + width > max_width):
            x = 0
            y += height

すべてのインスタンスを処理した後で、ウィジェット配列の JSON バージョンを作成します。

body   = {'widgets' : widgets}
body_j = json.dumps(body)

そして、ダッシュボードを作成または更新します。

cw.put_dashboard(DashboardName = "EC2_Networking",
                 DashboardBody = body_j)

コードを実行すると、次のダッシュボードが作成されます。

CloudWatch チームは、プログラムで作成されるダッシュボードにはテキストウィジェットを含め、ダッシュボードが自動生成されたことと、その操作を実行したソースコードまたは CloudFormation テンプレートへのリンクを含めることを推奨しています。つまり、ダッシュボードに対して手動の帯域外チェンジャーを実行しないことを推奨しています。前述したように、各メトリクスウィジェットは CloudWatch アラームと関連付けることもできます。アラームは、プログラムで作成するか、サンプル CPU 使用率アラーム などの CloudFormation テンプレートを使用して作成できます。これを行うように決定した場合、アラームのしきい値がウィジェットに表示されます。この詳細については、Tara Walker の最近の投稿「Amazon CloudWatch Launches Alarms on Dashboards」を参照してください。さらに一歩先に進んで、CloudWatch イベントと Lambda 関数を使って特定のリソースの作成と削除を追跡し、変更に合わせてダッシュボードを更新することができます。この方法については、「Keeping CloudWatch Dashboards up to Date Using AWS Lambda」を参照してください。

CLI を使用したダッシュボードへのアクセス
コマンドラインからダッシュボードにアクセスして操作することもできます。たとえば、シンプルなリストを生成できます。

$ aws cloudwatch list-dashboards --output table
----------------------------------------------
|               ListDashboards               |
+--------------------------------------------+
||             DashboardEntries             ||
|+-----------------+----------------+-------+|
||  DashboardName  | LastModified   | Size  ||
|+-----------------+----------------+-------+|
||  Disk-Metrics   |  1496405221.0  |  316  ||
||  EC2_Networking |  1498090434.0  |  2830 ||
||  Main-Metrics   |  1498085173.0  |  234  ||
|+-----------------+----------------+-------+|

そして、Disk-Metrics ダッシュボードを削除できます。

$ aws cloudwatch delete-dashboards --dashboard-names Disk-Metrics

ダッシュボードを定義する JSON を取得することもできます。

 

CloudFormation を使用したダッシュボードの作成
ダッシュボードは、CloudFormation テンプレートで指定することもできます。YAML 形式のシンプルなテンプレートを示します ( DashboardBody が依然として JSON で指定されています)。

Resources:
  MyDashboard:
    Type: "AWS::CloudWatch::Dashboard"
    Properties:
      DashboardName: SampleDashboard
      DashboardBody: '{"widgets":[{"type":"text","x":0,"y":0,"width":6,"height":6,"properties":{"markdown":"Hi there from CloudFormation"}}]}'

テンプレートをファイルに配置し、コンソールまたは CLI を使用してスタックを作成します。

$ aws cloudformation create-stack --stack-name MyDashboard --template-body file://dash.yaml
{
    "StackId": "arn:aws:cloudformation:us-east-1:xxxxxxxxxxxx:stack/MyDashboard/a2a3fb20-5708-11e7-8ffd-500c21311262"
}

ダッシュボードを次に示します。

ご利用可能
この機能は今すぐ利用できます。本日から使い始めることもできます。ダッシュボードあたり最大 50 メトリクスを持つ 3 つのダッシュボードを無料で作成できます。追加のダッシュボードの料金は、CloudWatch 料金表ページに示すように、1 か月あたり 3 USD です。毎月新しい API 関数に対して最大 100 万回の呼び出しを無料で実行できます。それを超えた場合の料金は、1,000 回の呼び出しごとに 0.01 USD です。

Jeff;