QuickSight on S3 でCURを可視化

# QuickSightでCURを可視化する

CURは、Cost & Usage Reportsの略で、AWSのコストと使用状況レポートを表します
今回は、AWSのBIサービスQuickSightを使って、CURを可視化します。

## 事前準備

### S3バケット作成

CURのデータを入れるS３バケットを作成します
バケット名：demo-report-ue

## CURの設定

CURのデータをS3に出力するレポート作成を行います。
AWSの管理画面の画面右上のユーザー名をクリックし、"マイ請求書ダッシュボード"をクリックし、左側メニューの"Cost & Usage Reports"をクリックします。
その後、真ん中上部の[レポート作成]をクリックします。
※この画面ではテスト実行後に画面キャプチャ取得したため、レポートが作成された状態になっていますがご了承ください

![スクリーンショット 0003-07-28 11.45.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/1682633e-ab23-a16e-3fa1-842a79fe3219.png)

１つ目の画面でレポート名に任意の名前を入れ[次へ]をクリックします。
２つ目の画面で、S3バケットを設定します。[設定]をクリックします。

![スクリーンショット 0003-07-28 12.09.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/281719c5-e37a-998e-95ed-8ad1923a46b4.png)

作成したバケット(demo-report-ue)を選択し、[次へ]をクリックします

![スクリーンショット 0003-07-27 16.56.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/acc07dad-c0e5-c433-4147-6343ab703103.png)

適用されるバケットポリシーが出力されます。問題なければ"このポリシーが正しいことを確認しました"にチェックを入れ、[保存]をクリックします

![スクリーンショット 0003-07-27 16.56.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/0f52eb17-a0d3-cc5f-da65-245c89d4429e.png)

その他は以下の設定を入れ、[次へ]をクリックします。
ポイントとしては"レポート統合の有効化"でQuickSightを選んでいます。これによって後述するQuickSightのマニフェストファイルが自動作成されます。

* レポートパスのプレフィックス：demo
* 使用量の時間詳細度：時間別
* レポートバージョニング：既存レポートを上書き
* レポートデータ統合の有効化：Amazon QuickSight

![スクリーンショット 0003-07-29 11.21.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/867f2222-3892-d278-7199-1b57d6342a2e.png)


次の画面はサマリが出ますので[確認して完了]をクリックします。

![スクリーンショット 0003-07-29 11.22.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/2a3a1a3f-1b8c-b853-6ea5-a2e4060729e7.png)


### S3の操作

作成したバケットに、レポート配信確認用オブジェクト"aws-programmatic-access-test-object"ができてることを確認します。
また、プレフィックスで設定した"demo"のディレクトリが出来ていることを確認します。このdemoのディレクトリはレポートデータが出力されるため、データが出力されるまで作成されません。数時間か一日くらい時間がかかります。

![スクリーンショット 0003-07-28 12.12.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/c8ba9c1d-c8fc-2e40-489b-d6b614face8f.png)

CURが出力されると"demo"ディレクトリが作成され、demo-reportの下にCURデータが入るフォルダと、"QuickSight"という名前のフォルダが出来ます。

![スクリーンショット 0003-07-28 14.29.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/b16766e6-0e3a-bd52-e14a-13ed07590b27.png)


"QuickSight"ディレクトリをクリックすると、json形式のマニフェストファイルがあります。これはQuickSightでS3のデータを可視化する際に使うファイルで、可視化するS3上のファイルの位置や形式を記述しています。
このマニフェストファイルの"オブジェクトURLを"コピーしておきます。

![スクリーンショット 0003-07-28 10.59.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/83f4a27c-4aa4-4060-2286-35736a718d0b.png)

## QuickSightの操作

QuickSightの初期設定は割愛します。必要なら別途公式ドキュメントを確認ください。

QuickSightが使える状態になったら、データセットを作成します。画面右側メニューの"データセット"をクリックし、画面右上の[新しいデータセット]をクリックします。

![スクリーンショット 0003-07-28 11.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f40ed991-95af-c31d-d719-b7f89e3cd501.png)

"S3"をクリックします。

![スクリーンショット 0003-07-28 11.04.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/5662be2e-91ae-9aaf-73f9-fa03c9ca34a7.png)

以下を入力し[接続]をクリックします。

* データソース名：Demo-CUR
* マニフェストファイルのアップロード：先程コピーしたURL

![スクリーンショット 0003-07-28 11.05.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/ea06130c-9b63-5385-302b-3163c1451fa7.png)

次の画面で[視覚化する]をクリックします。

![スクリーンショット 0003-07-28 11.11.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/6e11f53e-4635-1752-a4f1-4afe188c8613.png)

画面操作でダッシュボードを作っていきます。

![スクリーンショット 0003-07-28 11.11.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/4f580844-de7e-e72a-ed6c-9775187273c2.png)

### QuickSightでダッシュボード作成

[このハンズオン資料](https://www.wellarchitectedlabs.com/cost/200_labs/200_5_cost_visualization/2_create_visualizations/)を参考にダッシュボードを作ります。若干カラム名が違いますが分かると思います。ハンズオン資料はQuickSight+Athenaの想定ですが、今回のQuickSight+S3でもQuickSight上のダッシュボード作成にはさほど違いはありません。

カラム名は以下のように違いがあります
line_item_unblendedcost => lineitem/unblendedcost のような"/"を使った形になってる

ハンズオンで出てくる計算フィールドはこんな感じ↓

```
ifelse(split({lineItem/UsageType},':',1) = 'SpotUsage','Spot',ifelse(right(split({product/usagetype},':',1), 8) = 'BoxUsage',{pricing/term},'other'))
```

このようなダッシュボードが出来ます

![スクリーンショット 0003-07-28 14.18.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/1258a06f-462c-a160-944b-f43223e6c1de.png)


## 運用

QSでS３データを可視化した場合、S3のデータのパスを表すマニフェストファイルは、日時なりCURの更新タイミングで更新されます。そのため、QuickSight側もSPICEを定期的に更新する設定をすることで、更新されたマニフェストファイルやデータを取り込み、最新のCURデータの反映が行われます。
CURの配信オプションの"レポートバージョニング"を"既存レポートを上書き"にした場合は、上書きされていく１つのファイルのパスが書き込まれます。"新しいレポートバージョンを作成"にした場合は、新しく作成されたファイルのパスがファイル作成時に書き込まれます。この"新しいレポートバージョンを作成"オプションの場合は指定頻度でファイルが増えていくためデータ容量を食いますが、過去のカラム情報ものこせるので過去のデータを正確に追えることがメリットだと思います。

## 参照リンク

こちらが公式のナレッジです。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/quicksight-cost-usage-report/

公式ハンズオン
https://www.wellarchitectedlabs.com/cost/200_labs/200_5_cost_visualization/2_create_visualizations/

CTCの方のJAWSの資料「Cost Exploreでは満足できない！」
https://jawsdays2020.jaws-ug.jp/wp-content/uploads/2020/03/CostExplorer%E3%81%A7%E3%81%AF%E6%BA%80%E8%B6%B3%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84.pdf

Amazon S3 でのコストおよび使用状況レポートへのアクセス
https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/access-cur-s3.html#manifest-cur-files