AWS CURのデータを
安く楽に可視化して共有したい
Ops JAWS Meetup#19 2021年7月26日(月)
石川 貴之
自己紹介
石川 貴之 (Ishikawa Takayuki)
普段はAWS管理やWEBサービスの運用とかやってます。
好きなAWSサービス:
 CloudFormation, Athena, Organizations
@14tter
14kw
https://14code.com
Contact:
本日話すこと
● クラウドコストの可視化について
● AWSのTIPS
本日話さないこと
● コスト削減についてのノウハウ
単純な可視化ならコストエクスプローラが一番早い
なにかしら検証していくと環境が増えていく
なにかしら検証していくと環境が増えていく
請求データが増えていく
【解決したいこと】
複数AWS Organizationや他クラウド費用を
まとめて可視化したい
対象とする費用データと形式
● AWS Organization 1
○ Parquet形式でS3に出力
● AWS Organization 2
○ Parquet形式でS3に出力
● Google Cloud Platform 1
○ BigQueryに出力
どうやってデータを1つの場所から使えるようにするか
1. データを移動させずにそれぞれにアクセスする方法(ReDash)
2. ひとつのAWSアカウントにデータを集約させる方法(S3, ReDash)
3. 別のDWHにデータを集約させる方法(BigQuery, DataPortal)
データを移動させずに
それぞれにアクセスする方法(ReDash)
ReDashからそれぞれ接続してみる
良い点:
● 特別な設定はいらない
いまいちな点:
● データソース間のJoinには
Query Result使わないといけない
● ReDashを動かす環境が必要
ひとつのAWSアカウントに
データを集約させる方法(S3, ReDash)
S3に集約してAthenaをReDashから使ってみる
良い点:
● ReDashから一つのデータソース
として見える
いまいちな点:
● ReDashを動かす環境が必要
GlueからS3へのクロスアカウントアクセスでエラー
ERROR : User does not have
access to target s3://xxxx/xxxx
CURのデータの所有者がAWS管理のアカウント
バケットポリシーでは不十分だった
バケット所有者とオブジェクト所有者が同一 であれば
バケットポリシーで別アカウントの権限を付けるだけでいいが、
バケット所有者とオブジェクト所有者が異なる と
オブジェクトACLに別アカウントの権限を付ける必要がある
S3バケットのオブジェクト所有者を変更して対応
TIPS:AthenaからGlueにクロスアカウントアクセス
Athenaから別アカウントのGlueデー
タカタログに対してクエリーできる
Athenaからは別データソースに見え
る
TIPS:Athenaに追加したデータソースはReDashから使える
別のDWHにデータを集約させる方法
(BigQuery, DataPortal)
BigQueryに集約してData Portalから使ってみる
良い点:
● ノーコードで実現できる
● Data Portalは無料
● 共有が楽
いまいちな点:
● Data PortalはIaCできない
BigQueryのGCS外部テーブルを利用
CURのデータは月が締まったあとも
更新されることがあるため、Strage
Transfer Serviceで変更があったも
のをGCSに同期。
GCSデータを外部テーブルとして利
用することで、BigQueryへの都度取
り込みの必要をなくします。
TIPS:2021年以前のParquetデータだとエラーになる
Error running query
Error while reading table: xxxxx, error message: Read less values than expected
$ parquet-tools meta cur_2020.parquet
file schema: com.amazon.aws.origami.datawriter.parquet.ParquetDataWriter$
$ parquet-tools meta cur_2021.parquet
file schema: spark_schema
Athenaだと問題なく読めるが、BigQueryからは読めなかった。
Data PortalにGCP費用可視化サンプルがある
https://cloud.google.com/bill
ing/docs/how-to/visualize-d
ata
複数クラウドの費用をまとめる
クラウドごとに出力されるデータ詳細度が違うため注意が必要
Category AWS GCP
各アカウントの請求額 line_item_unblended_cost cost
組織共有を考慮した各アカウントの請求額 line_item_blended_cost -
請求月 bill_billing_period_start_date invoice.month
利用開始日時 line_item_usage_start_date usage_start_time
プロダクトID line_item_product_code service.id
プロダクト名 product_product_name service.description
アカウント/プロジェクトID line_item_usage_account_id project.id
アカウント/プロジェクト名 - project.name
ロケーション - location.location
リージョン product_region location.region
リソースID line_item_resource_id -
通貨が違う!!
AWSとGCP費用を合算しての可視化は諦めた
GCPの支払い通貨を 日本円 にしていた
AWSも円払いにしているが CURのデータは ドル で出力される
GCP課金データテーブルにある currency_conversion_rate を使うと
ドルにすることもできるが、、、
DataPortalでそれぞれ可視化して満足してしまったので、今回はここまで
複数クラウド費用を合算して利用したいという方は
支払い通貨にはお気をつけください!!
まとめ
1. データを移動させずにそれぞれにアクセスする方法(ReDash)
○ 一番簡単で考えることが少ない
2. ひとつのAWSアカウントにデータを集約させる方法(S3, ReDash)
○ AWSに集約させることで価値が最大化するなら
3. 別のDWHにデータを集約させる方法(BigQuery, DataPortal)
○ 別のDWHにすでにデータがあり一緒に利用したいなら
○ BigQueryなら可視化にDataPortalが使える
おまけ:CURのレポートサイズ比率
1 : 1.6
 1 : 4
 1 : 7 : 30

Parquet:GZIP リソースIDなし:あり 月別:日別:時間別
使っているサービス次第でファイルサイズはかなり変わるため、
この比率はあくまでも参考として見てください。
参考
● AWS コストと使用状況レポート- ユーザーガイド
https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/cur-user-guide.pdf
● Controlling ownership of uploaded objects using S3 Object Ownership - Amazon Simple Storage Service
https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html
● Amazon Athena がクロスアカウントAWS Glue データカタログ向けの組み込みのサポートを追加
https://aws.amazon.com/jp/about-aws/whats-new/2021/05/amazon-athena-adds-built-in-support-for-cross-account-aws-glue-data-catalogs/
● わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
https://www.slideshare.net/TakashiToyosaki1/s3-91645159
● Cloud Storage データのクエリ | BigQuery | Google Cloud
https://cloud.google.com/bigquery/external-data-cloud-storage?hl=ja
● BigQuery の Cloud Billing データテーブルについて | Google Cloud
https://cloud.google.com/billing/docs/how-to/export-data-bigquery-tables
● Google データポータルでの一定期間の利用額情報の可視化| Cloud Billing | Google Cloud
https://cloud.google.com/billing/docs/how-to/visualize-data

AWS CURのデータを安く楽に可視化して共有したい