1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

基幹システムを運用している現場が求めるEC2/RDSダッシュボードってこんなやつ

1
Last updated at Posted at 2026-07-17

運用でこういうのが知りたい

AWSで、基幹システムのEC2やRDSを運用管理している現場の皆さん、お疲れ様です。
そのような環境では、こんな確認をしたくなりませんか?

  • 夜間は停止しておきたいEC2を、仕掛けたジョブで停止できたのか、意図せず稼働したままになってないか
  • 1年前と比べて、CPU使用率が徐々に高まってきているインスタンスがどれだけあるか
  • EC2をリストアした。さて、以前と比べて、停止/起動時刻・負荷の状態に違いがないか
  • あのEC2やRDSって、何月何日に削除したんだっけ。費用負担や監査対応で、過去の削除日が必要だ

ほら、どうですか。知りたいもの、ありましたよね。

AWSマネジメントコンソール(以下、マネコン)を切り替えながら見れば確認できます。
ただ複数のサーバーの停止時刻・起動時刻・CPU負荷や、さらにローンチ日・削除日も含めて1画面でパッと見たい、という都合の良いものは無いです。

そこで、作りました。
横軸を24時間、縦軸をインスタンス一覧にして、EC2/RDSの稼働状況をマトリクスで確認できるWebツールです。

こんな感じのものです。

01-main

デモ

実際に触れるデモ画面を用意しています。

デモ:https://d2ne9gmzhttew8.cloudfront.net/

ボタンやリスト選択は自由に触ってもらって大丈夫です。
デモ環境で表示しているデータは、実際のAWS環境のリアルなものではなく、ダミーのデータです。

デモでは、2026/7/18 を便宜上「今日」として表示しています。
日付を切り替えると、過去日の稼働状況も確認できます。
さらにこのデモでは、マルチリージョン・マルチアカウントを設定済みと想定したデータにしています。

基本の表示内容

このツールでは、EC2/RDSについて主に以下の情報を表の形式で確認できます。

  • Nameタグ
  • 設定ファイル(config.js)で指定したカテゴリー用のタグ
  • インスタンスタイプ / インスタンスクラス
  • VPC
  • AZ
  • 現在の稼働状況
  • 起動時間・停止時間(xx:xx~xx:xx)
  • 24時間の起動/停止バー(2色の色分け)
  • CPU使用率(10色の色分け):24時間の起動/停止バーに重なるように描画

24時間の起動/停止状況をバーで表示しているので、全体感がパッと見て分かります。
主役は起動時間・停止時間ですが、CPU使用率も重ねて表示しているので、高負荷の概要も把握できます。

マネコンと比較した特徴

このツールは、マネコンではやりにくい、以下のような利点があります。

  • EC2とRDSを同じ切り口で一覧表示する
     → EC2とRDSを同じ「サーバー」として扱いたいんですよ!
  • インスタンスIDではなくNameタグを軸にして表示する
     → Nameタグをキーのように扱うと便利なのが、リストア時!(後述)
  • 複数アカウントを1画面で表示できる
     → ProductionアカとDevelopmentアカは、まとめて見たいです!
  • 1台のインスタンスをピックアップして、稼働履歴を1画面で表示する
     → 月次のタスクや、CPU負荷が増えてきてる様子を把握できたり!
  • Lambda関数とS3を通じてデータ取得するので、AWSにログイン無しで表示できる
     → 「IAMユーザー持ってないです‥」というメンバーにも触らせたい!
  • みんな大好き(?)Excelファイルへ出力できる
     → 「それ、Excelでください」は現場でのお決まりのセリフです!

画面の説明

全体説明

基本的な画面構成です。
重要なポイントを図の中にコメントしています。

02-description1

1点補足すると、黒系のバーが前方にあれば、インスタンスがいつ作成(launch)されたかの日時がわかり、黒系のバーが後方にあれば、いつ削除(Terminate)されたかの日時が分かったりもします。

1つの画像ではコメントが入りきらなかったので、もう1つ

03-description2

主な操作

基本的な操作について、図の中に説明を入れています。

手順①

infra-dashboard-q04.png

以上。

あとは眺めるもよし、適当にポチポチしてもよし。

もっと言うと、URLのパラメーター(クエリ文字列)で、&loadnow を追加すると手順① すら不要になります。

全体説明の図内に書いたコメント以外にも、まだまだ便利な、以下の機能があります。

04-description3

単一インスタンスの稼働履歴

左端のNameタグ列にある小さなアイコンをクリックすると、特定のインスタンスについての履歴ページ history.html が開きます。

05-history.html

24時間が縦に揃っていることがポイントです。 世の中のパッケージ製品や、CloudWatchでは、デフォルトでは現在からの相対時間で表示されるものが多いです。これは何の調整もなしに、日ごとの起動・停止の流れを簡単に追えます。
「このサーバー、時間通りに止まってたのか?」「CPU負荷は毎日、何時に高まっているか、それって平日だけか」などを確認したいときに、目線をただ単に縦に動かせばよいので便利です。

リストアしたインスタンスの表示

