🚀

Cloud RunとかGCPサーバレス製品のCDNはFastlyが最強かもしれない話-1/2

2024/02/27に公開

いやー高い技術を持ってそうだけどいまいち地味なのと料金表が表に出てないから敬遠してた謎のネットワークサービスFastlyを友人が転職してたので試してみました。そしたらいままでCloud Runで抱えてた悩みが解決してしかも値段も結構大丈夫そうだったので記事にまとめることにしました。

追記:Host Overrideについて書いた

俺たちは安くてhttpsで独自ドメインでCloud Runを使いたい

そう、それだけなんですよ。それだけなのに苦労するのがCloud Runなんですよ。詳しくはこちらをお読みください。いままでは安くで済まそうとすると、プレビュー版のカスタムマッピングか、Cloudflareを前段にかますことが多かったのですが、それだと遅いのですよ。

https://zenn.dev/catnose99/scraps/ffdd08cebfad12

Cloudflare Workersを組むとそこそこ速いのですが、キャッシュ含めちゃんと組むとなるちょっとコードの手間がかかるんですよね。

Firebaseをかますこともできるが、安くない

さて、プレビュー版で遅いカスタムドメインマッピング以外にも、Cloud Run公式で2つの方法が用意されています。

このうち、手軽な(コンソールのシンプルな)のがFirebase Hostingとの接続ですが、これは意外と安くないのです。後述するGCPの公式CDNがアジアリージョン向け$0.09に対し、Firebase Hostingのトラフィック課金は$0.15/GBなんですよね(無料枠なし)。

余談ですが、Firebase Hostingの裏側もあまり表に出ていませんがFastlyです。

GCPのLBはめんどくさい&キャッシュパージに難あり

となるとGCPのロードバランサーでCDNをオンにするのですが、慣れてないと難しいです。IPアドレスを確保したりサーバレスNEGとか謎の専門用語が出てくるのでインフラに慣れてない方には初見殺しです。また料金は安いですが、WAFのCloud Armorをオンにするとそれなりにかかってきます。

それよりも、微妙に使いづらいのがキャッシュのパージです。ドクセルでも悩んだのですが、キャッシュのパージに2分くらいかかる&並行でパージできない&prefix指定しかできないという縛りにより、気軽にキャッシュパージを行うことができません。

そこでFastlyですよ

https://www.fastly.com/jp/

このFastlyを試したところ、名前の通り爆速でした。ざっくり手元計測なのですが、以下の通りとなりました。ChromeのDevToolでDisable Cacheをセットした状態で20回程度リロードしてみます。ページロードではなく、ドキュメントの読み込みのみを計測します。

  • 素のCloud Run(xxxx-a.run.appドメイン) 約22ms
  • Cloudflare Workersによるプロキシ 約95ms
  • Firebase Hosting CDN 約110ms
  • GCP LB 約22ms
  • Fastly 約9ms※

やばい速い!!

あいや、これは正確じゃないんです。「そんなにスキルがない人が触ると」という前提で読んでください。Cf WorkersはCache Everythingの制御が面倒で単なるプロキシだとこうなり、FirebaseはOriginがCache-controlヘッダを出さないと安全側に倒してMISSにしてきます。Fastlyはデフォルト設定でCache-controlがなくてもCacheしてくるというだけです。
だいたいキャッシュをパージすると100msでした。つまりGCP以外のCDNをかますとキャッシュなしでは80msほど追加されるというのはどこも同じです。別に速くはなかったw

ではなんでFastlyがいいのか?

  • 実は安い
  • Host Overrideがある
  • デフォルトでしっかりキャッシュしてくれる
  • パージが爆速
  • サポートもしっかり

です。デフォルトでキャッシュしてくれる点は↑で述べた通りです。素人が触った時に良くも悪くもキャッシュしてくれます。パージが爆速なのも有名ですね。APIでガシガシキャッシュを消せるのはVernishのいいところです。サポートもしっかりできるようで、何かあった時も安心ですね。

[重要]Host Overrideがある(からxxx-a.run.appをプロキシ出来る)

Cloudflareはこれがエンタープライズプランでしかできないんですよ。なので、素のCloudflareでオレンジクラウドにして、xxx-a.run.appにCNAME設定でプロキシすると、カスタムドメインではないのでNot foundになってしまいます。

ところが、Fastryの場合Host Overrideという設定があり、こうするとOriginをFetchしに行くときに、xxx-a.run.appのホスト名で取りに行ってくれるので、何の設定もしなくてもいけるんですよ。
この楽ちんさを伝えたかった

実は毎月250GB相当のトラフィックが無料アカウントについてる

そしてあまり知られていないのがこれで、Fastlyは「毎月」$50相当の枠が無料でついてきます。営業さんに連絡する前の定価が$0.19/GBなので0.2としても250GB相当のトラフィックがさばけます。動画やファイルホスティングだと厳しいかもしれませんが、一般的なWebアプリケーションだと、数万~10万MAUくらいまでは無料でさばけてしまうのではないでしょうか。

https://twitter.com/FastlyJapan/status/1650482977011376129

それを超えた場合も、$50=7500円~従量課金ですし、超えるタイミングで営業さんに相談すると、$0.19ではなく「競争力のあるGB単価」を提示してもらえるみたいなので、だったら最初っからFastlyでもいいかな~というお気持ちになりました。

以下個人のお気持ちです

詳しい事情はどこかパブリックじゃない場所で聞いてください。

  • GCP LB(僕はもう慣れたので)Certificate Manager含めインフラスキル高ければこれ
    • しっかりキャッシュしてパージしたいときは微妙
  • Firebase Hosting インフラスキルあんまりないけど権限管理GCPで完結させたい
    • アプリ側でCache-Controlヘッダ書けば速度は大丈夫そう。安くはない
  • Cloudflare Workers 難しいことをしてもネットワーク費を安く上げたい
    • WAFが無料でついてくるのは魅力的。サポートがダメなのが人に勧めにくい
  • カスタムドメインマッピング(あるいはそれプラス素のCloudflare) 遅くてもいいので安く簡単に済ませたい
  • Fastly そこそこ簡単に安くCloudrunを独自ドメインhttpsでうごかしたい
    • 無料版はapex domain非対応、2ドメインまで、WAF別料金なのが玉にキズ

つぎは、実際のセットアップについて書く予定。気になる人は♡つけてね!

→書きました

https://zenn.dev/kusuke/articles/5594cc62120d4c

Discussion