この記事は何
Amplifyのビルド回数をGrafanaで可視化しよう、の備忘メモ的記事です。
なぜやるか
1. 開発生産性を測るため(Four Keys メトリクス)
Googleが提唱する「Four Keys(フォーキーズ)」というソフトウェア開発パフォーマンス指標を参考にしています。
特に「デプロイ頻度(Deployment Frequency)」は重要な指標の一つであり、開発チームのフロー効率を測る上で有用です。
Amplifyのビルド回数を収集・可視化することで、定量的にチームの活動状況を把握し、改善の糸口を探ることができます。
2. AWS Amplifyを使っているから
現在プロジェクトではAWS Amplifyを利用しています。
Amplifyのビルド回数を見える化するためのTipsに対する調査をしてみたかったのも理由の1つです。
3. Grafanaでデータ可視化をしてみたかった
可視化ツールとして人気のあるGrafanaを実際に試してみたいという動機もあります。
Grafanaを用いることで、Amplifyのビルドデータをダッシュボード形式で視覚的に表示し、状況把握や傾向分析がしやすくなります。
どうやってやるか
まずAmplifyのビルド回数をソースとなるCloudWatchロググループを作成する
Amplifyは色々隠蔽しがちなので、ビルドの実行時ログなどのソースとなる情報を取得できるようにする必要があります。
今のところ最も簡便に取得だったのは、標準のビルド通知(メール)設定を活用することです。(↓画像の機能)
こんな感じで特定のブランチに対するビルド開始・成功・失敗の通知を簡単に作成することができる。
この機能を利用する事により、通知のためのEventBridgeルールがリソース作成されます。
このEventBridgeルールをカスタマイズします。
作成されたEventBridgeルールのターゲットを確認すると、メール通知用のSNSトピックが登録されています。
ここに新たなルールを追加します。
「ターゲット」の「編集」をクリックし、「別のターゲットを追加」をクリックすることで、ビルドの実行タイミングに合わせたトリガールールを追加できます。
ここでターゲットをCloudWatchロググループを選択(または新規作成)してください。
これにより、指定のロググループにビルドの実行ログを出力することができます。
(出力されるログはこんな感じ↓)
続いて、先程のCloudWatchロググループを入力ソースに、Grafanaでの見える化を実施します。
Grafanaを準備する
まずGrafanaを用意します。
今回は検証用にGrafanaを簡単に用意するので、Dockerコンテナを利用しました。
以下の docker-compose.yaml を作成し、
version: "3.8"
services:
grafana:
image: grafana/grafana-enterprise
container_name: grafana
restart: unless-stopped
ports:
- '3011:3000'
volumes:
- grafana-storage:/var/lib/grafana
- grafana-config:/etc/grafana
- grafana-logs:/var/log/grafana
volumes:
grafana-storage:
driver: local
grafana-config:
driver: local
grafana-logs:
driver: local
docker compose up -d を実行するだけで、 http://localhost:3011/ にアクセスすることでGrafanaにアクセスできます。
(初期パスワードはadmin/adminです)
※一旦見づらいので、ホーム>「管理」>「一般」>「デフォルトの設定」から日本語化しています。
GrafanaからAWS CloudWatchにアクセスできるようにする。
ではまず最初にAWS CloudWatchにアクセスできるようにしましょう。
「新しい接続を追加」からCloudWatchを検索し選択します。
「Add new data source」して
AWSへの認証情報を追加してSave&Testで終了です。
(※簡単のため、アクセスキーによる認証を使っています。きちんとやるときはIAMロールなどによる認証を利用してください。)
認証に成功すると、以下の表示が見え、ログをクエリや集計ができるようになります。
データを可視化する
これでログに対するアクセスができるようになったので、「Exploreビュー」からログを抽出、見える化してみましょう。
基本的にクエリを投げる方法はCloudWatchのクエリの投げ方と同一です。
クエリ記述文法自体は割愛しますが、ここもMCPなどを経由して簡単に記述・利用できるようになるはずなので、そちらも今度トライしてみます。
今回は 日別のデプロイ成功回数をグラフで見える化 してみるので、そのためのクエリを書きます。
# 例:日別のビルド成功回数を集計
fields @timestamp, detail.jobStatus
| filter detail.jobStatus = 'SUCCEED'
| stats count() as builds by bin(1d)
ではまず「Exploreビュー」に進みます。
今回はCloudwatch Logsにクエリを投げるのでそちらを選択。
「Select log groups」をクリックすると、先程疎通させたAWSアカウントのロググループを確認することができます。
先ほど新規に追加したロググループを選択して「Add Log Groups」をクリック。
以下のように対象期間やクエリ文を入力してクエリを実行すると、以下のように該当のデータの抽出と可視化が実行されます。
「ダッシュボード」からもほぼ同様の事ができます。
見せ方もGrafanaがサジェストしてくれたり、そのままダッシュボードに追加したりできるので、こちらのほうが便利そうですね。
以上です。
今回の内容だけではGrafanaを利用するメリットは限定的(CloudWatch標準で十分)ですが、
他の指標であったりをまとめてダッシュボードに乗せたり、見える化をよりリッチな見せ方にする場合はGrafanaの機能に乗っかるので良いかなと思いました。
(指標に関するJSONなどを返すAPIなどがあれば、それも取り込んだり柔軟にできるようです。)
クエリやダッシュボードの形成がやや慣れが必要そうですが、GrafanaのMCPもあるので、そういったものを活用して簡単見える化が実践できる(はず)と感じました。
そちらも調査してみたいと思います。
最後まで読んでいただきありがとうございました!












