これは何?
Google Cloudの利用料データ(Cloud Billing)をAWS側へ取り込み方法の検討メモ。
(最終的には取り込んだデータをQuickSightで可視化したい。)
Google Cloud、AWS間でのCloud Billingの連携
連なるべくマネージドサービスに寄せる方針で検討。
<案としては3つ>
- AthenaからBigQueryに対してクエリを投げる。
- GlueでBigQueryのデータをS3へ保存。S3へ保存したメタデータをGlue Data Catalogに保存し、Athanaからクエリを投げる。
- 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のバージョン選択くらい。
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