mattintosh note

どこかのエンジニアモドキの備忘録

CloudFrontのGeo Restrictionで削減出来そうなコストを計算してみる

依頼で色々なプロジェクトの AWS 環境を見ているんですが、よく言われるのが「データ転送料金が高い」です。

EC サイトの場合、この原因の多くはクライアントがアップロードしている商品画像のサイズが大きかったり枚数が多かったりと、アクセス数が増えれば増えるほど自分たちで首を絞めている状態になっているものが多いです。JPEG の圧縮率についても理解しているクライアントは少なく、更にそれを CloudFront のデータ転送量と照らし合わせてコストの計算が出来る人も居ないため毎月何もせず(出来ず)に「料金が高い」と言っているだけだったり。社内エンジニアがきちんと画像の調整していればそのようなことにはならないと思いますが、そういう人が常駐していることは少ないです。また、最近はスマホから写真を直接アップロードしてそのまま使っているということも多く、データ転送量だけで月額数十万というプロジェクトも目にします。

データ転送料金が発生するリソースは CloudFront や ELB などですが、今回は CloudFront の話。

CloudFront も単に設置しただけということが多く、キャッシュやセキュリティ周りの設定があまりされていないことが多いです。(インターフェースが英語なので苦手な人が多そう)

下記のデータはとある CloudFront のデータです。CloudFront は何も設定していないと当然のことながら世界中からアクセス出来るようになっているため日本以外からのアクセスでもデータ転送料金やリクエスト料金が発生します。今回の例のサイトでは US 向けコンテンツの配信は行っていません(googlebot や bingbot からのアクセスがあるため US は転送量が少し多めになっていると思われる)。

AWS CloudFront - Viewers
AWS CloudFront - Viewers

JP と US 以外の転送量を合計してみると約 39 GB でした。

CloudFront 転送量
CloudFront 転送量

CloudFront のデータ転送料金はプライスクラスや地域、転送量による割引もあるのでざっくりですが下記の式で計算します。(料金は東京リージョンの 0.114 USD / GB を使用)

42260583085 bytes * (2 ** 30) bytes / 0.114 USD * 106 JPY = 471.27599999999995 JPY

計算してみるとこのサイトでは月々約 472 円を海外からのアクセスに使用しています。これは微々たるものかもしれませんが CloudFront を無料枠で利用したいと思っている場合は無料枠である 50 GB の半分以上を消費してしまうことになります(リクエスト数も消費します)。

海外向けのコンテンツを配信していないのに海外からのアクセスがそれなりにある場合は URL 総当りによる不正なアクセスを受けていることがあります。もちろん、海外に住んでいる人が普通に調べごとをしているだけという可能性もあります。このあたりのことは上記の CloudFront のデータではわからないのでアクセスログで確認する必要があるでしょう。

(ボットにどの程度影響を与えるかは不明ですが)特に検索エンジンの順位には興味ないし、不正なアクセスもなるべく少ないほうがいいという場合は Geo Restriction を JP のみに限定した方が多少なりともメリットはありそうです。