Cloudflare導入でCloudFront転送料金を9割カットした話

2024/08/16に公開

はじめに

こんにちは。株式会社ventusでエンジニアインターンをしているtaro137です。弊社では電子トレカサービスを開発しており、画像配信にS3+CloudFrontを使用しているのですが、このたびCloudflareを導入しました。本記事では移行の背景や効果について紹介します!

TL;DR

  • CloudFrontの料金が高い!
  • Cloudflare導入で転送料金93.5%カットできた
  • R2移行もやっていく

背景

電子トレカはかっこいい・かわいいカードを集めて楽しむサービスであるため、画像や動画が価値に直結します。さらにカード自体だけでなくガチャ演出などでも画像や動画による演出があり、それらの転送量が非常に大きくなるサービスとなっています。弊社ではこれまで配信される画像・動画をS3に置き、CloudFrontで配信していました。ユーザー数増加に伴いCloudFrontのデータ転送量が次第に増加し、2023年は最も多かった8月で150TBを超えました。この値を料金シミュレータに代入すると月200万円程度になることがわかります。
新規の電子トレカサービスも次々リリースされています。最近ではカープトレカやHello! Projectデジタルコレクションなどがリリースされました。今後事業を拡大しさらにトラフィックが増加してもAWSの料金を抑えられるような対策が必要でした。

https://carp.orical.jp/
https://helloproject.orical.jp/

そこで今回導入したのがCloudflareです。CloudflareではCDNなどさまざまな機能が提供されており、そしてなんといってもこれらが従量課金ではなく定額で使えるという素晴らしさがあります。ユーザーからのリクエストを一旦Cloudflareに飛ばし、ここでキャッシュミスした場合のみオリジンであるCloudFrontにリクエストが飛ばされるようにすることでCloudFrontのデータ転送量の削減を試みることになりました。

やったこと

似たような構成をやっていた方がいたので紹介しておきます。今回私たちが行ったのは既にCloudFrontで配信を行なっているサービスをなるべく短いダウンタイムでCloudflare経由に切り替えるということであり、今後皆さんがCloudflareを導入する際の参考になればと思います。
https://zenn.dev/shogo_b/articles/49318fa6a5a410

移行手順を簡潔に表すと次の画像のようになります(ドメイン名は適宜読み替えてください)。

以下では手順3〜4の具体的な方法を説明します。

CloudflareでDNSレコードを作成する

CloudflareでCNAMEレコードを作成し、これをCloudFrontに向けておきます。

レコード名 タイプ
example CNAME example.cloudfront.net

レコードを作ってからエッジ証明書がアクティブになるまで20分程度かかることがあるので、時間に余裕をもって作業する必要があります。

Route 53のDNSレコードをCloudflareに向ける

現在のRoute 53の状態を模式的に表すと以下のようになっています。

レコード名 タイプ
example.jp A example.cloudfront.net
example.jp AAAA example.cloudfront.net

これを以下のように変更します。

レコード名 タイプ 備考
example.jp CNAME example.cdn.cloudflare.net フェイルオーバー(プライマリ)

この変更の際に最大数分程度のダウンタイムが発生します。今回の移行は毎週行われるサービスのメンテナンスと同時に実施したためユーザーへの影響はありませんでした。

これで、example.jpがCloudFrontに繋がる前にCloudflareを経由するようになりました。次にCloudflare障害時に備えてフェイルオーバーを設定していきます。

Route 53でフェイルオーバーを設定する

Route 53でフェイルオーバー(セカンダリ)のレコードを作成します。

レコード名 タイプ 備考
example.jp CNAME example.cdn.cloudflare.net フェイルオーバー(プライマリ)
example.jp CNAME example.cloudfront.net フェイルオーバー(セカンダリ)←New!

これで移行完了となります。

効果

上記の移行により、CloudFrontのデータ転送量は大幅に削減されました。
2024年6月の転送量は約8.6TBと、前年同期(131.3TB)の約6.5%に抑えられています。

Slackでも社員が驚きの声をあげていました。1ヶ月あたり100〜200万円、1年間では1000万円を超える差になります。

Cloudflareでもキャッシュがヒットしていることが確認できます。直近30日では約3.16億のリクエストのうち約2.98億件はキャッシュがヒットしていることがわかります。

今後

現在はS3からR2への移行を計画しています。R2はCloudflare製のS3互換オブジェクトストレージで、エグレス料金なしという驚きの価格設定になっています。Cloudflare Workerと併用することでCloudFrontから完全に脱却することができ、さらなる費用削減が期待できます。こちらについても移行完了後に記事にする予定なので、続編をお待ちください。

https://ventus-inc.com/

Discussion