はじめに
株式会社AppBrewの@anoworlです。コスパの良い費用削減が趣味です。これは「💰 AWSの費用削減 💸 Advent Calendar 2020」1日目の記事です。
AWSの費用削減と聞いて最初に思い浮かぶのは何でしょうか? EC2?S3?はたまたRDS?
でもここで最初に取り挙げたいのはCloudFrontです1。 なぜなら大規模サービスであればあるほど、コスパ良く削減しやすいから。 理由は2つあります。
- サービスの規模に比例して費用が上がる
- 係数が少ない
ではCloudFrontを概観したあと、3つの係数を見ていきましょう。
費用を要素分解してみよう
CloudFrontはCDNであり、CloudFrontを通した通信の流れは以下のようになります。
ユーザ(ブラウザやアプリ) ←①→ CloudFront ←②→ AWS内のサービス(ALBやS3など)
この①と②にお金がかかります。ただし「オリジンからエッジロケーションへのデータ転送 (Amazon CloudFront の "オリジンフェッチ") は無料2」なため、この記事では①、つまりユーザとCloudFront間の通信に注目しましょう。
では、①の料金をざっくり式にすると以下のようになります。
転送量 x 単価 + リクエスト数 x 単価 = 料金
これらの係数を減らしていくのが今回のミッションです。
単価を減らす
技術の工数がかからないここにまずは着目してみましょう。 そもそも単価が安くなれば、料金は安くなる(それはそう)。
AWSには「予約して節約する」と「使うほどにお安く」という仕組み3があり、これはCloudFrontにも存在します。 その恩恵を受ける方法としては大きく二つあります。
- AWSと直接契約でリザーブドキャパシティの割引4を受ける
- AWSの請求代行サービスを使い割引を受ける
1は各ユーザさんがそれぞれAWSとNDAを結びやりとりしていると思うので、ここでは外から見て分かりやすい2について言及します。
例えばAWS記事でお世話になっているクラスメソッドさんではCloudFrontのアウトバウンド通信費が最大約55%割引5に、Amazon CloudFront GETリクエストは100%割引(つまり無料)になるようです。先程の式に出てきた転送量とリクエスト数の単価、どちらも単価が安くなりました。
技術的な改善施策でも半分になることは少ないので、これは大きいですね。 おなじみデータホテルさんなど色々な事業者さんがやっているので、調べてみると面白いです。
ただ2を選択するとAWSと直接取引では無くなる、よって直接サポートにチケットを切ることが出来なくなったりなどいくつか変化があるので6、メリット・デメリットを考えて選択しましょう。
転送量を減らす
大きく方法は2つあります。
- そもそも通信させない
- 通信時の転送量を極力減らす
1はクライアントキャッシュをヘッダなどでいい感じにしたり、不要なアセットを遅延ロードなりなんなりで読み込まないやつですね。
2は画像や動画であれば顕著ですが、圧縮やリサイズがそれにあたります。拙著「AWSで動画の自動圧縮 & 配信を行う方法」でも記しましたが、一部10分の1以下になったこともありました。
リクエスト数を減らす
リクエスト数課金は契約形態によっては余り気を遣わなくて良いと思います。 ただ単純にクライアントとの通信がめっちゃ多いのはUXを毀損することもあるので、ログはまとめて送るなどにすると双方改善されることもあります。
小咄: POSTリクエストに気をつけろ!
先程のクラスメソッドさんの料金体系でもありましたが、GETリクエストは100%割引とありますが「ではPOSTリクエストは…?」と思った方もいらっしゃると思います。
以前私は、CloudFrontの割引を極力有効活用するために全部の通信をCloudFront経由にした所、なぜか費用が上がったことがあり悩んだことがありました。
原因はPOSTリクエスト数に応じた課金で、そのリクエストを生み出していたのは弊社のログAPIへのPOSTリクエストでした。原因を知った時はアハ体験を得られて嬉しかったですね。
おわりに
大規模サービスで手を付けていないと、一番コスパ良く改善効くのがここかなと個人的には思います。 自分のコスト削減施策が月々の数字に響くのを実感しつつ、弾みを付けて他のサービスも改善していきましょう!
We are hiring!
インフラの費用削減に一家言ある方、お話しましょう!
-
なおCloudFrontではなく別のCDNを使っている方は、この記事は飛ばしてください…↩
-
AWS Black Belt Online Seminar AWSのコスト削減オプション古い資料なので新しい資料あったら知りたい…↩
-
AWSサポートへのエスカレーションをしてくれる所もある↩