AWS 利用料金データ取得時のヒント


AWS利用料金

利用料金を取得する際、APIを使って大まかな金額は取得できるようですが、請求ダッシュボードに表示されるアイテム単位での金額を取得しようとした際、APIで取得できる手段がない模様。
その為、請求レポートから出力されるCSVファイルから集計するしかなさそうです。
(もしありましたら教えてください。)

■事前作業

請求ダッシュボードの「レポート」「AWS のコストと使用状況レポート」にてS3に出力するように設定。
【設定例】

頻度:時間別
形式:text/csv
圧縮:GZIP

■作業日

アマゾン側の集計処理が毎月6日頃に終わりますので、7日以降に実施。

1.マニフェストファイル取得

マニフェストファイルを取得し、ファイル内に記載されいてるコストレポートのファイルパスを取得する。

S3://CostReport/20180501-20180601/CostReport-Manifest.json

の様に月毎にマニフェストファイルがS3へ作成される。

上記ファイルを取得する際、日別のフォルダー名「前月01日~当月01日」を指定する。
例)
2017年12月利用分取得時「20171201-20180101」
2018年03月利用分取得時「20180201-20180301」

2.コストレポートファイル取得

マニュフェストから「reportKeys」名をキーに、最新のコストレポートファイル名を取得。

"reportKeys":["/CostReport/20180501-20180601/XXXXXXXX-XXXX-YYYY-ZZZZ-AAAAAAAAAAAA/
CostReport-1.csv.gz"],

上記パスからCostReport-1.csv.gz圧縮ファイルを取得、解凍しCSVファイルCostReport-1.csvを生成。

取得したコストレポートファイルは、AWSサービスの利用内容によりますが、圧縮ファイルサイズが数十メガ 、解凍したCSVファイルが数百メガバイトのファイルになります。
(自分のところはCSVファイルが600 Mbyte以上ありました。)

1行目に項目名(100項目以上)、2行目以降がデータ行として数万行出力されており、テキストエディタやエクセルで開くとフリーズするのであまりお勧めしません。

3.あとはどうにかして集計する

請求書の計算方法は各社で違ってくる為なんともいえないですが、自分のところではコストレポートファイルをDB(SQLServer)に格納し集計、結果をエクセルに出力しています。

項目名が大量にありますが、集計のヒントとなる項目名は以下項目でしょうか。

インボイスID:bill/InvoiceId
アカウントID:bill/PayerAccountId
アイテム名:lineItem/LineItemDescription
使用量:lineItem/UsageAmount
使用量単位:pricing/unit
利用金額:lineItem/UnblendedCost

4.レート金額について

上記コストレポートはドル建てで出力されており、円建てで算出する際のレート金額は、
請求ダッシュボード「要約」「Amazon Web Services, Inc. - Service Charges」以下の
- 請求書 123456789 - AWS サービス: サブスクリプション料金
- 請求書 234567891 - AWS サービス: サブスクリプション料金
でリンクされているPDFファイルに出力されていますが、レート金額はインボイスID毎に変動しており、これもAPIで取得する方法がない。

その為、AWSコンソールにログインした状態で
ttps://console.aws.amazon.com/billing/rest/v1.0/bill?year=yyyy&month=mm

で年月を指定しスクレイピングすることで、jsonデータからレート金額(exchangeRate)が取得できます。
しかし、オフィシャルのページに書かれていませんので(たぶん)、いつまで使えるのか不明です。

※python+SQLServerで上記取り込み処理、エクセル出力処理を自動化したのですが、どこか買ってくれないかなあ。