AWS CLIを使ってCloudWatchのカスタムダッシュボードを作成してみた

2022.08.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。大阪オフィスの林です。

AWS CLIを使ってCloudWatchのカスタムダッシュボードを作成する機会がありましたので、検証した内容をまとめておきたいと思います。

やってみた

使うコマンド

AWS CLIを使ってCloudWatchのカスタムダッシュボードを作成/編集する場合はput-dashboardコマンドを使用します。なお、既に作成済みのCloudWatchのカスタムダッシュボードの情報を取得する場合はget-dashboardコマンドやlist-dashboardsコマンドを使用します。

これらを踏まえ、今回のエントリでは以下3つの検証を進めていきます。

  • put-dashboardを使ってCloudWatchのカスタムダッシュボードを作成
  • get-dashboardを使って作成したCloudWatchのカスタムダッシュボードの情報を取得
  • put-dashboardを使って既存のCloudWatchのカスタムダッシュボードを変更

put-dashboardでCloudWatchのカスタムダッシュボードを作成

put-dashboardコマンドの引数は--dashboard-name--dashboard-bodyの2つで、2つとも指定が必須の引数となります。
--dashboard-nameは任意のダッシュボード名を値として指定すれば良いのですが、--dashboard-bodyはダッシュボードに表示させたい内容をJSON形式で指定する必要があります。

引数 説明
--dashboard-name ダッシュボードの名前を指定します。この名前のダッシュボードがすでに存在する場合、この呼び出しによってそのダッシュボードが変更され、現在のコンテンツが置き換えられます。そうでない場合は、新しいダッシュボードが作成されます。最大長は255で、有効な文字はA-Z、a-z、0-9、"-"、および"_"です。このパラメータは必須です。
--dashboard-body ウィジェットやダッシュボード上の位置など、ダッシュボードに関する詳細情報をJSON形式で指定します。このパラメータは必須です。

それではやっていきたいと思います。
今回の検証では、AutoScalingのGroupInServiceInstancesのメトリクスを表示するダッシュボードを作成していきます。

[cloudshell-user@ip-10-0-100-117 ~]$
[cloudshell-user@ip-10-0-100-117 ~]$ aws cloudwatch put-dashboard --dashboard-name test-dashboard-1 --dashboard-body "{\"widgets\":[{\"type\":\"metric\",\"x\":0,\"y\":0,\"width\":6,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/AutoScaling\",\"GroupInServiceInstances\",\"AutoScalingGroupName\",\"awseb-e-p2hrvpm9di-stack-AWSEBAutoScalingGroup-1FLZOH9NNBYTL\",{\"label\":\"test\"}]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"ap-northeast-1\",\"stat\":\"Average\",\"period\":60,\"title\":\"GroupInServiceInstances\"}}]}"
{
    "DashboardValidationMessages": []
}
[cloudshell-user@ip-10-0-100-117 ~]$

--dashboard-bodyを指定する際は下記も参考になると思います。

環境を確認すると、CloudWatchのカスタムダッシュボードが作成されていました。

グラフの表示も問題無さそうです。

指定したJSONも反映されています。

get-dashboardでCloudWatchのカスタムダッシュボードの情報を取得

続いて、先ほど作成したCloudWatchのカスタムダッシュボードの情報をコマンドから取得してみます。

[cloudshell-user@ip-10-0-100-117 ~]$
[cloudshell-user@ip-10-0-100-117 ~]$ aws cloudwatch get-dashboard --dashboard-name test-dashboard-1
{
    "DashboardArn": "arn:aws:cloudwatch::123456789012:dashboard/test-dashboard-1",
    "DashboardBody": "{\"widgets\":[{\"type\":\"metric\",\"x\":0,\"y\":0,\"width\":6,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/AutoScaling\",\"GroupInServiceInstances\",\"AutoScalingGroupName\",\"awseb-e-p2hrvpm9di-stack-AWSEBAutoScalingGroup-1FLZOH9NNBYTL\",{\"label\":\"test\"}]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"ap-northeast-1\",\"stat\":\"Average\",\"period\":60,\"title\":\"GroupInServiceInstances\"}}]}",
    "DashboardName": "test-dashboard-1"
}
[cloudshell-user@ip-10-0-100-117 ~]$

シンプルですが上記のような感じで情報が取得できます。

put-dashboardを使って既存のCloudWatchのカスタムダッシュボードを変更

最後に、作成したCloudWatchのカスタムダッシュボードを編集してみたいと思います。今回の検証では、CloudWatchのカスタムダッシュボード作成時に指定したAutoScalingとは別のAutoScalingグループを指定する変更を加えてみたいと思います。

[cloudshell-user@ip-10-0-100-117 ~]$
[cloudshell-user@ip-10-0-100-117 ~]$ aws cloudwatch put-dashboard --dashboard-name test-dashboard-1 --dashboard-body "{\"widgets\":[{\"type\":\"metric\",\"x\":0,\"y\":0,\"width\":6,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/AutoScaling\",\"GroupInServiceInstances\",\"AutoScalingGroupName\",\"awseb-e-ypp4cemcuj-stack-AWSEBAutoScalingGroup-1O6SM3BINJ1XU\",{\"label\":\"test\"}]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"ap-northeast-1\",\"stat\":\"Average\",\"period\":60,\"title\":\"GroupInServiceInstances\"}}]}"
{
    "DashboardValidationMessages": []
}
[cloudshell-user@ip-10-0-100-117 ~]$

少しタイムラグがありましたが反映されました。

まとめ

CloudWatchのカスタムダッシュボードをCLIで作成したいというユースケースは限られてくるかと思いますが、この記事がどなたかの参考になりましたら幸いです。

以上、大阪オフィスの林がお送りしました!