AWS CURでコストや使用状況を取得してみる

■はじめに

お疲れさまです。

今回は、日々使用しているAWSリソースのコストを分析してみたくなり、
AWS CUR(AWS Cost and Usage Report)というぴったりのものを見つけたので実際にデータを取得して見ていきたいと思います。

 

■AWS CURとは

AWS CURについて

 

その名の通り、AWSのコストと使用状況のデータが含まれたレポートを送信してくれます。

AWS の使用状況を追跡し、アカウントに関連する推定請求額を示します。

 

各レポートには、AWS アカウントで使用する AWS 製品、使用タイプ、オペレーションの固有の組み合わせごとに明細項目が表示されます。

AWS コストと使用状況レポートは、時間単位、日単位、または月単位で情報を集計するようにカスタマイズできます。

 

レポートについて

形式はCSV(カンマ区切り値)形式で、指定のS3バケットに送信されます。
請求が確定するまで少なくとも1日1回更新されます。

 

また結果を以下の指定で分類することもできます。

・時間単位
・日単位
・月単位
・製品または製品リソース別
・またはリソースに定義したタグ別

レポートデータについては、Amazon Athena、Amazon Redshift、または Amazon と統合するように設定可能です。

■コストと使用状況レポートの作成

それではまずレポートの作成方法についてです。

1.請求とコストマネジメントコンソールにサインイン

ますはコンソールから「Billing and Cost Management」へ移動します。

※検索で「Billing」と入れれば候補に出てきます。

「請求とコスト管理」マネジメントコンソールに移動したことが確認できたら、

ナビゲーションペインから「コストと使用状況レポート」を選択します。

 

2.レポートの作成

写真のように移動できたら、「レポートを作成」を選択し、実際に作成していきます。

3.レポート詳細の指定

上の写真のようになったらそれぞれ必要な項目を入れていきます。

 ・[レポート名] に、レポートの名前を入力します。
 
 ・「その他のコンテンツを報告する」では、「リソース ID を含める」を選択して、各リソースの ID をレポートに含めます。
 ※リソース ID を含めると、リソースごとに個別の項目が作成されます。
  使用量によっては、コストレポートと使用状況レポートファイルのサイズが大幅に増加する可能性がありますのでご利用の環境に応じて選択になります。
  
 ・共有リソースの詳細なコストと使用量を含めるには、[コスト配分データを分割] を選択します (Amazon ECS のみ)。
 ※分割コスト配分データを含めると、リソース (つまり ECS タスク) ごとに個別の項目が作成されます。
  使用量によっては、コストレポートと使用状況レポートファイルのサイズが大幅に増加する可能性がありますのでご利用の環境に応じて選択になります。

 ・[Data refresh settings] (データ更新設定) で、請求額の確定後に AWS で返金、クレジット、またはサポート料金をアカウントに適用した場合に AWS コストと使用状況レポートを更新するかどうかを選択します。
  レポートが更新されると、新しいレポートが Amazon S3 にアップロードされます。

  

ここまで来たら、「次へ」を選択し次に進みます。
  

4.配信オプションの指定

上の写真のように画面が切り替わったら以下のように設定を進めていきます。
  
 ・[S3 バケット] で、[設定] を選択します。
  
 ・S3 バケットの設定ダイアログボックスで、次のいずれかを実行します。
   ■既存のバケットを選択します。

   ■[バケットを作成] を選択し、バケット名を入力して、新しいバケットを作成するリージョンを選択します。
    →今回はこちらを選択しました。
    
 ・バケットポリシーを確認し、[次のデフォルトポリシーがバケットに適用されます] を選択し、[保存] を選択します。

 ・[Report path prefix (レポートパスのプレフィックス)] に、レポート名に付加するレポートパスのプレフィックスを入力します。

 ・[Time granularity] で、次のいずれかを選択します。
  ■Hourly: レポートの明細項目を 1 時間ごとに集計する場合に選択します。

  ■Daily: レポートの明細項目を 1 日ごとに集計する場合に選択します。

  ■Monthly レポートの明細項目を 1 か月ごとに集計する場合に選択します。

 ・[Report versioning (レポートバージョニング)] で、レポートの各バージョンでレポートの以前のバージョンを上書きするのか、以前のバージョンに加えて配信するのかを選択します。
 ※レポートを上書きすると、Amazon S3 ストレージコストを節約できます。
  新しいレポートバージョンを配信することで、時間の経過とともに請求データの監査性を向上させることができます。

 ・「レポートデータ統合を有効にする」で、コストと使用状況レポートを Amazon Athena、Amazon Redshift、または Amazon と統合できるようにするかどうかを選択します。QuickSightレポートは、以下の形式で圧縮されています。
  ■Athena: parquet 形式
  
  ■アマゾンレッドシフトまたはアマゾンQuickSight:.gz 圧縮

ここまで設定ができたら「次へ」を選択し、設定を確認して「確認して完了」を選択します。

 

これでレポートの作成が完了しました!

コンソールに戻ると、作成したレポートが反映されているのが確認できました。

作成してから反映されるまでの間は「最終更新データ」の部分が「N/A」の表示になっていますが、更新されるとしっかり以下のように表示されます。

■AthenaでCURレポートに対してクエリ

それではCURで作成したレポートデータをAmazon Athenaを使用して欲しい情報のみ取り出していきたいと思います。

1.ColudFormation設定

CUR作成の際にAthenaと統合する設定にしたので今回はCloudFromationテンプレートを使います。

CUR出力先に設定したS3バケットに「crawler-cfn.yml」というファイルが確認できたら、それをダウンロードします。

次にコンソールでCloudFormationを開いて「スタックの作成」を押下します。

「スタックの作成」画面に飛んだら以下のように設定します。

・テンプレートの準備
 -「既存のテンプレート」を選択
