CloudFront 導入のコスト損益 — 入れると安くなる場合とならない場合
CloudFront はパフォーマンスのためのツールとして紹介されることが多いですが、実務ではコストのためのツールでもあります。結論を先に書くと、オリジンが AWS 内にある静的・キャッシュ可能なコンテンツは CloudFront を付けるほうがほぼ常に安く、キャッシュできない小さい API レスポンスだけが出ていくワークロードはリクエスト料金のせいで逆に高くなることがあります。 転送量の単価だけを見ると差は小さく見えますが、オリジンから CloudFront への区間が無料である点と、常時無料の 1TB が計算を大きく変えます。基本的な配信手順は AWS 中級 #7 CloudFront で扱ったので、この記事は損益計算に絞ります。料金は us-east-1 基準です。
一目でわかる比較 #
| 区間 | CloudFront なし | CloudFront 経由 |
|---|---|---|
| サーバー → インターネット転送 | 約 $0.09/GB(最初の 10TB) | 約 $0.085/GB(最初の 10TB、以降の段階は引き下げ) |
| オリジン → CDN 転送 | 該当なし | 無料(AWS オリジンの場合) |
| リクエスト料金 | なし(転送量に含まれる) | HTTPS 1 万件あたり約 $0.01 |
| 常時無料枠 | 月 100GB(全サービス合算) | 月 1TB + リクエスト 1,000 万件 |
| キャッシュヒット時のオリジン負荷 | すべてオリジンが処理 | オリジンのトラフィックと負荷が減少 |
| HTTPS 証明書 | ALB + ACM など別途構成 | 標準で含まれる |
単価差より構造の差が大きい #
GB あたり $0.09 と $0.085 の差は 5% 程度で、これだけでは導入の理由になりません。損益を実際に分ける要素は 3 つです。
1 つ目は、オリジンから CloudFront に出ていく転送が無料であることです。 S3、EC2、ALB といった AWS オリジンから CloudFront エッジへのトラフィックには転送料金がかかりません。キャッシュミスでオリジンまで往復しても、課金されるのは CloudFront からインターネットに出る区間の 1 回だけです。直接転送の $0.09/GB がまるごと $0.085/GB に置き換わる構造です。
2 つ目は、常時無料枠が違うことです。 通常のインターネット転送の無料枠は月 100GB ですが、CloudFront は月 1TB の転送とリクエスト 1,000 万件が期間の制限なく無料です。月間転送量が 1TB 以内のサイトなら、CloudFront を付けた瞬間に転送料金が 0 になります。直接転送なら 900GB に対して約 $81 かかる規模です。
3 つ目は、キャッシュヒットがオリジン側のコストまで減らすことです。 ヒット率が 90% なら、オリジンが処理するリクエストは 10 分の 1 になるため、EC2 のインスタンスサイズや台数を減らす余地が生まれます。転送料金の比較には表れませんが、実際の請求書には表れる項目です。
リクエスト料金が本体になる場合 #
CloudFront の落とし穴はリクエスト料金です。HTTPS リクエスト 1 万件あたり約 $0.01 なので、サイズの小さいレスポンスが大量に出るワークロードでは、この項目が転送料金を追い越します。
計算してみると境界が見えます。平均 1MB の画像が月 1,000 万件出ていく場合、転送は約 9.5TB で約 $810、リクエスト料金は約 $10 で誤差の範囲です。逆に平均 2KB の JSON が月 10 億件出ていく場合、転送は約 2TB で $170 程度なのに、リクエスト料金が約 $1,000 になり本体になります。しかもキャッシュできない API レスポンスならヒット率の恩恵もないため、直接転送と比べて純粋にリクエスト料金の分だけ損になります。
この場合でも CloudFront が無意味になるわけではありません。エッジで TLS を終端してオリジンとの接続を再利用するため遠方ユーザーの遅延が減り、WAF をエッジに付けられます。ただしそれはパフォーマンスとセキュリティに払うお金であって削減ではないので、導入の根拠をコストに求めてはいけない領域です。
無効化とこまごました料金 #
- 無効化(invalidation): パス 1,000 件までは月ごとに無料で、超過分はパスあたり $0.005 です。デプロイごとに
/*1 件で無効化すれば実質無料ですが、ファイル単位で数千件ずつ消すパイプラインには料金がつきます。ファイル名にハッシュを入れるキャッシュバスティングが定石です。 - オリジンが AWS の外にある場合: オンプレミスや他社クラウドのオリジンでは、オリジン側の回線コストはそちらの料金表に従います。CloudFront のオリジン転送無料は AWS オリジンの話です。
- リージョン別の単価差: 上の数字は北米・欧州エッジ基準です。アジア・南米エッジは単価が高いため、海外トラフィックの比率が大きい場合は料金クラス(Price Class)で高いエッジを除外する選択肢があります。
導入判断の手順 #
- 月間転送量から見ます: 1TB 以下なら計算するまでもなく CloudFront が得です。常時無料枠の範囲内なので転送料金が 0 になります。
- コンテンツがキャッシュ可能かを見ます: 静的ファイル、画像、動画、バージョン付きアセットなら導入で確定です。転送単価の引き下げ、オリジン転送無料、オリジン負荷の減少がすべて効きます。
- レスポンスサイズとリクエスト数を見ます: 平均レスポンスが数 KB で月間リクエストが億単位なら、先にリクエスト料金を計算します。転送の削減分より大きければコスト面の根拠はありません。
- キャッシュ不可のトラフィックはパフォーマンス・セキュリティの名目に分けます: 動的 API に付ける CloudFront は、削減ではなく遅延短縮と WAF 統合に払うお金として計算します。
- ヒット率をリリース後に確認します: CloudFront レポートのキャッシュヒット率が低ければ、Cache-Control ヘッダーとキャッシュキーの設定(不要なクエリ文字列、Cookie の扱い)から点検します。ヒット率の低い CloudFront は料金を二重に払う構成です。
まとめ #
- オリジンが AWS 内にあればオリジンから CloudFront への転送が無料なので、キャッシュ可能なコンテンツは CloudFront 経由が直接転送よりほぼ常に安くなります。
- 常時無料の 1TB が大きく、月間転送量 1TB 以下のサイトは転送料金が 0 に落ちます。直接転送の無料枠は月 100GB だけです。
- 小さいレスポンスの大量トラフィックでは、HTTPS 1 万件あたり約 $0.01 のリクエスト料金が本体になります。キャッシュ不可の API ならコスト面では損で、パフォーマンスとセキュリティの名目でだけ判断します。
- 無効化はパス単位の課金なのでファイル名ハッシュで回避し、ヒット率が低ければキャッシュキーの設定から点検します。
- 転送料金の全体像は次の記事で続けて扱います。料金が急に増えた場合はよくある原因 10 個から確認します。