👀

AWS CURとQuickSightを使って時間ごとの料金を確認する

に公開

はじめに

こんにちは、DELTAの馬場です!
今回の記事ではQuickShightとCUR(Cost and Usage Report)を組み合わせて
AWSコストを時間単位で確認していく方法を紹介します。

これらの記事を参考にCUR+QuickSightなコストモニタリングツールを作っていきます。
前編:https://aws.amazon.com/jp/blogs/news/amazon-quicksight-using-aws-cur-part1/
後編:https://aws.amazon.com/jp/blogs/news/amazon-quicksight-using-aws-cur-part2/

背景

実はAWSコストを時間単位で調査しようとする場合は有料機能を活用する必要があります。
普段使うCost Explorerであればレポートパラメータの"粒度"を'毎時'に設定しようとすると'有効化'するか?を聞かれるので、ここから設定可能です。

データセットの量が14日になったり、料金が発生するので試したりはしていないのですが用途が充足するのであれば使い慣れたUIで時間単位の料金の調査をすることができるようになるはずです。

一方で1カ月分のデータを見る必要がある場合や、Cost Explorerが使えないケースでは別の方法を考える必要があります。
そんな中でCUR+QuickSightで時間単位のコスト調査をできると分かったのでどのように実現していくかを紹介します。

手順

手順をなぞって検証する場合2日にかけの作業となる可能性があるので注意してください。
CURの設定後、実際にレポートが出てくるまでに最大24時間かかります。
また、CUR作成の作業を "バージニア北部(us-east-1)" で実施する必要があるので注意してください。

最終的には以下が作成されます。

  • CUR
  • S3 Bucket
  • Glue
  • Athena
  • QuickSight

こんなイメージです

前編

以下を参考に進めていきます。
前編:https://aws.amazon.com/jp/blogs/news/amazon-quicksight-using-aws-cur-part1/

Cost and Usage Report の作成

コストと使用状況レポート ページに移動します

Billing and Cost Management > レガシーページ > コストと使用状況レポート

レポートの作成 をクリックして

任意のレポート名を入力し、"リソース ID のインクルード"にチェックを入れます

S3バケットの作成

既にCURの出力先となるS3バケットを別途用意されているなら不要です

  • CURを配置するバケットを作成します
    設定ボタンをクリックします
    S3 バケットの設定 > "設定"ボタン

バケットの作成 を選択、S3バケット名を入力してリージョンは「バージニア北部」にしておきます
※CURがバージニア北部(us-east-1)のみで使える機能なので、無駄なリージョン間データ通信料金を節約する狙いです
「以下のデフォルトポリシーは、バケットに適用されます。」にもチェックを入れて"保存"ボタンをクリックします

レポートの設定

前述で作成したS3バケットのどのフォルダ以下にレポートを配置するかを指定するために
'S3 パスプレフィックス' に任意のフォルダ名を記載します

'レポートデータ時間の詳細度' は'時間別' を選択し
'レポートデータの統合' は 'Amazon Athena' をチェックします
"次へ" をクリックし、内容を確認して"レポートの作成" をクリックします

作成の確認

コストと使用状況レポートのページに戻るとレポート名で指定したレポートが作成されていることが確認できるかと思います。

さらに指定したS3バケットには aws-programmatic-access-test-object というオブジェクトが作成されていることが確認できます。

実際のレポートが作成されるまでしばらく(最大24時間)かかってしまうので、しばらく待ちます。

Glue と Athena の作成

しばらく待つと'S3 パスプレフィックス'で指定した名前のフォルダがCURの出力先のバケットに作成されます。
その中にレポート名のフォルダがあるのでさらに開いていきます。

「crawler-cfn.yml」というファイルがあるのでそれを開きオブジェクトURLをコピーします。

このCloudFormationテンプレートを実行することで、CURが出力されるS3を参照するGlueとAthenaが作成されます。気が利いていたとてもいいですね!

CloudFormation の実行

CloudFormation の画面に移動し、"スタックの作成" をクリックし、"新しいリソースを使用(標準)"を選択します。

デフォルトのままで 'Amazon S3 URL' に先ほどコピーしたS3 URLを貼り付けます。
任意のスタック名をつけて「次へ」をクリック。
"AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。"にチェックを入れて「次へ」をクリック。
最後に「送信」をクリックします。
スタックが作成されるまでしばらく待ちます。

Athenaの動作確認をするなら

スタックの作成が正常に完了したら、CloudFormationのリソースタブにある
"AWS::Glue::Database"の物理IDをメモしておき、Athenaのページに移動して
作成されたGlueをデータベースとすることでクエリをテストできます。
以下を参考にしながら操作してみてください。
https://catalog.workshops.aws/well-architected-cost-optimization/en-US/2-expenditure-and-usage-awareness/70-cost-and-usage-analysis-sql/cur-analysis

後編

ここからは以下を参考に進めていきます
後編:https://aws.amazon.com/jp/blogs/news/amazon-quicksight-using-aws-cur-part2/

QuickSightの作成

QuickSightのページに移動します。
既存のものが無いとこんな感じのページに移動するはずです。
とりあえず「QUICKSIGHT にサインアップ」をクリックします。

'アカウント通知用メールアドレス' と 'QuiclShightアカウント名' にユーザー名を入力します。

Redshift,RDS,IAMは正直不要だと思うのですがいったんそのままで
"S3のS3バケットを選択する"をクリック

'QuickSightアカウントにリンクされているS3バケット' のタブのままCURのレポートを配置しているS3バケットにチェックを入れて「完了」をクリックします。

検証時点では不要なはずなので"ピクセルパーフェクトレポートを追加"のチェックは 必ず 外してください。(お金もったいないので)

最後に「完了」をクリックします。

しばらくするとアカウントが作成されます。

分析を作成

ここからはグラフを作成していきます。
「新しい分析」をクリック。

次の画面に「新しいデータセット」のボタンがあるのでそれをクリック。
Athenaを選択します。

次に "データソース名" に任意の名前を入力して「データソースを作成」をクリック

"データベース: 複数のテーブルを含みます。" で 作成したGlueを選択
"テーブル: 可視化できるデータを含みます。" ではS3 パスプレフィックスで命名したものを選択します。

"データクエリを直接実行"を選択し、「Visualize」をクリックします。

新規シートというダイアログが出てくるので、全部デフォルトのまま「作成」をクリック。

"ビジュアルタイプ"は"垂直積み上げ棒グラフ"を選択します。

今回は時間経過ごとにどのサービスでどれくらいかかっているのか?を見ていこうと思うのでグラフの要素にはそれぞれ以下を設定します。

  • x軸 : line_item_usage_start_date
  • 値 : line_item_unblended_cost
  • グループ/色 : line_item_product_code

デフォルトだと日ごとになるのでx軸の "︙" をクリックして、"集計: "を”時間”にします。

これで時間単位の料金を見ることができます。

最後に

今回の記事ではQuickSightでコスト管理の画面を作成してみる流れをまとめてみました。
例として時間単位のコストの見方を紹介しましたが、それぞれ見たいものはあると思うので以降は自分で遊んでみて最強のモニタリング画面を作成してみてください!

この記事が誰かの助けになれば幸いです!

DELTAテックブログ

Discussion