BigQuery への Cloud Billing データのエクスポートと Looker Studio を組み合わせることで、 Google Cloud の費用情報を常に最新の状態に保つことができます。
このドキュメントでは、Cloud Billing データを使用して課金状況と費用に関する分析情報のダッシュボードを設定する方法について説明します。ダッシュボードを使用すると、Compute Engine リソースの使用量など、 Google Cloud の費用に関する情報を確認できます。

 
ダッシュボードを設定するには、このチュートリアルに沿って操作するか、次の動画をご覧ください。
ダッシュボードのコピーを作成する
Terraform
Terraform を使用してダッシュボードの独自のコピーを作成するには、まず、プロセスを自動化する GitHub リポジトリのクローンを作成します。この手順では Cloud Shell を使用します。Cloud Shell は Google Cloud のインタラクティブなシェル環境で、ブラウザで使用できます。Cloud Shell には Terraform がプリインストールされています。
リポジトリ内の Terraform 構成は、次のタスクを行います。
- 標準の費用データのエクスポートからデータを取得する新しい BigQuery ビューを作成します。
- ダッシュボード テンプレートをコピーして、データの BigQuery ビューに接続します。
- Looker Studio へのリンクを提供します。このリンクは Looker Studio ダッシュボードに保存できます。
- ダッシュボードの認証方法として使用する Google Cloud サービス アカウント ID を取得します。
ダッシュボードを作成する手順は次のとおりです。
- Cloud Shell で GitHub リポジトリを開きます。 
- プロジェクトと BigQuery データセットに関する情報を含む Terraform 変数定義ファイルを作成します。次のコマンドを使用して、 - variables.tfvarsというファイルを作成します。- cat << EOF > variables.tfvars project-id = "PROJECT_ID" bq-dashboard-dataset-name = "DATASET_NAME" bq-billing-export-table-id = "PROJECT_ID.DATASET_NAME.TABLE_ID" looker-studio-service-agent-name = "LOOKER_STUDIO_AGENT_NAME" EOF- 変数は次のとおりです。 - PROJECT_ID: Cloud Billing データセットをホストするプロジェクト ID。
- DATASET_NAME: 標準の費用データ エクスポートを含む BigQuery データセット。
- TABLE_ID: 標準の課金データ エクスポートを含む BigQuery テーブルの名前。
- LOOKER_STUDIO_AGENT_NAME: Looker Studio サービス エージェントのメールアドレス。Looker Studio サービス エージェントのヘルプページで確認できます。
 
- GitHub リポジトリを Terraform の作業ディレクトリとして初期化するには、次のコマンドを実行します。 - terraform init
- 必要に応じて、Terraform 構成によって行われる変更をプレビューするには、次の - terraform planコマンドを実行します。- terraform plan -var-file=variables.tfvars- Cloud Shell に API 呼び出しを行う権限を付与するよう求められることがあります。 
- Terraform の変更を確認します。変数の値を変更する必要がある場合は - variables.tfvarsを編集します。リソースを作成できる状態になったら、次の- terraform applyコマンドを実行します。- terraform apply -var-file=variables.tfvars- コマンドを実行すると、認証用に作成されたサービス アカウントと、Looker Studio ダッシュボードへのリンクが表示されます。 
- サービス アカウント名をコピーします。この情報は、Looker Studio データソースの認証を構成するときに必要になります。 
- Looker Studio のリンクをクリックしてダッシュボードを開きます。 
- Looker Studio で [Edit and share] をクリックしてダッシュボードを保存します。データアクセス設定を確認するように求められたら、[Acknowledge and save] をクリックします。 
- レポートへのデータの追加を求めるメッセージが表示されたら、[Add to report] をクリックします。 
これで Looker Studio のホームページからダッシュボードにアクセスできるようになりました。
Python
Python を使用してダッシュボードの独自のコピーを作成するには、まず、プロセスを自動化する GitHub リポジトリのクローンを作成します。この手順では Cloud Shell を使用します。Cloud Shell は Google Cloud のインタラクティブなシェル環境で、ブラウザで使用できます。
リポジトリ内のセットアップ スクリプトは次のタスクを行います。
- 標準の費用データのエクスポートを含むデータセットに、新しい BigQuery ビューを作成します。
- ダッシュボード テンプレートをコピーして、データの BigQuery ビューに接続します。
- Looker Studio へのリンクを提供します。このリンクは Looker Studio ダッシュボードに保存できます。
ダッシュボードを作成する手順は次のとおりです。
- Cloud Shell で GitHub リポジトリを開きます。 
- billboardディレクトリに移動します。- cd examples/billboard
- 次のコマンドを実行して、スクリプトの Python 環境を設定します。 - rm -rf bill-env python3 -m venv bill-env source bill-env/bin/activate pip install -r requirements.txt
- ダッシュボードを作成するスクリプトを実行します。API 呼び出しを行うために Cloud Shell の認可が必要になることがあります。 - python billboard.py \ -pr 'PROJECT_ID' \ -se 'STANDARD_BILLING_EXPORT_DATASET' \ -bb 'BILLBOARD_DATASET'- 変数は次のとおりです。 - PROJECT_ID: Cloud Billing データセットをホストするプロジェクト ID。
- STANDARD_BILLING_EXPORT_DATASET: 標準の使用料金データのエクスポートを含む BigQuery データセット。
- BILLBOARD_DATASET: ダッシュボードの BigQuery ビューが作成される BigQuery データセットの名前(例: example_dashboard_view)。ビューのデータセットがまだない場合は、スクリプトがこの名前で新しいデータセットを作成します。
 - スクリプトの実行が完了すると、Looker Studio にダッシュボードのリンクが表示されます。 
