😮‍💨

個人開発してたらNetlifyから月$160の請求が!?帯域255GBの静的サイトをCloudflareで救った話

に公開
1

はじめに

個人で静的サイトを運用していたある日、突然Netlifyから160ドルの請求メールが届きました。
あまりの金額に落ち込み、サービスを閉じてしまおうかとまで思いましたが、
なんとかCloudflareを使うことで帯域を97%以上削減し、サービスを継続できる状態に戻せました。
この記事では、その一連の流れを共有します。

発端:帯域255GB、月$160の課金

Netlifyからのメール文面

“Based on your usage so far this month, we’ve billed you for an additional Bandwidth usage package…”

調べてみると、4月のNetlifyの帯域使用量はなんと 255.9GB。その結果、自動的に100GB追加パッケージ ×2 が請求され、合計 $160(約25,000円) の課金が発生していました。
え・・・やめて・・・

原因は?
• 画像やPDFの外部クローラー(例:Googlebot)
• 一部海外からの高頻度アクセス
• HTML以外の静的ファイルがCDNキャッシュされておらずNetlifyが直接返していた

解決策:Cloudflare CDNの活用

帯域を減らすために、以下のような対策を取りました。

  1. Cloudflareにドメインを追加し、DNSを移管
    • 取得した独自ドメインをCloudflareに追加
    • ネームサーバーをCloudflare指定に変更
    • Netlifyのサブドメイン(例:elegant-pie-xxxx.netlify.app)をCNAMEとして登録

  2. Cache Everything + 長いTTL設定

Cloudflareのキャッシュルールで以下を設定
• キャッシュレベル:Cache Everything
• Edge Cache TTL:1 month

これにより、CloudflareがHTML, CSS, JS, 画像、PDFすべてをキャッシュしてくれるようになり、Netlifyにはほとんどリクエストが来なくなりました。

効果検証

日付 帯域使用量
5/7(変更前) 7.9GB
5/8(設定日) 7.6GB
5/9 2.4GB
5/10 665.6MB
5/11 437.3MB
5/12 448.3MB
5/13 448.3MB
5/14 348MB
5/15 499.4MB
5/16 452.1MB
5/17 271.4MB

1週間観測を続け、安定していることを確認できました!

キャッシュ状況の確認

以下はCloudflareのリクエスト分析画面。
7日間で48万件超のアクセスのうち、92%がキャッシュヒットとして処理され、Netlify側への帯域負担は大幅に軽減されました。
Cloudflareの導入により、実質的に帯域課金ゼロの運用が可能になったと言えます。

学びと再現可能性

今回の対応から得たことは以下です
• Netlifyは帯域超過課金が突然発生する仕様である
• Cloudflareの無料プランでも十分に対策できる
• 帯域は「画像・PDF・Bot」が主要因。キャッシュ設計がすべてを左右する
• コスト最適化は技術力の証明であり、信頼につながる

まとめ

静的サイトは“無料でホストできる”という認識が広まりつつありますが、実際には帯域課金のトラップが潜んでいるケースも少なくありません。
しかし、Cloudflareを活用すれば、それすらも無料の範囲で解決可能です。

「やってしまった」を「やってよかった」に変えた実体験として、誰かの参考になれば嬉しいです。

Discussion

zhizitzhizit

【追記】Cloudflare経由でNetlifyに接続すると 522エラーになる件について

独自ドメインをNetlifyでホスティングし、CloudflareをDNS管理・CDNとして併用していたところ、「522 Connection timed out」エラーが発生しました。

発生状況

  • カスタムドメインにアクセスすると Cloudflareのエラーページが表示される
  • https://xxx.netlify.app(Netlifyデフォルトドメイン)では正常に表示される
  • DNSレコードでは、Aレコード(IPアドレス) を設定していた

原因と考察

CloudflareからNetlifyへのリクエストがタイムアウトしていた要因として、
• Cloudflareの プロキシ(オレンジの雲)設定がON
• AレコードがNetlifyとは無関係なIPアドレスを指していた
• Netlify推奨のCNAME設定が適切に反映されていなかった

という複数の構成ミスが重なっていたと考えられます。

解決した手順

以下の対応により、Cloudflare経由でも 正常に表示されるようになりました。
1. CloudflareのDNS設定で、カスタムドメイン および www に設定されていた Aレコード(IPアドレス)をすべて削除
2. カスタムドメイン と www に対して、Netlifyの .netlify.app ドメインを指すCNAMEレコードを設定
3. Cloudflareのプロキシ設定(オレンジの雲)を オフ(DNS Only、グレーの雲) に変更

Netlifyでは独自のCDNとSSL(Let’s Encrypt)を提供しており、CloudflareのプロキシCDNと競合しやすいため、CNAME経由でのDNS解決のみを利用し、プロキシを無効化する構成が安定します。