動機
Hubotに過去のAWS料金なんかの問い合わせが出来るようにしたい。
そのためにはなにが必要なのか?
事前情報
CloudWatchから取得するかCSVから取得するという手段があるようだ。
SDKから直接この情報は取り扱えないらしい(?)
CloudWatchの情報は見たところ知りたい情報が揃ってなかったので、CSVとしてS3に吐出される情報をソースにしたい。
Lambdaは使えないのか?
S3にそのファイルがアップされたらRDSに保存するっていうのも考えたのだが、請求詳細を解凍してみたら100MB超えてたので(うちはいっぱいAWS使っている)60秒でちゃんと入れ終わるかは微妙すぎた。
請求詳細ファイルについて
AWS Detailed Billing Reports で時間単位の利用量をチェック!
クラウドパックさんの記事でかなり分かりやすく説明されている。
この記事でも触れられているが
謎カラム一覧 |
---|
RateId |
SubscriptionId |
PricingPlanId |
この3つが謎だ。
PricingPlanIdについてはちょっと気になったのでCSVをDBに流し込んで調べてみた。
PricingPlanId | プロダクト名 | 内容 |
---|---|---|
376398 | Amazon Elastic Compute Cloud | t1.micro リザーブドインスタンス(ap-northeast-1a) |
376404 | Amazon Elastic Compute Cloud | m1.medium リザーブドインスタンス(ap-northeast-1a) |
376413 | Amazon Elastic Compute Cloud | m1.small リザーブドインスタンス(ap-northeast-1a) |
447227 | Amazon Elastic Compute Cloud | m1.medium リザーブドインスタンス(ap-northeast-1c) |
454149 | Amazon RDS Service | リザーブドインスタンス |
482457 | Amazon Route 53 | |
495777 | Amazon Simple Queue Service | |
495869 | Amazon Simple Notification Service | |
495936 | Amazon Simple Storage Service | |
495948 | Amazon RDS Service | |
497930 | AWS Lambda | |
504635 | Amazon CloudFront | |
505699 | (なし) | 全体的な通信に関わってる部分? |
506835 | AWS Key Management Service | |
511298 | Amazon CloudWatch | |
519022 | Amazon Virtual Private Cloud | |
520642 | Amazon ElastiCache | |
524619 | Amazon Glacier | |
524834 | Amazon Elastic Compute Cloud | EC2に係る従量分? |
一部の請求から抜粋しただけでもこれだけのコードが確認出来た。
Hubotで問い合わせは期間とサービス名に絞ろうと思うのでこのコードが分かると素敵かもしれない
CSVファイルの形式だが、1行目はラベル、実際のデータはRecordTypeに"LineItem"となっているもの、あと"Rounding"にコンソリデーションに伴って出た誤差の料金が出ているようなので計算にはこれも含める必要がある
いろいろ費用が見えて感じたこと
自分が試験環境で使っているAWSの料金が出てくると止め忘れてたものとか放置でも課金が続いているものなども分かってきて結構ドキドキする。
経理担当の人はこれに為替問題が絡んだり、いろいろして大変なのだろうな。感謝してます。