- Looker Studio のリンクをクリックしてダッシュボードを開きます。 
- Looker Studio で [Edit and share] をクリックしてダッシュボードを保存します。データソースをレポートに追加するように求められたら、[Add to report] をクリックします。 
これで Looker Studio のホームページからダッシュボードにアクセスできるようになりました。
(省略可)データソースの認証情報を構成する
デフォルトでは、課金状況のダッシュボードは、ユーザーの認証情報を使用して BigQuery データソースにアクセスします。ダッシュボードを他のユーザーと共有する場合は、 Google Cloud サービス アカウントを使用して BigQuery データセットを認証し、データソースがユーザーの認証情報に依存しないようにすることをおすすめします。
Terraform を使用してダッシュボードをコピーした場合は、terraform apply コマンドを実行するとサービス アカウント ID が取得されます。Python スクリプトを使用した場合は、次の手順でサービス アカウントを手動で作成する必要があります。
- Looker Studio サービス エージェントのヘルプページで、Looker Studio サービス エージェントのメールアドレスを取得します。 
- ダッシュボードの BigQuery ビューがあるプロジェクトに対する次の権限をサービス アカウントに付与します。 - bigquery.dataViewer
- bigquery.jobUser
- iam.serviceAccountTokenCreator
 
サービス アカウント ID を取得したら、次の手順でサービス アカウントを使用して認証を行います。
- Looker Studio のホームページでダッシュボードを開きます。 
- [Edit] をクリックしてダッシュボードを編集します。 
- [Resource] メニューから [Manage added data sources] を選択します。ダッシュボードのデータソースの名前は - billing-export-viewで始まります。
- データソースの [Actions] 列で、[Edit] をクリックします。 
- [Data credentials] をクリックします。 
- [Update data credentials] ページで、[Service account credentials] を選択し、サービス アカウント ID を入力します。 
- [Update] をクリックして、サービス アカウントの認証情報を使用します。 
- [Done] をクリックして、データソースへの変更を保存します。 
- ダッシュボードを表示するには、[View] をクリックします。 
組織のラベルを使用するようにダッシュボードを更新する
ダッシュボードのいくつかのグラフ(Cost Reporting: Labels ページのグラフなど)は、リソースのラベルに基づいています。特定のラベル別の費用の正確な内訳を確認するには、独自のラベルを使用するようにデフォルトのフィルタを変更する必要があります。
- Looker Studio のホームページでダッシュボードを開きます。 
- [Edit] をクリックしてダッシュボードを編集します。 
- [Resource] メニューから [Manage filters] を選択します。 
- labels.keyと- project.labels.keyに基づくフィルタを確認し、必要に応じて [Edit] をクリックして、組織で使用しているラベルキーに変更します。- たとえば、ラベルキー - departmentを使用してビジネス ユニット別にリソースを整理する場合は、- business_unitフィルタを編集して、- project.labels.keyフィルタを- departmentに変更します。
- [Close] をクリックして、フィルタの編集を終了します。 
ダッシュボードでデータを分析する
Looker Studio ダッシュボードのページでは、費用データが分類されているため、費用と傾向の概要を簡単に確認したり、費用に関する詳細情報を取得したりできます。
ほとんどのページでは、プロジェクト別にデータをフィルタできます。また、カレンダーを使用して、費用の分析期間を選択することもできます。
費用の概要を確認する
[Overview] ページでは、当月と前月の請求額の差、上位のサービスにかかる費用、過去 30 日間の 1 日あたりの費用を確認できます。
[Trends] ページでは、当月と前月、今四半期と前四半期など、さまざまな期間の費用を比較できます。
[Analysis] ページでは、期間ごとの費用を分析し、異常な高額または低額の費用などの異常を特定できます。
コスト要因を特定する
次のページで、最も費用がかかっている項目を確認します。
- サービス別の月別費用
- プロジェクト別の月別費用
- プロジェクト、サービス、SKU 別の費用
- リージョン別の費用
各サービスの費用の詳細を確認するには、サービス固有のページを使用します。たとえば、[GKE Clusters] ページには、GKE クラスタと Namespace 別の費用の内訳が表示されます。
確約利用割引で費用削減の機会を特定する
確約利用割引(CUD)では、特定の期間において最小レベルのリソースを使用するよう確約することで、割引料金を利用できるようになります。
ダッシュボードの CUD ページには、CUD の対象となる可能性のある Compute Engine、Cloud SQL、Memorystore の使用量が表示されます。CUD がすでにある場合、これらのページには、既存の CUD の対象外である使用量のみが表示されます。
Cloud Marketplace ソフトウェアと追加ライセンスの費用を確認する
[Marketplace] ページを使用して、Cloud Marketplace から購入したソフトウェア(Google Cloud NetApp Volumes など)の費用を確認します。
[Licenses] ページを使用して、Compute Engine 上の Windows Server のライセンスや、Cloud Marketplace から購入したサードパーティ ライセンスなどの追加ライセンスの費用を確認します。
ラベル別の費用を表示する
組織のラベルを使用するようにダッシュボードのフィルタをカスタマイズできます。フィルタを更新したら、次のページを使用して、プロジェクトとフォルダ全体の費用を確認できます。
- [By application] ページには、ラベルキー - applicationのすべてのリソースの費用が表示されます。たとえば、ウェブアプリとモバイルアプリがあり、それぞれのリソースに- application:webと- application:mobileというラベルを付けると、各アプリケーションの費用を個別に確認できます。
- [Labels] ページには、コストセンターやビジネスコードなど、特定のラベルの費用が表示されます。ダッシュボードのフィルタをカスタマイズした場合は、グラフのタイトルを変更してフィルタを反映できます。 
(上級者向け)複数の Cloud 請求先アカウントのデータを変更する
ダッシュボードに複数の Cloud 請求先アカウントのデータを含める場合は、すべての Cloud 請求先アカウントの課金データのエクスポートを含むように、BigQuery ビューを変更します。
始める前に
追加する Cloud 請求先アカウントごとに、チュートリアルの前提条件のすべての手順を完了します。
BigQuery ビューを更新して追加の Cloud Billing エクスポートを含める
- Google Cloud コンソールで、[BigQuery] ページを開きます。 
- ダッシュボード用に作成したデータセットを含むプロジェクトを選択します。 
- [エクスプローラ] パネルでプロジェクトを開き、データセットを開きます。 
- Billboard ビューをクリックして詳細を表示します。このビューでは、標準費用と使用状況データのエクスポートをクエリします。 
- [詳細] タブをクリックしてから、[クエリを編集] をクリックします。ビューのクエリは、次のようになります。 - SELECT *, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, date(usage_end_time) AS date from `PROJECT_ID.BILLING_ACCOUNT_EXPORT` s WHERE date(usage_end_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)- ここで、PROJECT_ID は Cloud Billing の BigQuery 標準費用データのエクスポートを含むプロジェクトです。BILLING_ACCOUNT_EXPORT は、標準費用データを含む BigQuery テーブルの名前です。 
- 既存のクエリを複製します。 - FROM句で、プロジェクト ID と BigQuery テーブルを追加の Cloud 請求先アカウントの情報に置き換えます。
- 2 つのクエリの間に - UNION ALL演算子を追加して、データを結合します。最終的なクエリは次のようになります。これは、それぞれ PROJECT_ID_1 と PROJECT_ID_2 にある BILLING_ACCOUNT_1 と BILLING_ACCOUNT_2 のデータ エクスポートを組み合わせたものです。- SELECT *, --query for BILLING_ACCOUNT_1 COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, EXTRACT(DATE FROM _PARTITIONTIME) AS date FROM `PROJECT_ID_1.BILLING_ACCOUNT_1_EXPORT` s WHERE _PARTITIONTIME >"2021-01-01" UNION ALL SELECT *, --query for BILLING_ACCOUNT_2 COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, date(usage_end_time) AS date from `PROJECT_ID_2.BILLING_ACCOUNT_2_EXPORT` s WHERE date(usage_end_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)
- 詳細な費用と使用状況データをクエリする billboard_detail ビューに対して、上記の手順を繰り返します。 
- 米ドルと異なる通貨を使用しているアカウントがある場合は、この手順を繰り返し、次の例のように - currency_conversion_rate列を使用して米ドルに換算します。- select *, (COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0))/currency_conversion_rate AS credits_sum_amount, (COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0))/currency_conversion_rate + cost/currency_conversion_rate as net_cost, 'USD' as net_cost_currency, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, date(usage_end_time) AS date from `PROJECT_ID.BILLING_ACCOUNT_DATASET` s WHERE date(usage_end_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)