Contents
1️⃣ FinOps によるクラウドコスト可視化
1.1 FinOps の概要と目的
FinOps は Finance(財務) と Operations(運用) を統合し、リアルタイムでクラウド費用を把握・最適化する手法です。Kubernetes のようにリソースが自動で増減する環境では、従来の月次請求だけでは以下の課題が残ります。
| 課題 | 影響 |
|---|---|
| リソース使用量と請求額のタイムラグ | コスト超過に気付くのが遅れる |
| 部門間での費用認識のズレ | 無駄なリザーブやオーバープロビジョニングが発生 |
| データサイロ化 | 意思決定に必要な情報が分散し、迅速な対応ができない |
FinOps は 可視化(Visibility)・最適化(Optimization)・ガバナンス(Governance) の 3 つの柱でこれらを解消します。
1.2 主な可視化ツールと実装イメージ
| ツール | 対応クラウド | キー機能 | 実装例 |
|---|---|---|---|
| Azure Cost Management + Azure Monitor | Azure | 請求データとメトリクスの統合、予算アラート | az monitor metrics list で取得した CPU 使用率を Cost Management のカスタムビューに紐付 |
| AWS Cost Explorer + CloudWatch | AWS | 日次請求エクスポート、ダッシュボード化 | Lambda が GetCostAndUsage API を呼び、結果を S3 → QuickSight に流す |
| GCP Billing Export + Cloud Monitoring | GCP | ビッグクエリへの課金データ自動転送、リアルタイムメトリクス | gcloud beta billing export create で BigQuery テーブルに出力し、Grafana で可視化 |
ポイント:上記ツールはすべて API 経由で取得できるため、社内の BI ツールや自作ダッシュボードへ容易に統合可能です。
1.3 可視化から得られる効果(実績例)
- CPU 使用率 × コスト を指標化した「Effective Cost per vCPU」を導入した企業では、リソースの無駄が 12 % 削減されました【1】。
- Azure の Cost Management にアラートを設定し、CPU が 70 % 超過したタイミングで自動通知すると、過剰スケールアウトによる月額コストが 約 8 % 減少しました【2】。
【1】Microsoft Cloud Adoption Framework, Cost Management (2023)
【2】Azure Blog, “Real‑time cost alerts for AKS”, 2022
2️⃣ リクエスト & リミット最適化で無駄を排除
2.1 なぜリソース定義がコストに直結するのか
Kubernetes の requests はスケジューラが Pod を配置する基準、limits は実行時の上限です。設定が過大だと以下が起こります。
- ノードあたりの実装可能 Pod 数が減少 → 余分なノードが必要になる
- 未使用リソースに対して課金が継続(特に VM の従量課金モデル)
逆に limits が低すぎると OOM キルや再スケジュールが頻発し、結果的に 追加ノード が必要となります。
2.2 ベンチマーク手順と数式例
- データ収集
bash
# Prometheus から過去 7 日間の CPU 使用率を取得
curl -G 'http://prometheus:9090/api/v1/query_range' \
--data-urlencode 'query=sum(rate(container_cpu_usage_seconds_total{namespace!="kube-system"}[5m])) by (pod)' \
--data-urlencode 'start='$(date -d "-7 days" +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'step=300' > cpu_usage.json - 統計処理
CSV に変換し、Excel/Google Sheets で 95 パーセンタイル を算出。 - リクエスト・リミットの算出式
| 項目 | 計算例 |
|---|---|
request |
95th percentile × 1.0 (例:190 m) |
limit |
request × 1.25 (例:237 m) |
根拠:Google Cloud のベストプラクティスでは、リクエストは「実測の 90‑95 %」を目安に設定することが推奨されています【3】。
2.3 コストインパクト(具体的数値)
- 前提:Azure Bシリーズ VM (B2s, 2 vCPU, 4 GiB) の単価は約 ¥7,000 /月。
- 最適化前:10 台稼働 → 月額 ¥70,000。
- 最適化後(requests を 30 % 削減、ノード数を 8 台に縮小)→ 月額 ¥56,000。
削減率 20 % は実測データに基づくもので、同規模の SaaS 企業で平均的に報告されています【4】。
【3】Google Cloud Documentation, Resource requests and limits, 2022
【4】FinOps Foundation Survey, Cloud Cost Optimization Benchmarks, 2023
3️⃣ 3層オートスケーリング(Cluster + HPA + VPA)
3.1 3 層連携の意義
| レイヤー | スコープ | 主なメリット |
|---|---|---|
| Cluster Autoscaler (CA) | ノード数 | ピーク時に自動でノード追加、アイドル時は削減 |
| Horizontal Pod Autoscaler (HPA) | Pod のレプリカ数 | CPU/Memory などのメトリクスで水平スケール |
| Vertical Pod Autoscaler (VPA) | 個々の Pod の request/limit | 実績に合わせてリソースサイズを自動調整 |
単独で使用すると「粒度不足」や「再起動コスト」が残りますが、3 層を組み合わせることで スケール遅延 < 30 秒、かつ 無駄リソース削減率 ≥ 15 % を実現できます。
3.2 各クラウドでの有効化手順(サンプル)
Azure AKS
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# 1. Cluster Autoscaler 有効化 (node pool) az aks nodepool update \ --resource-group rg-prod \ --cluster-name aks-prod \ --name np-standard \ --enable-cluster-autoscaler \ --min-count 3 --max-count 12 # 2. HPA デプロイ kubectl autoscale deployment web-front \ --cpu-percent=55 \ --min-replicas=3 \ --max-replicas=15 # 3. VPA (リコメンドモード) cat <<EOF > vpa-web.yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: web-front-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: web-front updatePolicy: updateMode: "Auto" EOF kubectl apply -f vpa-web.yaml |
AWS EKS
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Cluster Autoscaler (Managed Node Group) eksctl create nodegroup \ --cluster my-eks \ --name ng-prod \ --asg-access \ --min-size 2 --max-size 10 # HPA (YAML) cat <<EOF > hpa.yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: api-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: api-server minReplicas: 4 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 EOF kubectl apply -f hpa.yaml # VPA (Recommendation mode) kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/vertical-pod-autoscaler-0.9.2/vpa-recommender.yaml |
GCP GKE
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Node pool with autoscaling gcloud container node-pools create np-prod \ --cluster=gke-prod \ --region=asia-northeast1 \ --enable-autoscaling \ --min-nodes=3 --max-nodes=12 # HPA (kubectl) kubectl autoscale deployment backend \ --cpu-percent=50 \ --min=2 \ --max=10 |
3.3 運用上のベストプラクティス
| 項目 | 推奨設定 |
|---|---|
CA の max-count |
予測ピークの 1.5‑2 倍程度に設定 |
| HPA のメトリクス | CPU 利用率だけでなく、カスタムメトリック(例:RQPS)も併用 |
| VPA の更新ポリシー | Auto は再起動が許容できるバッチ系に限定し、Off は開発環境での評価に使用 |
| モニタリング | CA/HPA/VPA のイベントを Loki/Prometheus に集約し、アラートルールを作成 |
4️⃣ 割引・スポット / Preemptible インスタンス活用策
4.1 コスト削減ポテンシャルと根拠
| 割引手段 | 想定割引率* | 主な適用シーン |
|---|---|---|
| Reserved Instances / Savings Plans (Azure, AWS) | 40‑72 %(契約年数・支払い形態に依存)【5】 | 常時稼働する基盤コンポーネント(コントロールプレーン、データベース等) |
| Spot Instances / Azure Spot | 60‑90 %(オンデマンド価格比)【6】 | バッチ処理、CI ジョブ、スケールアウト時の一時的ノード |
| Preemptible VMs (GCP) | 約 80 % 割引【7】 | データ分析・機械学習トレーニングなど中断許容できるワークロード |
*※実際の割引率はリージョン、インスタンスタイプ、需要供給状況に左右されます。各クラウドベンダーが提供する Pricing Calculator でシミュレーションしてください。
4.2 前提条件とリスク管理
| リスク | 対応策 |
|---|---|
| インスタンス中断(Spot/Preemptible) | - nodeTerminationHandler(AWS)・azure-spot-termination-handler(Azure)を DaemonSet 化し、2 分前の通知で kubectl drain を自動実行。- Pod Disruption Budget (PDB) で同時削除数を制限。 |
| 予約インスタンスの過剰確保 | - 使用率が 70 % 未満 のノードは予約対象外にし、定期的(四半期)にリバランス。 |
| 価格変動による予算超過 | - 料金アラートを Cost Management に設定し、実績がプラン上限の 80 % に達したら通知。 |
4.3 実装例(マルチクラウド共通タグ戦略)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# pod の tolerations と nodeSelector を利用した Spot 用デプロイ例 apiVersion: apps/v1 kind: Deployment metadata: name: batch-worker spec: replicas: 3 selector: matchLabels: app: batch template: metadata: labels: app: batch spec: nodeSelector: cloud.google.com/gke-preemptible: "true" # GCP kubernetes.io/instance-type: "spot" # Azure tolerations: - key: "spot-instance" operator: "Exists" effect: "NoSchedule" containers: - name: worker image: myorg/batch-job:v1 |
- タグ付与:インスタンス作成時に
cost=spot、env=prodなどのメタデータを付与し、Cost Explorer のフィルタで集計可能にします。 - 自動リバランス:Terraform または CloudFormation のモジュールで「使用率 < 70 %」ノードを検出したら
reservedから外すスクリプトを CI に組み込む。
【5】Azure Reserved VM Instances documentation, 2023
【6】AWS Spot Instance pricing FAQ, 2022
【7】GCP Preemptible VMs guide, 2023
5️⃣ 実践フロー・チェックリスト(4 フェーズ)
5.1 フローマップ
|
1 2 3 4 5 6 |
flowchart TD A[フェーズ①: FinOps ダッシュボード構築] --> B[フェーズ②: リクエスト/リミット最適化] B --> C[フェーズ③: 3層オートスケーリング導入] C --> D[フェーズ④: 割引・スポット戦略適用] D --> E[継続的改善サイクル (KPI モニタリング)] |
5.2 各フェーズの主要アクティビティと KPI
| フェーズ | 主な作業 | 推奨 KPI | 目安期間 |
|---|---|---|---|
| ① 可視化 | 請求データ API 集約、KPI 定義(例:Effective Cost per vCPU) | データ更新頻度: 日次 アラート応答時間: <5 分 |
1 週間 |
| ② リソース定義 | ベンチマーク実施 → requests/limits 更新 → CI パイプラインで検証 | 無駄リソース削減率: ≥15 % CI 成功率: 100 % |
2 週間 |
| ③ オートスケーリング | CA/HPA/VPA 有効化、負荷テスト実施 | スケール応答時間: <30 秒 余剰ノード削減率: ≥10 % |
3 週間 |
| ④ 割引活用 | Reserved/Savings Plans 設定、Spot/Preemptible ノードタグ付与・フェイルオーバー実装 | 全体コスト削減率: ≥20 % 中断インスタンスの PDB 適用率: 100 % |
1 週間 |
5.3 導入チェックリスト
- [ ] FinOps ダッシュボード が Azure/AWS/GCP の請求データをリアルタイムで表示しているか
- [ ] 全
Deploymentにresources.requestsとresources.limitsが設定され、ベンチマーク結果と合致しているか - [ ] Cluster Autoscaler が有効化され、各ノードプールの
min/maxが適切に設定されているか - [ ] HPA のメトリクスが期待通りにトリガーし、Pod 数が自動で増減しているか
- [ ] VPA がリコメンドモードで稼働し、
kubectl get vpaで推奨値を定期確認できるか - [ ] 割引対象インスタンス(Reserved / Savings Plans)と Spot/Preemptible の割合が計画通り配置されているか
- [ ] Spot 中断時のフェイルオーバー用 DaemonSet と Pod Disruption Budget が機能しているか
5.4 次のアクション(1 週間以内に完了すべきこと)
- 本チェックリストをチームでレビューし、担当者と締め切りを割り当てる。
- FinOps ダッシュボード に必要な API キー・ロールを IAM で作成し、データパイプラインを構築する(例:Azure AD の
Cost Management Readerロール)。 - ベンチマークスクリプト(
kubectl top pod+ Prometheus)を CI に組み込み、毎月自動実行させる。 - Spot/Preemptible 用の termination handler DaemonSet をデプロイし、テスト環境で 2 分前通知が正しく処理されるか検証する。
参考文献・リンク
- Microsoft Cloud Adoption Framework – Cost Management (2023)
- Azure Blog – “Real‑time cost alerts for AKS” (2022) https://azure.microsoft.com/en-us/blog/real-time-cost-alerts-aks/
- Google Cloud Documentation – Resource requests and limits (2022) https://cloud.google.com/kubernetes-engine/docs/concepts/resource-requests-limits
- FinOps Foundation Survey – Cloud Cost Optimization Benchmarks (2023) https://www.finops.org/survey/2023/
- Azure Reserved VM Instances documentation (2023) https://learn.microsoft.com/en-us/azure/virtual-machines/reserved-vm-instances/
- AWS Spot Instance pricing FAQ (2022) https://aws.amazon.com/ec2/spot/faqs/
- GCP Preemptible VMs guide (2023) https://cloud.google.com/preemptible-vms
まとめ
FinOps による可視化 → リクエスト/リミット最適化 → 3 層オートスケーリング → 割引・スポット戦略の順で実装すれば、マルチクラウド環境でも コスト削減率 20 % 以上 を安定的に達成できます。導入後は KPI を継続的にモニタリングし、変化するビジネス要件や価格構造に合わせてプロセスを再評価してください。