Appearance
ルールカタログ
Ncost が実装を計画している 61 の削減ルールの一覧です。プロバイダ × カテゴリ別に、各ルールが「何を無駄とみなし、どう判定するか」まで掲載します。4 ルール(Cloud SQL idle・未アタッチディスク・停止 VM のディスク・未割当静的 IP)は判定ロジックの実装とテストが先行して存在しますが、実データ接続からの本番実行経路が完成するまでは計画中として表示します。
対応順序は GCP → AWS → Azure です。3 クラウド対応を前提に設計しますが、到達度は偽らず、各プロバイダ・各ルールの提供状態バッジで常に表示します。
このカタログの読み方: すべてのルールは判定規範(候補を捏造しない・時間ゲート・持続証明・Safety Tier)に従って実装・検査されます。各行の閾値・観測窓には実装時に出典が付きます。削減額の例は載せていません — 実測のない数字をお見せしないためです。
カテゴリの意味:
| カテゴリ | 意味 | 代表的なアクション |
|---|---|---|
| zombie | 使われていないのに課金され続けているリソース | 削除・停止(確認手順つき) |
| sizing | 実測利用率に対して過大なプロビジョニング | 縮小(p99 実測に基づく) |
| rate | 同じ使い方のまま料金条件だけ安くできる | 世代移行・課金モード変更 |
| hygiene | 放置すると無駄が蓄積する設定の不備 | ポリシー設定・保持期間見直し |
GCP(42 ルール) 計画中
Compute Engine
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| インスタンス zombie | zombie | 長期停止(≥15 日)、または稼働中で 14 日間の CPU 最大 ≤5% かつネットワーク送受信 ≤1 KiB/s。GKE / MIG 管理下の VM は個別提案から除外し、グループ側へ誘導 |
| インスタンス sizing | sizing | 30 日 p99 CPU ≤10% かつメモリ ≤30%(メモリは Ops Agent 必須 — 無ければ非該当に倒す)+ 全次元を満たす安価な machineType の実在 |
| スリープ候補 | hygiene | 稼働中 + 低 CPU + 低ネットワーク → 「停止 + 外部 IP 予約」の可逆な省電力提案 |
| MIG sizing | sizing | グループ全体の集約 CPU が低利用の場合に machineType 縮小を提案 |
| 旧世代 machine type | rate | N1 → N2/E2 など同スペックでより安価な世代への移行。継続利用割引込みの実効月額差・出典付き移行表 |
| 未アタッチ Persistent Disk | zombie | どの VM にも接続されていない(detach ≥15 日)。下記の記述例参照 |
| 停止 VM に残ったディスク | zombie | アタッチ先 VM がすべて 15 日以上停止 |
| idle ディスク | zombie | アタッチ済みだが 30 日間 I/O ≈ 0(≤100 ops/日) |
| 未割当静的 IP | zombie | RESERVED 状態の外部 IPv4(15 日ゲート)。内部 IP・無償の外部 IPv6 は対象外 |
| 古いスナップショット | zombie | 90 日以上経過、またはソースディスクが削除済み |
| 未参照カスタムイメージ | zombie | プロジェクト内から参照なし(15 日)。opt-out ラベルを尊重 |
| 未使用の予約 | zombie | 特定 SKU 予約で inUseCount 0(30 日) |
GKE / Cloud SQL
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| GKE クラスタ idle | zombie | 30 日間ノード利用率 <7% かつ非管理 Pod の活動ゼロ(kube-system 等は除外) |
| GKE nodepool sizing | sizing | プール全体の低 CPU で machineType 縮小(Autopilot は対象外) |
| Cloud SQL idle | zombie | 30 日間接続数 0 かつ CPU ≤5% → 停止を提案(削除ではない — データ保全) |
| Cloud SQL sizing | sizing | 30 日 p99 CPU ≤25% かつメモリ ≤50%。降格先はカスタムマシン制約の範囲で解決、HA は 2 倍係数 |
| Cloud SQL 手動バックアップ stale | zombie | 30 日超のオンデマンドバックアップ |
ネットワーク / LB
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| 空のバックエンド LB | zombie | forwarding rule のバックエンドが空(15 日)。課金がバンドルされるため削減額は「推定不能」を明示 |
| NCC spoke inactive | hygiene | INACTIVE + REJECTED の spoke(削減額 0 の構成整理ルール) |
| Interconnect VLAN attachment 未使用 | zombie | OS_UNPROVISIONED のまま時間課金(15 日) |
| Cloud DNS 空ゾーン | zombie | apex の SOA/NS しかない公開権威ゾーン(15 日。private zone は除外) |
サーバーレス / データ処理
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| Cloud Run CPU 常時割当 | rate | インスタンスベース課金だが実測 duty cycle <0.5 でリクエストベースの方が安い |
| Cloud Functions idle | zombie | min-instances ≥1 のまま 90 日間呼び出し 0 |
| App Engine 旧バージョン | zombie | トラフィック配分 0 のまま常駐インスタンスが残存(30 日) |
| BigQuery 未更新テーブル | zombie | 90 日更新なし(long-term storage への移行を確認) |
| Dataproc クラスタ idle | zombie | 30 日間 YARN アプリ 0(15 日以上稼働) |
| Dataflow 長時間 batch | zombie | batch ジョブが 7 日超 RUNNING(streaming は除外。削減額は推定不能を明示) |
| Data Fusion stale | zombie | 90 日間更新なしかつ pipeline 実行 0 |
| Memorystore Redis idle | zombie | 30 日間の総接続 0 |
| Spanner idle | zombie | 30 日 CPU ≤5%(リージョナルのみ) |
| Spanner oversized | sizing | 30 日 CPU <30% → 利用率 65% 目標のノード数(autoscaling / マルチリージョンは除外) |
| Bigtable idle | zombie | プロビジョン済みノードで 30 日 cpu_load ≤5% |
| Vertex AI endpoint idle | zombie | モデル未デプロイ、または 30 日間予測 0 |
| Workbench notebook idle | zombie | 30 日 CPU ≤10% |
| Pub/Sub subscription idle | zombie | 30 日間配信 0 + 未 ack 滞留(削減額は推定不能を明示) |
ストレージ / ロギング / その他
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| GCS lifecycle 未設定 | hygiene | ライフサイクルルールのないバケット(古いオブジェクトの自動整理が効かない) |
| GCS soft delete 過剰 | rate | soft-delete 保持量が live の 50% 以上かつ大容量 → 無効化の検討 |
| Artifact Registry 放置リポジトリ | zombie | 長期未更新のままストレージ課金が継続 |
| Artifact Registry cleanup 未設定 | hygiene | cleanup policy なし・イメージ蓄積過多(dry-run での影響確認手順つき) |
| ログバケット保持超過 | hygiene | 無料の 30 日を超える保持設定で課金対象の保持量が発生(_Required / Locked は除外) |
| ログ取り込み過多 | hygiene | resource_type 別の月間取り込み量から、除外フィルタ・サンプリング(例: VPC Flow Logs sampling 1.0 → 0.1 で 90% 減)を提案 |
| KMS 旧鍵バージョン stale | zombie | 90 日超の非 primary な ENABLED 鍵 → disable を提案(destroy は不可逆のため提案しない。DISABLED でも課金継続の旨を明示) |
AWS(15 ルール) 計画中
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| EC2 idle / 長期停止 | zombie | 長期停止、または 30 日 p99 CPU ≤5% + ネットワーク ≤1 KiB/s → 停止提案 |
| EC2 旧世代 | rate | t2 / m4 / c4 / r4 等 → 後継の同サイズへ |
| EC2 非 Graviton | rate | x86_64 + Linux → 同サイズ Graviton(ISA 互換性は観測不能のため fact として提示のみ・断定しない) |
| EBS 未アタッチ | zombie | available 状態(作成 15 日ゲート — detach 時刻は API に無いため必要条件で近似) |
| EBS 停止インスタンス付き | zombie | 全アタッチ先が停止インスタンス(15 日) |
| EBS idle | zombie | 30 日間 read/write ops p99 ≤5 ops/時(欠測系列は「観測不能」であって idle ではない) |
| EBS gp2 → gp3 | rate | 同サイズのままボリュームタイプ変更 |
| EBS スナップショット孤児 | zombie | ソースボリューム消滅 + 自己所有 AMI から非参照 + 90 日(増分バイトが観測不能のため削減額は推定不能を明示) |
| 未割当 Elastic IP | zombie | 関連付けなし(割当時刻が API に無いため時間ゲートなし) |
| NAT Gateway idle | zombie | 30 日間アクティブ接続 0 + 送信 0、またはルートテーブル参照なし |
| Classic ELB 空 | zombie | バックエンドインスタンス 0 |
| ALB / NLB 空 | zombie | ターゲットグループなし、または全ターゲット空(多段プローブ) |
| RDS idle | zombie | 非クラスタ・レプリカなし・30 日接続 p99 0 → 停止提案(RDS は 7 日で自動再起動するため削減月額は上限値である旨を明示) |
| ECR 放置リポジトリ | zombie | 長期間 pull なし / pull 履歴ゼロ |
| ECR lifecycle 未設定 | hygiene | lifecycle policy なし・イメージ蓄積過多 |
Azure(4 ルール) 計画中
| ルール | カテゴリ | 判定(主な facts) |
|---|---|---|
| VM 長期停止 | zombie | 長期 stopped / deallocated(stopped ≠ deallocated — stopped のままでは課金が続く旨を明示) |
| Managed Disk 未アタッチ | zombie | Unattached + 経過日数 + idle メトリクス |
| 古いスナップショット | zombie | 180 日以上経過 |
| 未割当 Public IP | zombie | 関連付けなし(Standard SKU は時間課金) |
記述例 — ルールページの品質契約
各ルールには、カタログの 1 行だけでなく次の形式の詳細ページがあります(判定規範の具体化 — 上の表の各ルール名からたどれます)。例として「未アタッチ Persistent Disk」:
ルール ID:
gcp.compute.disk.unattached/ カテゴリ: zombie / 状態: 計画中
- 何を無駄とみなすか: どの VM にもアタッチされていない Persistent Disk。ストレージ課金だけが継続する
- 判定条件:
usersが空、かつ detach からの経過(観測できない場合は作成からの経過)≥ 15 日。単発の観測だけでは候補にしない- 必須 facts: ディスクの状態・サイズ・タイプ、アタッチ状況、経過日数。取得できない場合は「観測不能」として表示し、候補にしない
- 誤検知・危険になり得る条件: 定期バッチが一時的にデタッチして使うディスク / スナップショット取得直後のディスク / フェイルオーバー待機用ディスク
- 実行前の確認(人または手元の AI): 命名・ラベルから用途を確認 / 最終アタッチ元 VM の現況 / IaC(Terraform 等)での参照有無
- 非破壊テスト: 削除前にスナップショットを取得し、2 週間観察してから削除する(Safety Tier: high の手順)
- ロールバック: スナップショットからのディスク再作成
- 効果検証: 変更前ベースラインと変更後請求の比較(Verify)
検討中(カタログ未掲載) 構想
需要に応じて追加を検討している領域です: CloudWatch Logs の保持未設定・空ロググループ、孤児 ENI、GPU 未使用検知、AWS の対象サービス拡張(Lambda / DynamoDB / Redshift / EMR 等)、Azure の対象拡張。検討中の候補は選別前の全量をルール候補バックログとして公開しています。追加するときも、本数より判定規範への適合を優先します。追加してほしいルールの要望を受け付ける公開窓口は準備中です。