・テンプレートの指定
 -「テンプレートファイルのアップロード」
・テンプレートファイルのアップロード
 -先ほどダウンロードした「crawler-cfn.yml」をアップロード

上記が完了したら、「次へ」を押下します。

「スタックの詳細を指定」画面では「スタック名」に任意のスタック名を入力し、「次へ」で問題ないです。

「スタックオプションの指定」画面は何も入力せずにデフォルト設定で「次へ」を押下します。

最後に「確認して作成」画面では、設定項目を確認し、

「AWS Cloud FormationによってIAMリソースが作成される場合があることを承認します。」にチェックを入れて「送信」を押下します。

CloudFormationからスタック一覧を見ると、作成中の画面になっていることが確認できます。

対象スタックのステータスが、「CREATE_IN_PROGRESS」から「CREATE_COMPLETE」になれば作成完了です。

これで必要なリソースが作成されました。

2.Athenaからクエリ実行

ここからAthenaを使用してクエリをしていきます。

まず、コンソールから「Amazon Athena」を開いて「クエリエディタを起動」を押下します。

クエリエディタを開くと、左のデータ欄に以下のリソースが作成されていることが確認できました。
■データベース
「athenacurcfn_」
■テーブル
「cost_and_usage_data_status」
「指定したテーブル名」

2-1.ステータス確認

まずは、以下のクエリを実行し、テーブルのステータスを確認します。

ここで結果が「READY」になることを確認してください。

※「READY」ではなく「UPDATING」の場合は、「READY」になるまで待ちます。

select status from cost_and_usage_data_status

これ以降はSQL文で条件を指定して、レポートの情報から知りたい情報のみを抜き出して見やすくしてみます。

2-2.指定リージョンのインスタンスごとの稼働時間

ここで表示したい項目は以下の通りです。

・2024年5月
・東京リージョン
・インスタンスごとの稼働時間(降順)
・インスタンスID

SELECT line_item_resource_id, product_instance_type, sum(line_item_usage_amount) as usage_amount
FROM "athenacurcfn_test_ito_cur_0509"."test_ito_cur_0509"
WHERE 
  CAST(bill_billing_period_start_date as varchar) = '2024-05-01 00:00:00.000'
  AND line_item_product_code = 'AmazonEC2'
  AND line_item_usage_type like 'APN1-BoxUsage%'
GROUP by line_item_resource_id, product_instance_type
ORDER BY usage_amount DESC

2-3.指定リージョンのインスタンスごとの利用料金(降順)

ここで表示したい項目は以下の通りです。

・2024年5月
・東京リージョン
・インスタンスごとのEC2オンデマンド利用料(降順)
・インスタンスID

SELECT line_item_resource_id, product_instance_type, sum(line_item_unblended_cost)
FROM "athenacurcfn_test_ito_cur_0509"."test_ito_cur_0509"
WHERE 
  CAST(bill_billing_period_start_date as varchar) = '2024-05-01 00:00:00.000'
  AND line_item_product_code = 'AmazonEC2'
  AND line_item_usage_type like 'APN1-BoxUsage%'
GROUP by line_item_resource_id, product_instance_type
ORDER BY line_item_unblended_cost DESC

2-4.特定のインスタンスの稼働時間、利用料金

ここで表示したい項目は以下の通りです。

・2024年5月
・東京リージョン
・特定のEC2インスタンスのEC2オンデマンド利用料
・特定のEC2インスタンスの稼働時間

SELECT line_item_resource_id, product_instance_type, sum(line_item_unblended_cost), sum(line_item_usage_amount) as usage_amount
FROM "athenacurcfn_test_ito_cur_0509"."test_ito_cur_0509"
WHERE 
  CAST(bill_billing_period_start_date as varchar) = '2024-05-01 00:00:00.000'
  AND line_item_product_code = 'AmazonEC2'
  AND line_item_usage_type like 'APN1-BoxUsage%'
  AND line_item_resource_id = 'i-0db4a26a2052c1a6e'
GROUP by line_item_resource_id, product_instance_type

2-5.VPCのみの利用料金、種類

ここで表示したい項目は以下の通りです。

・2024年5月
・VPCの利用料
・VPCの種類
・リソースID

SELECT line_item_usage_type, line_item_resource_id, sum(line_item_unblended_cost)
FROM "athenacurcfn_test_ito_cur_0509"."test_ito_cur_0509"
WHERE 
  CAST(bill_billing_period_start_date as varchar) = '2024-05-01 00:00:00.000'
  AND line_item_product_code = 'AmazonVPC'
GROUP by line_item_usage_type, line_item_resource_id, line_item_unblended_cost
ORDER BY line_item_unblended_cost DESC

それぞれ条件に合った項目が表示されているのが確認できました。

クエリした後の結果をcsvファイルでほしい場合は、クエリ実行後に「結果をダウンロード」を押下するとcsvファイルとしてダウンロードされます。

※条件設定の際の項目についてはAWSCURでの明細項目をもとに設定しています。

■まとめ

AWSを使用するうえで、リソースがどのくらい使用されていてどのくらいの金額が発生しているのかを把握しておくことは大切です。

今回活用してみたAWSCURやAthenaをうまく活用して、日ごろから作成リソースに対しての情報を集めながら意識して検証や調査を進めていきたいと思います!

 

【参考】
▼AWS コストと使用状況レポートとは
https://docs.aws.amazon.com/ja_jp/cur/latest/userguide/what-is-cur.html
▼インスタンスごとの月間稼働時間を知る方法を教えてください
https://dev.classmethod.jp/articles/instance-usageamount-from-cur/
▼Amazon Athena ユーザーガイド
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/understanding-tables-databases-and-the-data-catalog.html

Last modified: 2024-05-14

Author