運用でこういうのが知りたい
AWSで、基幹システムのEC2やRDSを運用管理している現場の皆さん、お疲れ様です。
そのような環境では、こんな確認をしたくなりませんか?
- 夜間は停止しておきたいEC2を、仕掛けたジョブで停止できたのか、意図せず稼働したままになってないか
- 1年前と比べて、CPU使用率が徐々に高まってきているインスタンスがどれだけあるか
- EC2をリストアした。さて、以前と比べて、停止/起動時刻・負荷の状態に違いがないか
- あのEC2やRDSって、何月何日に削除したんだっけ。費用負担や監査対応で、過去の削除日が必要だ
ほら、どうですか。知りたいもの、ありましたよね。
AWSマネジメントコンソール(以下、マネコン)を切り替えながら見れば確認できます。
ただ複数のサーバーの停止時刻・起動時刻・CPU負荷や、さらにローンチ日・削除日も含めて1画面でパッと見たい、という都合の良いものは無いです。
そこで、作りました。
横軸を24時間、縦軸をインスタンス一覧にして、EC2/RDSの稼働状況をマトリクスで確認できるWebツールです。
こんな感じのものです。
デモ
実際に触れるデモ画面を用意しています。
デモ: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でください」は現場でのお決まりのセリフです!
画面の説明
全体説明
基本的な画面構成です。
重要なポイントを図の中にコメントしています。
1点補足すると、黒系のバーが前方にあれば、インスタンスがいつ作成(launch)されたかの日時がわかり、黒系のバーが後方にあれば、いつ削除(Terminate)されたかの日時が分かったりもします。
1つの画像ではコメントが入りきらなかったので、もう1つ
主な操作
基本的な操作について、図の中に説明を入れています。
手順①
以上。
あとは眺めるもよし、適当にポチポチしてもよし。
もっと言うと、URLのパラメーター(クエリ文字列)で、&loadnow を追加すると手順① すら不要になります。
全体説明の図内に書いたコメント以外にも、まだまだ便利な、以下の機能があります。
単一インスタンスの稼働履歴
左端のNameタグ列にある小さなアイコンをクリックすると、特定のインスタンスについての履歴ページ history.html が開きます。
24時間が縦に揃っていることがポイントです。 世の中のパッケージ製品や、CloudWatchでは、デフォルトでは現在からの相対時間で表示されるものが多いです。これは何の調整もなしに、日ごとの起動・停止の流れを簡単に追えます。
「このサーバー、時間通りに止まってたのか?」「CPU負荷は毎日、何時に高まっているか、それって平日だけか」などを確認したいときに、目線をただ単に縦に動かせばよいので便利です。
リストアしたインスタンスの表示
EC2をリストアする時に、(1)古いインスタンスを一旦削除 → (2) バックアップAMIからローンチ、という手法になりますね。すると、インスタンスIDが変わって別のインスタンスの扱いになります。
AWS Config の リソースタイムライン という機能では、インスタンスIDが変われば、この機能でも同じリソースとして認識されません。それだと運用上、都合が悪いですよね‥。
このツールでは、Nameタグを主キーのように扱っていて、リストアされたとみなせるデータだった場合は、同一インスタンスとして 同じ行にそのまま 表示します!
(デモの7月13日 の myserver1 を見てみてください)
アーキテクチャ図
構成はざっくり以下のような形です。
ブラウザから見ると、入口はCloudFrontです。静的ファイルはS3から配信し、パスが /api の呼び出しはCloudFront経由でLambda Function URLへ流しています。
S3バケットには、HTML/CSS/JavaScript/画像が保管されているだけでなく、CPU使用率のログと、起動・停止時刻のログも、定期的に保管されていきます。
画面表示時の大まかな流れは以下です。
- S3上の静的コンテンツを読み込み
- 対象日、対象サービス、対象リージョンのリソースをS3から取得
- 現在情報はLambda経由、過去日の情報はS3に蓄積したデータから取得
- 読み込んだデータを統合して各インスタンスの24時間バーを描画
- 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が豊富にあり、正確なデータを高速に返してくれるというマイクロサービスのベースがあってこそです。ありがたいですね。







