発端と記事内容
AWSのコストをCost Explorerでチェックしていたら「APN1-DataTransfer-Out-Bytes」が前月と比較して2倍になっていたのですが、どこが食っているのかを調べようとしたら、Cost ExplorerからはELBで食っているところまでしかわからなかったので、もうちょっと頑張って調べた(けど思ったほど詳しくは見れなかった)という話です。
ちなみにCost Explorerでの調べ方
Cost Explorerではフィルターを使って、対象のサービスを見つけることまではできます。
- フィルターは
使用タイプ
>APN1-DataTransfer-Out-Bytes
を選択して、 - グループ化の条件で
サービス
を指定すれば、
以下のように出てきます。
ELBまでわかれば原因のサービスがわかることも多いかもしれませんが、 このシステムでは対象になっているELB配下に、ECSのサービスが結構紐付いているので、ECSサービスまでは知りたいとなったわけです。
「APN1-DataTransfer-Out-Bytes」でネット検索すると、以下のページがおもむろにヒットします。 項目の説明としてはあっていますが、別にS3だけの話ではないので注意が必要です。 AWS の Amazon S3 請求および使用状況レポートを理解する - Amazon Simple Storage Service
Billingを使う
いつもCost Explorerを見ているので忘れがちですが、Billingサービスを直接開くと料金明細が見れるので、そこから追ってみます。
まずは請求書を見てみた
対象月の請求書を見てみると、Data Transferの項目があるので開いてみると、末尾にBandwidthの料金が載っています(画像では金額を消していますが、実際には項目の右側にあります)。
上から2項目は0$だったのですが(当たり前)、下2項目、特に$0.114 per GB - first 10 TB / month data transfer out beyond the global free tier
でガッツリ課金されていました。
とはいえ、これではわかったのは転送量の総量(と金額)くらいなので、別の方法を使います。
正直、AZ間通信分である
$0.01 per GB - regional data transfer - in/out/between EC2 AZs or using elastic IPs or ELB
でも結構な通信量が発生していることには驚きました。 通常のデータ転送費と比べると費用は1/10でも、そこそこな金額にはなっていたので侮りがたい・・・
Cost & Usage ReportsからAWS 使用状況レポートを見る
やや調べていると、サービス別で転送量を見る方法があるようなので、その方法である、AWS 使用状況レポートを使ってみました。
EC2 ELBっていうから・・・
使用状況レポートでは、AWSのサービスをプルダウンから選択して状況をチェックするようになっているので、
Cost Explorerでの結果をもとにAmazon Elastic Compute Cloud
を選択して、使用タイプをDataTransfer-Out-Bytes
にし、レポートをダウンロードして中身を見てみたのですが、
請求書の画面で確認した転送量には全く及ばない程度の量しか利用されていませんでした。
使用タイプのプルダウン項目にないものも結果には出る
じゃあ次に、とすぐECSを選択して出力しようとしたのですが、使用タイプのプルダウンに、EC2の場合とは違って、DataTransfer-Out-Bytes
は表示されません。
なので「これは違うのかー」と別のサービスを調べたりしたのですが、結論としてはECSであっていましたし、中にAPN1-DataTransfer-Out-Bytes
とAPN1-DataTransfer-ELB-Out-Bytes
の結果が含まれていました。
ちなみにUsage Valueの単位はバイトのようです。CSVの各項目の見方については以下のサイトを参照。 Amazon S3 用の AWS 使用状況レポート - Amazon Simple Storage Service
ここからECSで動いているサービスに対するアクセスが原因なのは確定させられましたが、結局どのサービスがどの程度使っているのかはわかりませんでした。
結局CloudWatchを使う
わからなかったとはいえ、ECSであることは判明したので、あとはいつものようにCloudWatchを開き、
Container Insights
> Performance monitoring
から、ECS Servicesで対象のクラスタを選択し、ネットワーク TX/RXをみれば、
どのサービスがどのくらい転送しているかは判明するので、当たりをつけることはできました。
ちなみに、Billingの方は何も設定しなくても利用できますが、Container InsightsはECSクラスタ作成時に設定しないと利用できないので、 ECSでサービス運用する場合は設定をおすすめします。
結論
まとめると、APN1-DataTransfer-Out-Bytesの内訳をチェックするには、それぞれ以下の作業で確認していく必要があります。
# | 作業 | 確認内容 | 今回の場合 |
---|---|---|---|
1 | Cost Explorerで 使用タイプのフィルタ |
対象のAWSサービス | EC2 ELB |
2 | Billingの請求書チェック | Data Transferの内訳 | Bandwidthでの転送量 |
3 | AWS 使用状況レポートで サービス毎の使用タイプチェック |
Usage Valueの合計値 | ECSでの転送量 |
4 | Container Insightsで ネットワーク TX/RXの状況確認 |
転送量の多いサービス | (サービス毎で差があった) |
遠回りしたところもあるようで、結局は全部見ないと確定できなかったというのが難しいところですね。
一度あたりが付けば毎回ここまでは見なくても良さそうですが、たまにはこんなことも必要なのかなっていう感じです!