Skip to content

ルールカタログ

Ncost が実装を計画している 61 の削減ルールの一覧です。プロバイダ × カテゴリ別に、各ルールが「何を無駄とみなし、どう判定するか」まで掲載します。4 ルール(Cloud SQL idle・未アタッチディスク・停止 VM のディスク・未割当静的 IP)は判定ロジックの実装とテストが先行して存在しますが、実データ接続からの本番実行経路が完成するまでは計画中として表示します。

対応順序は GCP → AWS → Azure です。3 クラウド対応を前提に設計しますが、到達度は偽らず、各プロバイダ・各ルールの提供状態バッジで常に表示します。

このカタログの読み方: すべてのルールは判定規範(候補を捏造しない・時間ゲート・持続証明・Safety Tier)に従って実装・検査されます。各行の閾値・観測窓には実装時に出典が付きます。削減額の例は載せていません — 実測のない数字をお見せしないためです。

カテゴリの意味:

カテゴリ意味代表的なアクション
zombie使われていないのに課金され続けているリソース削除・停止(確認手順つき)
sizing実測利用率に対して過大なプロビジョニング縮小(p99 実測に基づく)
rate同じ使い方のまま料金条件だけ安くできる世代移行・課金モード変更
hygiene放置すると無駄が蓄積する設定の不備ポリシー設定・保持期間見直し

GCP(42 ルール) 計画中

Compute Engine

ルールカテゴリ判定(主な facts)
インスタンス zombiezombie長期停止(≥15 日)、または稼働中で 14 日間の CPU 最大 ≤5% かつネットワーク送受信 ≤1 KiB/s。GKE / MIG 管理下の VM は個別提案から除外し、グループ側へ誘導
インスタンス sizingsizing30 日 p99 CPU ≤10% かつメモリ ≤30%(メモリは Ops Agent 必須 — 無ければ非該当に倒す)+ 全次元を満たす安価な machineType の実在
スリープ候補hygiene稼働中 + 低 CPU + 低ネットワーク → 「停止 + 外部 IP 予約」の可逆な省電力提案
MIG sizingsizingグループ全体の集約 CPU が低利用の場合に machineType 縮小を提案
旧世代 machine typerateN1 → N2/E2 など同スペックでより安価な世代への移行。継続利用割引込みの実効月額差・出典付き移行表
未アタッチ Persistent Diskzombieどの VM にも接続されていない(detach ≥15 日)。下記の記述例参照
停止 VM に残ったディスクzombieアタッチ先 VM がすべて 15 日以上停止
idle ディスクzombieアタッチ済みだが 30 日間 I/O ≈ 0(≤100 ops/日)
未割当静的 IPzombieRESERVED 状態の外部 IPv4(15 日ゲート)。内部 IP・無償の外部 IPv6 は対象外
古いスナップショットzombie90 日以上経過、またはソースディスクが削除済み
未参照カスタムイメージzombieプロジェクト内から参照なし(15 日)。opt-out ラベルを尊重
未使用の予約zombie特定 SKU 予約で inUseCount 0(30 日)

GKE / Cloud SQL

ルールカテゴリ判定(主な facts)
GKE クラスタ idlezombie30 日間ノード利用率 <7% かつ非管理 Pod の活動ゼロ(kube-system 等は除外)
GKE nodepool sizingsizingプール全体の低 CPU で machineType 縮小(Autopilot は対象外)
Cloud SQL idlezombie30 日間接続数 0 かつ CPU ≤5% → 停止を提案(削除ではない — データ保全)
Cloud SQL sizingsizing30 日 p99 CPU ≤25% かつメモリ ≤50%。降格先はカスタムマシン制約の範囲で解決、HA は 2 倍係数
Cloud SQL 手動バックアップ stalezombie30 日超のオンデマンドバックアップ

ネットワーク / LB

ルールカテゴリ判定(主な facts)
空のバックエンド LBzombieforwarding rule のバックエンドが空(15 日)。課金がバンドルされるため削減額は「推定不能」を明示
NCC spoke inactivehygieneINACTIVE + REJECTED の spoke(削減額 0 の構成整理ルール)
Interconnect VLAN attachment 未使用zombieOS_UNPROVISIONED のまま時間課金(15 日)
Cloud DNS 空ゾーンzombieapex の SOA/NS しかない公開権威ゾーン(15 日。private zone は除外)

サーバーレス / データ処理

