Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CloudWatch Dashboardをいい感じに作るTerraform Provider

Avatar for Tomoya Kawaguchi Tomoya Kawaguchi
January 25, 2025
9

CloudWatch Dashboardをいい感じに作るTerraform Provider

Avatar for Tomoya Kawaguchi

Tomoya Kawaguchi

January 25, 2025
Tweet

Transcript

  1. Tomoya Kawaguchi • お仕事: インフラエンジニア • 最近: 禁煙して 10kg 太りました。常に健康被害に怯えてます

    • SNS 自己紹介 • 社内の CI/CD 基盤の運用や改善をしています • よく触る: Terraform, Golang, yaml, クラウドは AWS をよく触ります • @yamoyamoto
  2. • CloudWatch Dashboard 2. CloudWatch Dashboard とは • AWS のメトリクス(CloudWatch

    Metrics, Logs, Alarms)を可視化できる • 閲覧者が動的にダッシュボードを切り替えられる dashboard variables のような高度な機能も利用できる
  3. • CloudWatch Dashboard の実 態は JSON • つまり Terraform でもこの

    JSON を管理する { "start": "-PT7D", "periodOverride": "auto", "widgets": [ { "height": 6, "width": 24, "type": "metric", "properties": { "metrics": [ [ "AWS/EC2", "CPUUtilization", "InstanceId", "i-0123456789abcdef0", { "period": 60, "stat": "Average", "yAxis": "left" } ] ], "title": "EC2 CPU Utilization (Average)" } }, ... ここにグラフを追加していく ... ] } 3. CloudWatch Dashboard の Terraform 管理の現状
  4. Terraform で管理するときの手順 (例) 1. GUI で Dashboard を作成 2. GUI

    から生成された JSON をコピペ • JSON を手で書いてる人はいないと思う、 、 3. Dimension の値を変数にして templatefile() で.tf から値渡しなど微調 整 3. CloudWatch Dashboard の Terraform 管理の現状
  5. • EC2 のメトリクスを表示するため に Instance ID を Terraform から渡 す例

    main.tf dashboard.json 3. CloudWatch Dashboard の Terraform 管理の現状
  6. わかりにくいエラー • JSON 内 18 個目の Widget 定義を見つける旅へ Error: putting

    CloudWatch Dashboard (test): operation error CloudWatch: PutDashboard, https response error StatusCode: 400, InvalidParameterInput: The dashboard body is invalid, there are 1 validation errors: [ { "dataPath": "/widgets/18/properties/metrics/5", "message": "Should NOT have more than 3 items" } ] 3. CloudWatch Dashboard の Terraform 管理の現状
  7. クソ長 JSON メンテ辛い • 業務でとあるシステムを新規追加した時、800 行超えの JSON に成 った 3.

    CloudWatch Dashboard の Terraform 管理の現状 • 位置の調整、メトリクスの微調整などにいちいち時間がかかる
  8. • https://github.com/yamoyamoto/terraform-provider- cwdashboard • Terraform (HCL) 上で CloudWatch Dashboard を構造的に定義で

    きる • metrics, widget 単位で独立した data source を宣言して構築 [1] 4. cwdashboard Provider とは? • 同じ metrics を複数の widget で使いまわすことも可能 • バリデーションも Terraform の data source 単位で行われるため、デ バッグも容易 [1]: インターフェースは AWS CDK (AWS の IaC ツール) の設計を持ち込んでいるので、CDK での開発 経験がある人には馴染みやすいはず
  9. サンプルコード 1. data cwdashboard_metric でメトリク スを定義 2. data cwdashboard_xxx_widget にメト

    リクスを食わせてウィジェットを定義 3. data cwdashboard にウィジェットを 食わせてダッシュボード JSON を構築 4. 3 で構築した JSON を AWS Provider に渡す 4. cwdashboard Provider とは?
  10. • 他の Widget タイプのサポート • 未サポートのダッシュボード機能のサポート • AWS CDK でいうところの

    Column, Row のサポート 使ってもらえる方がいればしっかりメンテやります! 5. 今後の展望 • 現在 text widget と metric graph だけなので増やしていきたい • Variables, Annotations など • これがあると複数の widget をまとめて配置できるため、より複雑なダ ッシュボードを構造的に構築できる