CUR2.0設定時にクエリを利用する方法について

記事タイトルとURLをコピーする

こんにちは!寒暖差で体調を崩してしまった荒井です。

今回は新しいコストレポートである、 使用状況レポート 2.0 (CUR 2.0)の機能について調査してきました。

結論

CUR2.0 設定には SQL クエリを利用することが可能です。

背景

サーバーワークスでは社員に対し検証用のAWSアカウントが発行されており、月2万円を目安に自由に利用が可能です。 どのリソースがどれくらいの料金が掛かっているか確かめるため、詳細なコストレポートを出力し確認しようと思いました。

その際に CUR2.0 がリリースされたと知ったので実際に触ってみることにしました。

リリースノートはこちら aws.amazon.com

リリースノートで気になった点

上記のリリースノートで気になった点は以下の文章です!

An example of the column selector on the Data Exports console pageAfter selecting your columns, the console will generate the SQL statement and table configuration JSON statement that selects the columns and data you specified. You can view this code with the “Preview your query” button to share with your colleagues for reference or to use in the APIs.

CUR2.0 の機能で出力できる列を選択できるようになったみたいですが、そのフィルタ状況の SQL 文と JSON で表示できるようになり、かつ API で利用できたりするようです。 ここの部分がどのようにやるのかが気になったので、試してみます。

SQLのプレビューまで

まず、Billing and Cost Management を検索し左メニューからデータエクスポートをクリックします。 エクスポートとダッシュボードが表示されるので、[作成] をクリックします。

3つ選択できますが、今回は一番左の[標準データエクスポート]を選択します。 データテーブルコンテンツ設定では、リソースIDを含めるにチェックを入れます。

お待ちかねの列の選択画面です。確かに出力できる列を選択できることが分かります!

今回は最低限の情報だけ拾いたいので、以下の4つだけを有効にしました。

column 説明
line_item_blended_cost The BlendedRate multiplied by the UsageAmount.
line_item_resource_id If you chose to include individual resource IDs in your report, this column contains the ID of the resource that you provisioned.
line_item_usage_start_date The end date and time for the line item in UTC, exclusive. The format is YYYY-MM-DDTHH:mm:ssZ.
line_item_usage_end_date The start date and time for the line item in UTC, inclusive. The format is YYYY-MM-DDTHH:mm:ssZ.

この状態で[SQLクエリとテーブル設定をプレビュー]をクリックすると、SQLとテーブル設定が自動で生成されました!

{"QueryStatement":"SELECT line_item_blended_cost, line_item_resource_id, line_item_usage_end_date, line_item_usage_start_date FROM COST_AND_USAGE_REPORT"}

{"TableConfigurations":{"COST_AND_USAGE_REPORT":{"INCLUDE_RESOURCES":"TRUE","INCLUDE_SPLIT_COST_ALLOCATION_DATA":"FALSE","TIME_GRANULARITY":"HOURLY"}}}

このままGUIで操作を完結させても良いのですが、今回はこの情報を利用して API 経由で設定してみようと思います。

AWSCLI から CUR2.0 出力設定

AWSCLI から CUR2.0 の出力設定を行うためには、bcm-data-exports の create-export を利用します。

create-export — AWS CLI 2.15.23 Command Reference

引数を見ていくと、--export で渡す値の中に QueryStatement と TableConfigurations というものがあります。 どうやらここに先程の値を入れてあげれば上手くいきそうですので、必要な要素を埋めて実行してみます。

--export に渡したファイルの中身

{
  "DataQuery": {
    "QueryStatement":"SELECT line_item_blended_cost, line_item_resource_id, line_item_usage_end_date, line_item_usage_start_date FROM COST_AND_USAGE_REPORT",  
    "TableConfigurations":{"COST_AND_USAGE_REPORT":{"INCLUDE_MANUAL_DISCOUNT_COMPATIBILITY":"FALSE","INCLUDE_RESOURCES":"TRUE","INCLUDE_SPLIT_COST_ALLOCATION_DATA":"FALSE","TIME_GRANULARITY":"HOURLY"}}
  },
  "Description": "test",
  "DestinationConfigurations": {
    "S3Destination": {
      "S3Bucket": "<バケット名>",
      "S3OutputConfigurations": {
        "Compression": "PARQUET",
        "Format": "PARQUET",
        "OutputType": "CUSTOM",
        "Overwrite": "CREATE_NEW_REPORT"
      },
      "S3Prefix": "CUR2-with-CLI",
      "S3Region": "ap-northeast-1"
    }
  },
  "Name": "CUR2-with-CLI",
  "RefreshCadence": {
    "Frequency": "SYNCHRONOUS"
  }
}

実行結果

$ aws bcm-data-exports create-export --export=file:///home/arai/mkexport.json
{
    "ExportArn": "arn:aws:bcm-data-exports:us-east-1:<account_id>:export/CUR-with-CLI-fe5aa6e9-9dc9-4f48-a7bd-xxxxxxxxxxxx"
}

コンソール上から確認

データエクスポートのトップページに戻ると、先程指定した名前でエクスポートが作成されています。

中身を表示してみると、見事SQLクエリで指定した列4つのみが出力されている設定となっていました!

今回は parquet 形式で出力したため Glue + Athena で中身を確認となりますが、csv 形式で出力すると excel 等で気軽に見ることができます。

まとめ

実際に SQL クエリを利用して、CUR2.0 の設定をすることができました。

手作業で列選択し出力設定を行うとミスが発生することもあると思うので、SQL クエリを使用することにより楽に・正確に・素早く設定できると思います。

この記事がどなたかの一助となれば幸いです。

荒井 泰二郎 (記事一覧)

2023年8月入社 IE課にて研修中