##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で上記取り込み処理、エクセル出力処理を自動化したのですが、どこか買ってくれないかなあ。