6
3

CloudFrontでコストを30%以上削減するために、やるべきこと ~100本ノックしてみたい中堅エンジニア 【AWS】~ 9/100

Posted at

はじめに

Webアプリケーションなどのフロントエンドでよく使われるCloudFrontですが、コスト削減を見込める方法を調べたのでこの記事で紹介します。

そもそも、なぜこの記事を書こうと思ったかですが、AWSのコスト削減の仕事を振られたのがきっかけです。
対象のAWSアカウントでは他にはECSやRDSを利用しているので、おそらくこれらが一番お金かかっているだろうなーと思い、Billing and Cost Managementで請求額を試しに見てみました。

すると、CloudFrontに471$と一番お金がかかっていることがわかりました。

1.png

CloudFrontって何にお金がかかるのか

そもそもCloudFrontって、何に課金されるのかってことなんですが主に以下になります。

  • インターネットへのリージョンレベルのデータ転送(OUT) ←今回ほとんどこれにお金がかかっていました
  • オリジン(S3など)へのリージョンレベルのデータ転送(OUT)
  • HTTP/HTTPSのリクエスト数
  • その他(CloudFront関数の呼び出し回数、Lambda@Edgeの呼び出し回数など)

なお、他のAWSサービスと同様CloudFrontにも無料枠があります。
CloudFrontでは2024/10現在で以下が常時無料枠になります。
小規模のWebアプリケーションなら無料利用枠で賄えるかもしれません :thinking:

  • 1か月あたり、1TBのインターネットへのデータ転送
  • 1か月あたり、1000万件のHTTP/HTTPSリクエスト
  • 1か月あたり、200万件のCloudFront関数呼び出し
  • 1か月あたり、200万回のCloudFront KeyValueStoreの読み取り
  • 無料のSSL証明書

キャッシュ設定を確認してみた

CloudFrontを使うことによってデータをキャッシュし、オリジンへのリクエストを減らせるわけですが、データ転送量が多いことからキャッシュ設定周りが怪しいのかなーと思いました。
なので、キャッシュ統計を確認してみました。

するとミスが94%ヒットが0%とまったくキャッシュを使えてないことがわかりました :cry:

4.png

実際の設定を確認すると、TTL設定が全て0秒(=キャッシュしない)になっていたため、都度オリジンにデータを取りにいっていたようです。
さらに、圧縮も無効になっていたため、その分データ転送量が多くなってしまっていたようです。

2.png

個人的に全く知らなかったBrotliですがGoogleが開発した圧縮アルゴリズムで、gzipより20%くらい圧縮率が良いらしいです :smile:

キャッシュ設定を修正してみた

ということで、TTL設定圧縮サポートを以下のように修正しました。

5.png

これでデフォルトでは1日はキャッシュし、また圧縮したファイルを配信できるようになりました :smile:
TTLの挙動については公式サイトに記載がありますが、こちらの記事にフロー形式でまとめてくれています。
オリジンからのレスポンスにCache-ControlExpiresヘッダーがあるかによってTTLの挙動は変わるようです。

さらに、圧縮を設定したことによってサイズが1,000~10,000,000バイトのオブジェクトを圧縮してくれます。
どの圧縮形式にするかは、ビューワー(ブラウザなど)のリクエストヘッダーのAccept-Encodingに依存しますが、Chromeなどの代表的なブラウザであればどちらもサポートしていますので、どちらも有効にしておけば良さそうです。

自前でキャッシュポリシーを作成することもできますが、ユースケースに応じたマネージドキャッシュポリシーをAWSが用意してくれているのでまずはこれを利用するのでも良さそうです。
※キャッシュ最適化であれば、CachingOptimizedという名前で用意されています

GzipとBrotliどちらも設定する場合の挙動

GzipとBrotliとちらも有効にしていて、ビューワー(ブラウザなど)がどちらもサポートしている場合は公式に記載がある通りCloudFrontはBrotliを優先します。
brがBrotliです

6.png

キャッシュヒットするか確認

TTL設定後のキャッシュ統計を見ると、ヒットが86%になっていてちゃんとキャッシュが出来ていることが確認出来ました。

7.png

CloudFront Security Savings Bundle

EC2などと同様にCloudFrontにもリザーブドプランのようなものがあります(最近知った)
1年間、月間の使用料金をコミットメントすることによって最大30%請求額を節約することが出来ます。

購入してみる

左メニューの購入をクリックすることで、過去の請求額から自動的に推定してくれた推奨コミットメントが表示されます。
毎月330$のコミットメントをすることで、471$分利用することが出来ます。
※見てわかる通り、AWS WAFの料金もカバーされるようです
8.png

この画面で、購入コミットメントを入力します。
毎月の料金が一定であれば毎月のコミットメント支払いは前の画面で表示された金額を入力すればいいと思います。
また、1年以上使うのであれば、自動更新を有効にしておけば、毎年購入作業を行う必要はなくなります。
9.png

最後に確認画面が出るので、購入をクリックし、完了です!
10.png

月毎のコミットメントになるため、利用量が少ない場合にはコミットメントは繰り越されませんので、注意が必要です。
なので、利用量が予想できる、かつ、本番環境以外では購入は見送るべきかもしれません

おわりに

今回はCloudFrontのコスト削減方法について説明しました。
思いがけず、CloudFrontの料金が高くなってしまった人、高くならないようにしたい人の参考になれば幸いです:bow:

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3