1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud BillingをAWSへ取り込む

Posted at

これは何?

Google Cloudの利用料データ(Cloud Billing)をAWS側へ取り込み方法の検討メモ。
(最終的には取り込んだデータをQuickSightで可視化したい。)

Google Cloud、AWS間でのCloud Billingの連携

連なるべくマネージドサービスに寄せる方針で検討。

<案としては3つ>

  1. AthenaからBigQueryに対してクエリを投げる。
  2. GlueでBigQueryのデータをS3へ保存。S3へ保存したメタデータをGlue Data Catalogに保存し、Athanaからクエリを投げる。
  3. BigQueryからCloudStorageにエクスポートする。AthenaからCloudStorageに対しクエリを投げる。

1. AthenaからBigQueryに対してクエリを投げる。

Athenaカスタムコネクタを使って、AthenaからBigQueryへクエリを投げる方法。

ドキュメントに、Athenaカスタムコネクタの制約事項に構造体データは未サポートという記載がある。
Cloud Billingのデータでは一部構造体データを含むデータが存在するが、Viewを作成することで回避は可能と思われる。(未検証)

参考)
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors-bigquery.html
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connect-data-source-serverless-app-repo.html

カスタムコネクタの実体はLambda関数とのこと。
AWS Serverless Application Repositoryにテンプレートが用意されているので、
パラメーターを入力すればカスタムコネクタ環境のデプロイができる。

参考)
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connect-to-a-data-source-lambda.html

2. GlueでBigQueryのデータをS3へ保存。S3へ保存したメタデータをGlue Data Catalogに保存し、Athanaからクエリを投げる。

Glueカスタムコネクタを使って、BigQueryデータを取り込む方法。

3. BigQueryからCloudStorageにエクスポートする。AthenaからCloudStorageに対しクエリを投げる。

Athenaカスタムコネクタを使って、AthenaからCloudStorageへクエリを投げる方法。

参考)
https://docs.aws.amazon.com/athena/latest/ug/connectors-gcs.html
https://cloud.google.com/bigquery/docs/scheduling-queries?hl=ja#set_up_scheduled_queries

Glueカスタムコネクタの方法で検証

①Glueカスタムコネクタの設定

大まかな流れはのドキュメントを参照すればできる。

AWS MarketplaceにAWSが提供しているGlueカスタムコネクタがあるのでそちらを使用する。
ただ、ドキュメントからMarketplaceのリンクの飛ぶと、カスタムコネクタのバージョンが古くて削除されている。
新しいカスタムコネクタはこちら

ドキュメントと差異があるのはGlueのバージョン選択くらい。
スクリーンショット 2023-03-15 12.09.04.jpg

Glueジョブもドキュメントに従い作成できる。
BigQueryから取り込んだデータはS3へ保存され、メタデータがGlue Data Catalogへ保存される。

②Athenaでクエリを実行

AthenaでGlue Data Catalogのデータが参照できることを確認。

③Glueジョブのスケジューリング設定

追加で行った設定として、
日次でBigQueryからデータを取り込みたいので、Glueジョブのスケジューリングを設定。
(UTC時刻で設定)

参考)
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/about-triggers.html

④取り込みデータの重複排除について

日次でデータを取り込むにあたって、データ重複が懸念される。
Glueジョブのジョブブックマーク機能を利用すれば、最後のジョブ実行以降の増分データのみを取り込み対象とできるのだが、
ソースデータがGlueカスタムコネクトだと対応していないらしい。

参考)
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/monitor-continuations.html
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/monitor-continuations.html

データ重複で増え続けていくと

  • 毎日データを取り込むことになるため、S3側に重複したデータが溜まり続けることになる。取り込むデータ量にもよるがS3の利用料が膨れる。
  • QuickSightでビジュアル化する際にAthena経由でクエリを投げることになるが、クエリの実行時間も長くなってしまう。

対応方法

S3のライフサイクルポリシーで1日経過したオブジェクトは削除。
ライフサイクルの削除タイミングにより一時的にデータ重複する期間はある為、Athena側で重複データは丸める方針とした。
他の方法としては、Pushdown Predicate による入力データの絞り込みを行う方法もあるようだが未検証。

備考

Google Cloudの利用料データをエクスポートするには

プロジェクトの利用料データ(Cloud Billing)は請求先アカウントに集約される。
利用料データをエクスポートするには、請求アカウントでBigQueryに対して利用料データのエクスポートの設定がされている必要があり、
BigQueryを介して利用料データを取得する必要がある。

参考)
https://cloud.google.com/billing/docs/how-to/manage-billing-account?hl=ja
https://cloud.google.com/billing/docs/how-to/export-data-bigquery?hl=ja

Cloud Billingデータの構成について

料金テーブルは2種類存在する。

  • 標準の使用料金テーブル – BigQuery データセットでは、このテーブルには gcp_billing_export_v1_ という名前が付けられています。
  • 詳細な使用料金テーブル - 標準の使用料金テーブルのすべてのデータ項目に加えて、リソースレベルの費用データを提供する追加の項目(例: サービス使用量を生成する仮想マシンまたは SSD)が含まれます。BigQuery データセットでは、このテーブルの名前は gcp_billing_export_resource_v1_ です。

参考)
https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables?hl=ja
https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/standard-usage?hl=ja
https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables/detailed-usage?hl=ja

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?