EC2をリストアする時に、(1)古いインスタンスを一旦削除 → (2) バックアップAMIからローンチ、という手法になりますね。すると、インスタンスIDが変わって別のインスタンスの扱いになります。
AWS Config の リソースタイムライン という機能では、インスタンスIDが変われば、この機能でも同じリソースとして認識されません。それだと運用上、都合が悪いですよね‥。
このツールでは、Nameタグを主キーのように扱っていて、リストアされたとみなせるデータだった場合は、同一インスタンスとして 同じ行にそのまま 表示します!
デモの7月13日myserver1 を見てみてください)

06-identified-instances

アーキテクチャ図

構成はざっくり以下のような形です。

07-diagram

ブラウザから見ると、入口はCloudFrontです。静的ファイルはS3から配信し、パスが /api の呼び出しはCloudFront経由でLambda Function URLへ流しています。

S3バケットには、HTML/CSS/JavaScript/画像が保管されているだけでなく、CPU使用率のログと、起動・停止時刻のログも、定期的に保管されていきます。

画面表示時の大まかな流れは以下です。

  1. S3上の静的コンテンツを読み込み
  2. 対象日、対象サービス、対象リージョンのリソースをS3から取得
  3. 現在情報はLambda経由、過去日の情報はS3に蓄積したデータから取得
  4. 読み込んだデータを統合して各インスタンスの24時間バーを描画
  5. CPU使用率JSONを読み込んで重ねて描画

GitHubに各種リソースがあります。GitHub: aws-infra-dashboard

デプロイ方法

GitHubに、デプロイする手順があります。

GitHub: aws-infra-dashboard - instructions.md

作成される主なリソースは、S3、CloudFront、Lambda、EventBridge Scheduler、WAF、IAMロールなどです。

流れとしては以下のような形です。

git clone https://github.com/hayayu0/aws-infra-dashboard aws-infra-dashboard
cd aws-infra-dashboard
npm ci
aws login
npx cdk bootstrap aws://<your-accountId>/ap-northeast-1
npx cdk bootstrap aws://<your-accountId>/us-east-1
./tools/deploy-cdk.sh
# PowerShellの場合: .\tools\deploy-cdk.ps1

メインのリージョンが東京リージョン以外の場合や、表示させたいタグが決まっている場合等は、deploy-cdkスクリプトの引数で指定するか、後で config.js ファイルを修正することもできます。

詳細は、 instructions.md を確認ください。

注意点

1. ⚠️設定上の注意点⚠️

  • IAMロールの作成なども実行されますので、十分なIAM権限が無ければデプロイできません。
  • 上述していますように、deploy-cdkスクリプトの引数、または config.js ファイルを修正する項目を理解いただき、適切に設定ください。そうすることで、それぞれの環境に合わせた意味のある表示になります。

2. ⚠️運用上の注意⚠️

  • 初期設定では、アクセス元を日本国内だけに限定しています。とはいえ、日本国内のIPから、URLが知られると誰でもアクセスできてしまいます。実運用に乗せる場合は、アクセス元IPアドレスでの制限(enable-ip-allow-list 有効)か、認証を追加するなど、別途検討が必要です。
  • Nameタグをキーにするので、複数のインスタンスでNameタグが重複しているインスタンスがあると、ちょっと運用しにくいかもしれません。(一応、異なる行として表示できるようにしています)
  • EC2が再起動されたことは、読み取れません。AWSの仕様として running ステータスのままだからです。
  • 利用量は0円にはなりません。費用がかかります。

また、日本からのアクセスだけを許可する設定は、CloudFrontの地理的制限で行っています。日本以外からもアクセスしたい場合は、変更する必要があります。

余談:マルチリージョンの1画面化はやめました

実は開発の途中で、マルチリージョンを同時に一覧表示する機能も作っていました、が、やめました。

マルチリージョンで同時に見たいシチュエーション、無くね?

クロスアカウント で俯瞰したい場面は日常的にありますが、クロスリージョン で同時に見たいという場面はほとんどありませんでした。

というわけで、右上で切り替えられるだけにしています。

このツールの歴史というか

実はこれ、2020年に作ったツールです。
「マネコン見ても、どれがいつ起動して、どれがいつ停止したか、分からん」というお客様の言葉から、個人開発がスタートしました。
初期の頃は、EC2上のnginx+PHPで動くWebサーバーとして実装していました。しかも最初は、30分単位の粒度でした。
そこから、

  • サーバーレス化(S3+CloudFront+Lambda関数)
  • 1分単位の粒度
  • キャッシュ効率化
  • レンダリング効率化
  • マルチアカウント・マルチリージョン対応
  • IEをがんばってサポートしたものの途中で切り捨て😁
  • AIによるコード改善

など少しずつ手を入れてきました。AWSが公式にこんな感じのツールを作ってくれたらなあ 、なんて妄想しながら、気づけば6年以上、自チーム内で使い続けています。
歴史的経緯から、JQuery前提+DataTablesライブラリーが必須であり、reactなどのフレームワークは使われていません。

さいごに

基幹システムを運用している現場が求めるEC2/RDSダッシュボードって、こんなやつじゃないですか?どうでしょうか。

もし同じように

どれがいつ起動してんのか、どれがいつ停止したんか、分からんのや

という同じ境遇で困っている方がいましたら、一度試してみてください。

このツールが成り立つのは、AWS APIが豊富にあり、正確なデータを高速に返してくれるというマイクロサービスのベースがあってこそです。ありがたいですね。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?