Contents
Cost Table の概要と有効化手順
1‑1. 「Cost Table」って何?
| 項目 | 内容 |
|---|---|
| 提供形態 | Cloud Billing の プレビュー機能(2024 年 11 月に発表) |
| 主なメリット | ・マルチリージョン・複数サービスを単一テーブルで取得 ・従来はリージョンごとに別々の見積もりが必要だった点を解消 |
| 対象リソース | Compute Engine、Cloud Run、BigQuery など主要 IaaS / PaaS サービス(※対象外サービスは Cloud Billing の標準エクスポートで取得) |
| 公式情報 | https://cloud.google.com/billing/docs/cost-table |
重要:Cost Table はプレビュー段階のため、将来的に UI・API が変更される可能性があります。実運用では必ず最新ドキュメントを確認してください。
1‑2. Cloud Console での有効化手順
- Cloud Console → Billing に移動
- 左メニューから Cost table (preview) を選択
- 「Enable」ボタンをクリックし、対象の Billing アカウントに対して機能を有効化
有効化後は同画面で「Download sample CSV」や API エンドポイントの確認ができます。
Cost Table を利用したマルチリージョン見積もり例
以下は Compute Engine / Cloud Run / BigQuery の 3 カテゴリを対象に、米国・欧州・日本のリージョンで同時にリソース使用量を入力し、Cost Table が出力する CSV(サンプル)です。
|
1 2 3 4 5 |
service,region,vCPU_hours,memory_GBhr,storage_GBmo,total_cost_usd Compute Engine,us-central1,500,2000,150,1240.00 Cloud Run,europe-west1,,300,,45.30 BigQuery,asia-northeast1,,,2048,320.50 |
1‑3. 実践的な見積もりフロー(H3)
| 手順 | 操作内容 |
|---|---|
| ① テーブル取得 | Cloud Billing API の billingAccounts/{account}/costTables:export エンドポイントに GET リクエスト。認証は gcloud auth application-default login で取得したアクセストークンを使用。 |
| ② 必要項目の選択 | UI では「Service」「Region」「Metric(vCPU、Memory、Storage)」をチェックボックスで指定可能。API の場合はリクエストボディに selectedMetrics 配列を記載。 |
| ③ CSV ダウンロード | エクスポート完了後、Console の「Download」リンクまたは API が返す Cloud Storage パスから取得。 |
補足:Cost Table は 24 時間以内の最新使用量データしか保持しません。長期的な分析が必要な場合は Billing Export(BigQuery)と併用してください。
コスト取得・レポート生成の自動化スクリプト
2‑1. 前提条件
| 項目 | 内容 |
|---|---|
| 必要権限 | roles/billing.viewer、roles/storage.objectAdmin、roles/cloudfunctions.invoker |
| 使用サービス | Cloud Scheduler、Cloud Functions、Cloud Storage、BigQuery |
| 推奨言語 | Bash(gcloud)+ Python(Functions) |
2‑2. エクスポートコマンド(Bash)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/usr/bin/env bash set -euo pipefail # 環境変数 ACCOUNT_ID="012345-6789AB-CDEF01" BUCKET="gs://my-billing-reports" DATE=$(date +%Y-%m-%d) gcloud beta billing budgets export \ --billing-account="${ACCOUNT_ID}" \ --destination-uri="${BUCKET}/cost-table-${DATE}.json" \ --format=json |
--destination-uriに日付変数${DATE}を埋め込むことで、日次ファイルが自動生成されます。- 出力は JSON(Cost Table のスキーマに準拠)です。
2‑3. Cloud Scheduler と Cloud Functions の連携例(YAML)
|
1 2 3 4 5 6 7 8 9 10 |
# scheduler-job.yaml name: projects/PROJECT_ID/locations/us-central1/jobs/export-cost-table schedule: "0 3 * * *" # 毎日 UTC 03:00 に実行 timeZone: "Asia/Tokyo" httpTarget: uri: https://REGION-projectid.cloudfunctions.net/exportCostTable httpMethod: POST oauthToken: serviceAccountEmail: scheduler@example.iam.gserviceaccount.com |
Cloud Function(Python) – exportCostTable
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import subprocess import os from datetime import datetime def export_cost_table(request): """Cloud Functions エンドポイントから gcloud コマンドを実行し、JSON を Cloud Storage に保存""" date_str = datetime.utcnow().strftime("%Y-%m-%d") bucket = os.getenv("BUCKET_NAME", "my-billing-reports") billing_account = os.getenv("BILLING_ACCOUNT", "012345-6789AB-CDEF01") cmd = [ "gcloud", "beta", "billing", "budgets", "export", f"--billing-account={billing_account}", f"--destination-uri=gs://{bucket}/cost-table-{date_str}.json", "--format=json" ] subprocess.run(cmd, check=True) return ("Export completed for %s" % date_str, 200) |
ポイント:関数内部で
gcloudコマンドを直接呼び出す方式は簡便ですが、実運用では Cloud Billing API (billingaccounts.costtables.export) を Python の公式クライアントで呼び出す方がロギングやエラーハンドリングが容易です。
2‑4. BigQuery へのロード例(SQL)
|
1 2 3 4 5 6 7 8 9 10 |
CREATE OR REPLACE TABLE `billing_dataset.cost_table_daily` AS SELECT * FROM EXTERNAL_QUERY( "my-connection", ''' SELECT * FROM JSON_EXTRACT_ARRAY( (SELECT content FROM `my-bucket.my-billing-reports/*.json`) ) ''') |
- 外部テーブル を利用して Cloud Storage の JSON ファイルを直接クエリ。
- ロード後は標準的な
billing_datasetテーブルと同様に 日次集計、ラベル別分析 が可能です。
割引制度(CUD / SUD)の最新適用条件とシミュレーション
3‑1. 公式情報へのリンク
| 制度 | 公式ドキュメント |
|---|---|
| Committed Use Discount (CUD) | https://cloud.google.com/compute/docs/instances/committed-use-discounts |
| Sustained Use Discount (SUD) | https://cloud.google.com/compute/docs/sustained-use-discount |
主な変更点(2024‑2025 年版)
| 項目 | 旧仕様 | 新仕様(2024‑2025) |
|---|---|---|
| CUD の最長期間 | 1 年、2 年 | 3 年 に拡張(※3 年コミットは --duration=3y オプションで指定可能) |
| SUD 割引上限 | 最大 30%(Compute Engine) | 35% へ緩和(2025 年 4 月以降に適用) |
| 割引率の算出根拠 | 使用時間が一定以上になると段階的に割引 | 同様だが、利用率閾値が低下し、30% 未満でも割引が始まる |
注意:上記数値は公式ドキュメントの「Discount rates」表を抜粋したものであり、サービス別・マシンタイプ別に若干差異があります。実際の見積もりは
gcloud compute commitments createコマンドまたは Billing API の pricing エンドポイントで確認してください。
3‑2. シミュレーション例(Compute Engine)
| ワークロード | 月間使用量 (vCPU‑hr) | CUD(3 年)適用例 | SUD 適用例 |
|---|---|---|---|
| Web フロントエンド (n1-standard-4) | 720 (=30×24) | 30% 割引 → $1,400 → $980 | 実績 22% 割引 → $1,400 → $1,092 |
| バッチ処理 (Preemptible VMs) | 200 | CUD 非対象(代替は Spot Pricing) | 利用が断続的なため 8% のみ適用 |
シミュレーション手順
- CUD 見積もり(gcloud)
bash
gcloud compute commitments create cud-web \
--region=us-central1 \
--machine-type=n1-standard-4 \
--duration=3y \
--plan=monthly \
--billing-project=my-project
- SUD 割引シミュレーション(BigQuery)
sql
SELECT
SUM(cost) AS total_cost,
SUM(
CASE
WHEN usage_hours >= 500 THEN cost * 0.65 -- 35% 割引 (上限)
WHEN usage_hours >= 250 THEN cost * 0.75 -- 25% 割引
ELSE cost
END
) AS sud_discounted_cost
FROM billing_dataset.cost_table_daily
WHERE service = 'Compute Engine'
AND month = '2025-07'
上記クエリは 利用時間帯別に割引率を段階適用 したシンプルな例です。実際の SUD は自動で算出されますが、予測シミュレーションとして有効です。
AI リコメンダーとオートスケーリングで実現する即効削減策
4‑1. Rightsizing Recommendations(公式)
- ドキュメント: https://cloud.google.com/recommender/docs/compute/rightsizing-recommendations
- 主な機能: 過去 30 日間のメトリクスを分析し、インスタンスサイズ・数の削減提案 を自動生成。
API 呼び出し例(curl)
|
1 2 3 4 5 6 7 |
TOKEN=$(gcloud auth print-access-token) PROJECT_ID="my-project" REGION="us-central1" curl -H "Authorization: Bearer $TOKEN" \ "https://recommender.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/recommenders/google.compute.instance.IdleRecommender/recommendations" |
返却例(抜粋):
|
1 2 3 4 5 6 7 8 9 |
{ "name": ".../recommendations/12345", "description": "Reduce instance n1-standard-8 to n1-standard-4", "costProjection": { "costBefore": {"amount":"150.00","currencyCode":"USD"}, "costAfter": {"amount":"78.00", "currencyCode":"USD"} } } |
削減率:48%($72/月)というインスタンスサイズ縮小の典型例です。
4‑2. オートスケーリング設定ベストプラクティス
| 対象 | 推奨パラメータ | 補足 |
|---|---|---|
| Cloud Run | --min-instances=0 --max-instances=200 + CPU 利用率 70% トリガー |
アイドル時は ゼロインスタンス にスケールダウンし、コストを最小化 |
| GKE Autopilot | horizontalPodAutoscaler の cpuUtilization.target: 0.6 と memoryUtilization.target: 0.8 |
Pod 単位でリソース使用率が閾値超過したら自動拡張 |
| Compute Engine Managed Instance Group | targetCpuUtilization: 0.65、coolDownPeriodSec: 300 |
CPU が 65% 超えたときにインスタンス追加、クールダウンで頻繁なスケールインを防止 |
自動化フロー(図式的説明)
- Recommender → Cloud Scheduler (5 分ごと) → Pub/Sub にメッセージ送信
- Cloud Function がメッセージ受信 →
compute.instances.setMachineTypeAPI でインスタンスサイズ変更 - 同時に Managed Instance Group の Autoscaling ポリシー を更新(
gcloud compute instance-groups managed set-autoscaling)
このサイクルを 24/7 で回すことで、過剰プロビジョニングが即座に是正され、10% 前後のコスト削減 が期待できます。
コスト配分・分析、為替リスク対策、Marketplace 最適化
5‑1. ラベル付与と BigQuery による部門別集計
ラベル付与例(gcloud)
|
1 2 3 |
gcloud compute instances add-labels my-vm \ --labels=env=prod,team=data-eng,project=analytics |
部門別コスト集計クエリ
|
1 2 3 4 5 6 7 8 9 10 |
SELECT label_value AS env, SUM(cost) AS total_usd FROM `billing_dataset.cost_table_daily`, UNNEST(labels) AS label_key, UNNEST(label_values) AS label_value WHERE label_key = 'env' GROUP BY env ORDER BY total_usd DESC; |
| env | total_usd |
|---|---|
| prod | 4,250.00 |
| dev | 1,120.50 |
ベストプラクティス:リソース作成時に必ず
env,team,projectラベルを付与し、Billing Export のスキーマと合わせて管理する。
5‑2. 為替変動リスクへの対策(2024‑2025 年版)
| 手順 | 内容 |
|---|---|
| ① 為替レート取得 | bigquery-public-data.exchange_rates.daily を Daily スケジュールでクエリし、最新 USD/JPY レートを取得。 |
| ② Billing の自動通貨変換有効化 | Cloud Console → Billing → Settings → 「Currency conversion」スイッチを ON にする(※組織ポリシーで許可が必要)。 |
| ③ コストレポートに為替レート適用 | 以下の SQL で USD→JPY に変換したコストテーブルを作成。 |
|
1 2 3 4 5 6 7 8 9 10 |
WITH rates AS ( SELECT rate_usd_jpy FROM `bigquery-public-data.exchange_rates.daily` WHERE date = CURRENT_DATE() ) SELECT *, total_cost_usd * (SELECT rate_usd_jpy FROM rates) AS total_cost_jpy FROM `billing_dataset.cost_table_daily`; |
ポイント:為替リスクは 日次更新 のレートで補正するだけでも、月末請求額のブレを数パーセント削減できます。
5‑3. Marketplace の価格モデル変更とサブスクリプション整理
- 公式情報(2024 年 12 月): https://cloud.google.com/marketplace/docs/billing
- 変更点:従来は月額固定のみだったものが、「従量課金 + 固定サブスクリプション」 のハイブリッドモデルに移行(2025 年 4 月以降適用)。
不要サブスクリプションの検出と削除手順
|
1 2 3 4 5 6 |
# 現在の Marketplace サブスクリプション一覧取得 gcloud marketplace listings list --format="json" > listings.json # 「DISABLED」状態または使用実績が 0 のものを抽出(jq 使用例) cat listings.json | jq -r '.[] | select(.state=="DISABLED") | .name' |
削除コマンド(対象 ID を SUBSCRIPTION_ID に置換):
|
1 2 |
gcloud marketplace subscriptions delete SUBSCRIPTION_ID --quiet |
ベストプラクティス:月次で Marketplace サブスクリプションレポート(Billing Export の
sku_id列)を集計し、利用が 0 のものは自動的に削除対象としてフラグ付けする Cloud Scheduler + Cloud Function を構築すると、放置コストの蓄積を防げます。
まとめ
| 項目 | 主な効果 |
|---|---|
| Cost Table(プレビュー) | マルチリージョン・マルチサービスの見積もりが単一テーブルで取得可能。公式ドキュメント確認必須。 |
| 自動化スクリプト | Cloud Scheduler + Functions による日次エクスポートと BigQuery ロードで、手作業ゼロのコストレポート基盤を構築。 |
| CUD / SUD の最新条件 | 3 年コミットが可能に拡張、SUD 割引上限は 35%(2025 年4月以降)。公式ドキュメントで数値確認しながらシミュレーションを実施。 |
| AI リコメンダー + オートスケール | Rightsizing 推奨と自動スケールの組み合わせで、10% 前後の即効削減が期待できる。 |
| ラベル・為替・Marketplace 管理 | ラベル付与で部門別可視化、為替レート自動取得で JPY 請求ブレ抑制、不要サブスクリプション削除で隠れコスト排除。 |
次のステップ
1. Cost Table の有効化(プレビュー)をテスト環境で実施し、エクスポート結果を確認。
2. CUD / SUD シミュレーション を自社ワークロードに合わせて作成し、最適な割引組み合わせを策定。
3. リコメンダー+オートスケール のパイプラインを Cloud Functions + Pub/Sub で構築し、運用開始後は毎月の削減効果をダッシュボード化。
これらの手順とベストプラクティスに沿って実装すれば、Google Cloud 上のコスト管理が 可視化 → 自動化 → 最適化 のサイクルで回り、長期的な支出抑制につながります。
本稿は 2024‑2025 年時点の公式情報に基づき作成しています。Google Cloud は頻繁に機能追加・料金改定を行うため、常に最新ドキュメント を確認しながら運用してください。