ルールカテゴリ判定(主な facts)
Cloud Run CPU 常時割当rateインスタンスベース課金だが実測 duty cycle <0.5 でリクエストベースの方が安い
Cloud Functions idlezombiemin-instances ≥1 のまま 90 日間呼び出し 0
App Engine 旧バージョンzombieトラフィック配分 0 のまま常駐インスタンスが残存(30 日)
BigQuery 未更新テーブルzombie90 日更新なし(long-term storage への移行を確認)
Dataproc クラスタ idlezombie30 日間 YARN アプリ 0(15 日以上稼働)
Dataflow 長時間 batchzombiebatch ジョブが 7 日超 RUNNING(streaming は除外。削減額は推定不能を明示)
Data Fusion stalezombie90 日間更新なしかつ pipeline 実行 0
Memorystore Redis idlezombie30 日間の総接続 0
Spanner idlezombie30 日 CPU ≤5%(リージョナルのみ)
Spanner oversizedsizing30 日 CPU <30% → 利用率 65% 目標のノード数(autoscaling / マルチリージョンは除外)
Bigtable idlezombieプロビジョン済みノードで 30 日 cpu_load ≤5%
Vertex AI endpoint idlezombieモデル未デプロイ、または 30 日間予測 0
Workbench notebook idlezombie30 日 CPU ≤10%
Pub/Sub subscription idlezombie30 日間配信 0 + 未 ack 滞留(削減額は推定不能を明示)

ストレージ / ロギング / その他

ルールカテゴリ判定(主な facts)
GCS lifecycle 未設定hygieneライフサイクルルールのないバケット(古いオブジェクトの自動整理が効かない)
GCS soft delete 過剰ratesoft-delete 保持量が live の 50% 以上かつ大容量 → 無効化の検討
Artifact Registry 放置リポジトリzombie長期未更新のままストレージ課金が継続
Artifact Registry cleanup 未設定hygienecleanup policy なし・イメージ蓄積過多(dry-run での影響確認手順つき)
ログバケット保持超過hygiene無料の 30 日を超える保持設定で課金対象の保持量が発生(_Required / Locked は除外)
ログ取り込み過多hygieneresource_type 別の月間取り込み量から、除外フィルタ・サンプリング(例: VPC Flow Logs sampling 1.0 → 0.1 で 90% 減)を提案
KMS 旧鍵バージョン stalezombie90 日超の非 primary な ENABLED 鍵 → disable を提案(destroy は不可逆のため提案しない。DISABLED でも課金継続の旨を明示)

AWS(15 ルール) 計画中

ルールカテゴリ判定(主な facts)
EC2 idle / 長期停止zombie長期停止、または 30 日 p99 CPU ≤5% + ネットワーク ≤1 KiB/s → 停止提案
EC2 旧世代ratet2 / m4 / c4 / r4 等 → 後継の同サイズへ
EC2 非 Gravitonratex86_64 + Linux → 同サイズ Graviton(ISA 互換性は観測不能のため fact として提示のみ・断定しない)
EBS 未アタッチzombieavailable 状態(作成 15 日ゲート — detach 時刻は API に無いため必要条件で近似)
EBS 停止インスタンス付きzombie全アタッチ先が停止インスタンス(15 日)
EBS idlezombie30 日間 read/write ops p99 ≤5 ops/時(欠測系列は「観測不能」であって idle ではない)
EBS gp2 → gp3rate同サイズのままボリュームタイプ変更
EBS スナップショット孤児zombieソースボリューム消滅 + 自己所有 AMI から非参照 + 90 日(増分バイトが観測不能のため削減額は推定不能を明示)
未割当 Elastic IPzombie関連付けなし(割当時刻が API に無いため時間ゲートなし)
NAT Gateway idlezombie30 日間アクティブ接続 0 + 送信 0、またはルートテーブル参照なし
Classic ELB 空zombieバックエンドインスタンス 0
ALB / NLB 空zombieターゲットグループなし、または全ターゲット空(多段プローブ)
RDS idlezombie非クラスタ・レプリカなし・30 日接続 p99 0 → 停止提案(RDS は 7 日で自動再起動するため削減月額は上限値である旨を明示)
ECR 放置リポジトリzombie長期間 pull なし / pull 履歴ゼロ
ECR lifecycle 未設定hygienelifecycle policy なし・イメージ蓄積過多

Azure(4 ルール) 計画中

ルールカテゴリ判定(主な facts)
VM 長期停止zombie長期 stopped / deallocated(stopped ≠ deallocated — stopped のままでは課金が続く旨を明示)
Managed Disk 未アタッチzombieUnattached + 経過日数 + idle メトリクス
古いスナップショットzombie180 日以上経過
未割当 Public IPzombie関連付けなし(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 の対象拡張。検討中の候補は選別前の全量をルール候補バックログとして公開しています。追加するときも、本数より判定規範への適合を優先します。追加してほしいルールの要望を受け付ける公開窓口は準備中です。