RDSのデータ転送料金と時間帯ごとのデータ転送量を正確に把握する

0pt   2018-11-09 02:33
IT技術情報局

概要

以下の調査作業をしたときの控えです。

  • (問題発生)AWS請求を参照したら想定外の data transfer 料金が発生していた
  • (発生源調査)Cost Explorerを参照してどのAWSサービスで発生しているか?を調査したところRDSのデータ転送でした
  • (詳細把握)当該サービスのReportをCSV形式で取得して1時間ごとの転送量を把握しました。
  • (原因調査・対処)詳細データを元に仮説をたて、HTTPサーバのアクセスログ等を調査して原因を特定&対処

データ転送料金の内訳を把握するのはかなり面倒なのでもう少し簡単になるといいですね。。。

問題発生

あるアカウントで想定外の data transfer 料金が発生していました。詳細をみたら data transfer out beyond the global free tier という課金が発生していました。データ量は約1週間で17GB。先月までは1ヶ月で4GBくらいでしたが、そんなに増える心当たりがありません。

68747470733a2f2f692e6779617a6f2e636f6d2f
68747470733a2f2f692e6779617a6f2e636f6d2f

発生源調査

請求を見ただけではどのAWSサービスで発生しているのかがわからないので調査します。(これがドリルダウンで簡単に特定できればいいのですが・・・)
アプローチは様々だと思いますが、Cost Explorerを見てみました。
するとRDS料金が高くなっています。RDSインスタンスはリザーブド(全前払い)で本来は請求されないのでどうやらRDSのデータ転送が膨らんでいるようです。
金額は大したことないのですが気持ちが悪い(例えば乗っ取り被害にあっていたら莫大な請求が発生する可能性)ので緊急調査を行いました。

68747470733a2f2f692e6779617a6f2e636f6d2f

詳細把握

課金対象はRDSのデータ転送と特定できてましたが、このRDSは私の自宅とWebサービスをホスティングしているサーバからしかアクセスできず、さらに主要なアクセス元であるサーバは同一アベイラビリティーゾーン内にあるEC2なので課金されません。何が原因なのかわかりません。。。

料金 – Amazon RDS for MySQL | AWSより抜粋

Amazon RDS と Amazon EC2 のインスタンス間のデータ転送は、同一アベイラビリティーゾーン内であれば無料です。

そこで、「いつ?どれくらい?」を把握するために、Reportを取得しました。

RDSのReport取得

Billing Management ConsoleのメニューからReportを選択してしばらく待ちます。
68747470733a2f2f692e6779617a6f2e636f6d2f

レポーティング対象サービスを選択

68747470733a2f2f692e6779617a6f2e636f6d2f

取得条件を選択

期間は「今回の請求」、レポートの粒度は1時間を選択しました。(他には日と月が選択可能)
取得したい形式(xml or CSV)でダウンロードします。今回はCSVダウンロードしました。
68747470733a2f2f692e6779617a6f2e636f6d2f

Excelに取り込み

CSV形式なのでそのままExcelで開くこともできるのですが、この場合、以下の問題があります。

  • レポートの日付が MM/dd/yy形式なので、Excelが日付を間違えて認識する。
  • 例えば2018年11月9日は、11/09/18となっておりExcelは2011年9月18日と認識してしまう

これを回避するために以下の手順を踏みます。

  • ダウンロードしたファイルの拡張子をtxtに変更
  • Excelで開く
  • 取り込みウィザードの「データ形式」の選択で、日付フィールドを文字列として指定する。

68747470733a2f2f692e6779617a6f2e636f6d2f
68747470733a2f2f692e6779617a6f2e636f6d2f

日時フィールドを文字列として指定

これで完了です。
68747470733a2f2f692e6779617a6f2e636f6d2f

課金対象のデータ転送データのみ参照する

今回、問題になっているdata transfer out beyond the global free tierは、UsageType列で以下の名称として記載されているので、Excelのフィルターで絞り込みます。これで問題のデータ転送が「いつ?どれくらい?」発生したのか把握できます。

<リージョン略称>-DataTransfer-Out-Bytes

例)APN1-DataTransfer-Out-Bytes

68747470733a2f2f692e6779617a6f2e636f6d2f
68747470733a2f2f692e6779617a6f2e636f6d2f

なお、このデータをグラフ化したものと同じ形のものは、RDSインスタンスのコンソールで確認できます。(コンソールでは、いつ?はわかりますが、どれくらいの転送量であるかを把握できません)

68747470733a2f2f692e6779617a6f2e636f6d2f

Excelでグラフ化したものと同じ形になっているのがわかります。
68747470733a2f2f692e6779617a6f2e636f6d2f

原因調査・対処

いつ、どのくらい?はレポートでわかるのですが、どこからのリクエストで?というのはわからないので、ここからは仮説をたててWebサーバのアクセスログなどで調査しました。

結局、今回は、AWSでないサーバでホスティングしているWebサイトのデータベースを深く考えずにRDSに配置したのが原因でした。
そのWebサイトにBotが大量アクセスしてきて転送量が膨らんでいました。(データベースをローカルに構築して対処)

RDSを使うWebサービス・サイトをAWS以外のサーバでホスティングするときは慎重に・・・。汗

ご参考になれば幸いです。

Source: AWSタグが付けられた新着投稿 Edit | Delete | Pause

   ITアンテナトップページへ
情報処理/ITの話題が沢山。