v1.7.3 — AI 総合診断 Overhaul + Auto-Collect エージェント
AI 総合診断が完全に新しくなりました。DOCX/Markdown/PDF の 3 種エクスポート、定期レポート(週次/隔週/月次)、そしてデータを自動収集する 6 種の Auto-Collect エージェントを追加しました。EKS ページも、クラスターアクセス管理、Describe パネル、Service Resources タブなど大幅に改善されました。
AI 総合診断リニューアル · DOCX/MD/PDF エクスポート · 定期レポート · 6 種 Auto-Collect エージェント · FinOps MCP 5 ツール · EKS クラスターアクセス管理 · Powerpipe exit code 2 の処理
AI 総合診断リニューアル
従来の /diagnosis パスが /ai-diagnosis に変更され、UI 全般がリニューアルされました。
Before / After
| 項目 | Before (v1.7.2) | After (v1.7.3) |
|---|---|---|
| パス | /diagnosis | /ai-diagnosis |
| 名称 | 総合診断 | AI 総合診断 |
| エクスポート | PPTX | DOCX + Markdown + PDF |
| 定期レポート | — | 週次/隔週/月次 |
| S3 アップロード | — | DOCX + MD の自動アップロード |
3 種エクスポート
DOCX — docx パッケージベースの A4 プロフェッショナルレポート:
- 表紙(タイトル、ヘルススコア、アカウントエイリアス、日付)
- 目次(ハイパーリンク、Heading 1-3)
- セクション別アクセントカラー(コスト=緑、セキュリティ=赤、ネットワーク/EKS=紫、アイドル/MSK=オレンジ)
- マークダウン解析(見出し、テーブル、リスト、引用、インラインコード/ボールド/イタリック)
Markdown — すべてのセクションを 1 つの .md ファイルにまとめてエクスポートします。
PDF — /ai-diagnosis/report 専用印刷ページ:
- 白背景の A4 レイアウト、CSS
@media printによるページ区切り - 「印刷 / PDF 保存」ボタンでブラウザの Print-to-PDF
// src/lib/report-docx.ts (主要な構造)
const doc = new Document({
sections: [
coverPage(title, healthScore, accountAlias, date),
tableOfContents(),
...sections.map(s => sectionPage(s, accentColor)),
],
});
const buffer = await Packer.toBuffer(doc);
定期レポート
| 項目 | 説明 |
|---|---|
| 頻度 | 週次 / 隔週 / 月次 |
| タイムゾーン | KST (UTC+9) |
| 設定 | 曜日(0-6)、日付(1-28)、時刻(0-23) |
| 保存先 | data/report-schedule.json |
| チェック周期 | 5 分ごとにスケジュールを確認 |
// src/lib/report-scheduler.ts
type Schedule = {
enabled: boolean;
frequency: 'weekly' | 'biweekly' | 'monthly';
dayOfWeek?: number; // 0=日 ~ 6=土
dayOfMonth?: number; // 1~28
hour: number; // KST 基準
language: 'ko' | 'en';
};
UI でトグルの ON/OFF、頻度/曜日/時刻/言語を設定すると、自動的にレポートが生成され S3 にアップロードされます。
DOCX と Markdown ファイルは awsops-deploy-{accountId}/reports/ パスに自動アップロードされます。7 日間有効な Presigned URL を通じてダウンロードできます。CDK スタックに S3 PutObject/GetObject 権限が自動追加されます。
6 種の Auto-Collect エージェント
AI 総合診断レポートのデータ収集を自動化する専用エージェントです。各エージェントはマルチソースから並列にデータを収集し、ライブステータスをストリーミングします。
| エージェント | ソース | 収集項目 |
|---|---|---|
| EKS Optimize | Prometheus + K8s + Steampipe | CPU/メモリ使用率、スロットリング、Pod 再起動、HTTP 5xx、ノード使用率 |
| DB Optimize | Steampipe + CloudWatch | RDS/ElastiCache/OpenSearch のインスタンス発見 + メトリクスベースのライトサイジング |
| MSK Optimize | Steampipe + CloudWatch + Prometheus | ブローカーメトリクス、メッセージスループット、コンシューマーラグ、パーティション数 |
| Idle Scan | Steampipe | 未アタッチ EBS、gp2 ボリューム、未使用 EIP、停止中 EC2、90 日超のスナップショット、未使用 SG + コスト見積もり |
| Trace Analyze | Tempo/Jaeger + Prometheus | サービス別エラートレース、500ms 超のスロートレース |
| Incident | CloudWatch + K8s + Prometheus | ALARM 状態のアラーム、Warning イベント、HTTP 5xx の急増、CPU スパイク、メモリ圧迫 |
// src/lib/collectors/types.ts
export interface Collector {
collect(send: SendFn, accountId?: string, isEn?: boolean): Promise<CollectorResult>;
formatContext(data: CollectorResult): string;
analysisPrompt: string;
displayName: string;
}
すべてのエージェントが同じ Collector インターフェースを実装します。collect() は Promise.allSettled でマルチソースを並列収集し、SendFn コールバックで進行状況をリアルタイムに伝達します。新しいエージェントを追加する際は、このインターフェースを実装するだけで済みます。
FinOps MCP Lambda
Cost Gateway に 5 つの FinOps ツールが追加されました。
| ツール | ソース | 説明 |
|---|---|---|
get_rightsizing_recommendations | Compute Optimizer | EC2/RDS/ECS/Lambda のライトサイジング + 月間削減額 |
get_savings_plans_recommendations | Cost Explorer | Savings Plans の購入推奨(1 年/3 年、No Upfront) |
get_reserved_instance_recommendations | Cost Explorer | RI の購入推奨(EC2/RDS/ElastiCache/Redshift) |
get_cost_optimization_hub_recommendations | Cost Optimization Hub | 統合最適化推奨(Rightsize/Stop/Upgrade/SP) |
get_trusted_advisor_cost_checks | Trusted Advisor | コスト最適化カテゴリのチェック + フラグ付きリソース |
すべてのツールは target_account_id パラメータによるクロスアカウント照会をサポートします。
EKS/K8s UX の大幅改善
クラスターアクセス管理
| 機能 | 説明 |
|---|---|
| アクセス状態バッジ | クラスターごとに「Access Entry」登録の有無を表示 |
| ワンクリック登録 | 「Register ViewPolicy」ボタンで Access Entry + Policy を自動作成 |
| 接続検知 | K8s クエリ結果の context_name の有無で実際の接続状態を判別 |
| CLI ガイド | 未接続クラスターに対して EC2 Role ARN ベースの登録コマンドを案内 |
新機能
| 機能 | ファイル | 説明 |
|---|---|---|
| Describe パネル | K9sDetailPanel | JSONB 詳細情報(labels、annotations、containers、volumes、conditions) |
| Service Resources タブ | k8s.ts | サービス別 CPU/Memory バーチャート(Pod セレクタージョイン) |
| クラスターフィルター | k8s/page.tsx | クラスターカードのクリックでノード/Pod/イベント/サービスをフィルタリング |
| StatsCard ナビゲーション | StatsCard.tsx | Nodes→/k8s/nodes、Pods→/k8s/pods などクリックで遷移 |
| SQL 統合 | queries/k8s.ts | インライン SQL を中央クエリファイルへ移動 + キャッシュウォーマーを追加 |
バグ修正
external_ip→external_ipsのカラム名を修正(サービス 0/0 バグ)- EC2 IAM Role ARN の切り捨てを修正(SQL
||演算子のフィルター衝突) - Register クリック時のクラスターフィルタートグルを防止(
stopPropagation) - 登録後にポーリングで接続を確認(5 回 × 3 秒)
Benchmark: Powerpipe Exit Code 2 の処理
Powerpipe はベンチマークコントロールにアラームがあると exit code 2 で終了します。これは正常な動作ですが、従来のコードは異常終了として処理していました。
| 項目 | Before | After |
|---|---|---|
| 判定基準 | exit code === 0 | 出力ファイルの存在 + サイズ > 0 |
| exit code 2 | エラー処理 | 正常処理 |
# exit code は無視し、出力ファイルの有効性で判断
powerpipe benchmark run ... > "${tmpFile}" 2>"${errorFile}"; \
if [ -s "${tmpFile}" ]; then
mv "${tmpFile}" "${resultFile}" && echo "done" > "${statusFile}";
else
echo "error" > "${statusFile}";
fi
インフラ: S3 レポートアップロード + update-infra スクリプト
S3 ポリシー
CDK スタックに EC2 ロールの S3 権限が追加されました:
// infra-cdk/lib/awsops-stack.ts
ec2Role.addToPolicy(new iam.PolicyStatement({
actions: ['s3:PutObject', 's3:GetObject'],
resources: [`arn:aws:s3:::awsops-deploy-${this.account}/reports/*`],
}));
update-infra スクリプト
EC2 を置き換えずに CDK スタックを安全に更新する 00-update-infra.sh スクリプト:
- 既存スタックのパラメータ読み取り — CloudFormation から現在の値を保持
- CDK コンテキストの復元 — VPC、TGW、ドメインなどをライブインフラから再抽出
- cdk diff プレビュー — EC2 置き換えの有無を警告
- デプロイ —
--no-rollbackで安全にデプロイ
バージョン比較
| 項目 | v1.7.2 | v1.7.3 | 変更 |
|---|---|---|---|
| 診断パス | /diagnosis | /ai-diagnosis | 名称変更 |
| エクスポート | PPTX | DOCX + MD + PDF | 3 種 |
| 定期レポート | — | 週次/隔週/月次 | 新規 |
| Auto-Collect | — | 6 種エージェント | 新規 |
| FinOps ツール | — | 5 つの MCP ツール | 新規 |
| EKS アクセス | 手動 | ワンクリック登録 | 改善 |
| Benchmark | exit code 依存 | 出力ファイル検証 | 修正 |
主なファイル変更
| ファイル | 変更内容 |
|---|---|
src/app/ai-diagnosis/page.tsx | 診断ページのリニューアル(パス変更、スケジュール UI) |
src/app/ai-diagnosis/report/page.tsx | PDF 印刷専用ページ |
src/app/api/report/route.ts | レポート生成 API(15 セクション、S3 アップロード) |
src/lib/report-docx.ts | DOCX 生成器(表紙、目次、セクション別スタイル) |
src/lib/report-scheduler.ts | 定期レポートスケジューラ(5 分チェック) |
src/lib/report-prompts.ts | 15 セクション別の Bedrock 分析プロンプト |
src/lib/report-generator.ts | データ収集オーケストレーター |
src/lib/collectors/*.ts | 6 種の Auto-Collect エージェント |
agent/lambda/aws_finops_mcp.py | FinOps MCP Lambda(5 ツール) |
src/app/api/benchmark/route.ts | Powerpipe exit code 2 の処理 |
src/lib/queries/k8s.ts | K8s SQL クエリ統合 + Service Resources |
src/components/dashboard/StatsCard.tsx | クリックナビゲーション(href prop) |
infra-cdk/lib/awsops-stack.ts | S3 reports/* ポリシーを追加 |
scripts/00-update-infra.sh | 安全なインフラ更新スクリプト |