White Box技術部

WEB開発のあれこれ(と何か)

【AWS】APN1-DataTransfer-Out-Bytesの内訳をチェックする

発端と記事内容

AWSのコストをCost Explorerでチェックしていたら「APN1-DataTransfer-Out-Bytes」が前月と比較して2倍になっていたのですが、どこが食っているのかを調べようとしたら、Cost ExplorerからはELBで食っているところまでしかわからなかったので、もうちょっと頑張って調べた(けど思ったほど詳しくは見れなかった)という話です。

ちなみにCost Explorerでの調べ方

Cost Explorerではフィルターを使って、対象のサービスを見つけることまではできます。

  • フィルターは 使用タイプ > APN1-DataTransfer-Out-Bytes を選択して、
  • グループ化の条件で サービス を指定すれば、

以下のように出てきます。

f:id:seri_wb:20200925083536p:plain

ELBまでわかれば原因のサービスがわかることも多いかもしれませんが、 このシステムでは対象になっているELB配下に、ECSのサービスが結構紐付いているので、ECSサービスまでは知りたいとなったわけです。

「APN1-DataTransfer-Out-Bytes」でネット検索すると、以下のページがおもむろにヒットします。 項目の説明としてはあっていますが、別にS3だけの話ではないので注意が必要です。 AWS の Amazon S3 請求および使用状況レポートを理解する - Amazon Simple Storage Service

 

Billingを使う

いつもCost Explorerを見ているので忘れがちですが、Billingサービスを直接開くと料金明細が見れるので、そこから追ってみます。

まずは請求書を見てみた

対象月の請求書を見てみると、Data Transferの項目があるので開いてみると、末尾にBandwidthの料金が載っています(画像では金額を消していますが、実際には項目の右側にあります)。

f:id:seri_wb:20200925091047p:plain

上から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 使用状況レポートを使ってみました。

f:id:seri_wb:20200925091816p:plain

EC2 ELBっていうから・・・

使用状況レポートでは、AWSのサービスをプルダウンから選択して状況をチェックするようになっているので、 Cost Explorerでの結果をもとにAmazon Elastic Compute Cloudを選択して、使用タイプをDataTransfer-Out-Bytesにし、レポートをダウンロードして中身を見てみたのですが、 請求書の画面で確認した転送量には全く及ばない程度の量しか利用されていませんでした。

使用タイプのプルダウン項目にないものも結果には出る

じゃあ次に、とすぐECSを選択して出力しようとしたのですが、使用タイプのプルダウンに、EC2の場合とは違って、DataTransfer-Out-Bytesは表示されません。

なので「これは違うのかー」と別のサービスを調べたりしたのですが、結論としてはECSであっていましたし、中にAPN1-DataTransfer-Out-BytesAPN1-DataTransfer-ELB-Out-Bytes の結果が含まれていました。

ちなみにUsage Valueの単位はバイトのようです。CSVの各項目の見方については以下のサイトを参照。 Amazon S3 用の AWS 使用状況レポート - Amazon Simple Storage Service

ここからECSで動いているサービスに対するアクセスが原因なのは確定させられましたが、結局どのサービスがどの程度使っているのかはわかりませんでした。

f:id:seri_wb:20200925093855p:plain

結局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の状況確認
転送量の多いサービス (サービス毎で差があった)

遠回りしたところもあるようで、結局は全部見ないと確定できなかったというのが難しいところですね。

一度あたりが付けば毎回ここまでは見なくても良さそうですが、たまにはこんなことも必要なのかなっていう感じです!