CDN を Fastly に切り替えてみて感じたこと
Fastly CDN について
Fastly は言わずとしれたパフォーマンスの高い CDN (Contents Delivery Network) サービスですね。ちょうどアクセスログ集計のアーキテクチャを見直したりマルチ CDN 化を検討する機会があり、Fastly を導入してみました。実際に使ってみて感じたことを記載していきます。
料金
まずは最も気になる料金体系からです。他のベンダーと比較して決して高くありません。
基本利用として発生するのは、
-
帯域 * GB単価
-
Requests / 10,000 * Request単価
の2つです。
これに加えてサポートへの加入やオプション利用で別途料金が発生します。
利用するオプションとしては、Fastly が管理する証明書の利用 (一定数を超える場合のみ)、アラート設定、WAF あたりがよくあるケースかもしれません。
オプションを追加していくとどうしても料金は高くなってしまいますが、常時利用ではなく特番対応として単発利用した際には、サポートの契約やアラート設定も必要なくオプションなしでも十分運用できたため、安価に利用することができました。
いざ設定
Fastly は AWS や GoogleCloud 等の他の CDN サービスと比べてとにかくできることが多いです。当然ながら、その分設定時にはつまづくポイントも多くなります。設定するにあたっては、ある程度でも構わないので Varnish を理解しなければいけません。Varnish をはじめとし、いくつかポイントと感じた点を列挙していきます。
VCL
Fastly は Varnish をベースに作られているため、VCL (Varnish Configuration Language) で設定することになります。つまり VCL が設定内容の全てです。これを意識していないと意図した設定と異なる挙動になるなんてことも起こり得ます。
VCL は私自身初めて触れる言語で (Varnish すら初耳でした) 日本語のドキュメントも豊富なわけではないので、正直とっつきにくかったです。とはいえ、言語自体は何の難しさもないので、サブルーチンさえ理解してしまえばそれまでです。どのサブルーチンの配下に VCL の処理を記述するかが非常に重要になりますが、それぞれのサブルーチンがどのような役割を持っていて、どのように遷移していくかがわかってきたら自然と記述する場所も判断できるようになりました。
さて、この感じだと「設定するためには VCL を一から書かないといけないの?」という疑念を抱かれる方もいらっしゃるかもしれませんが、全くそんなことはなくコンソールや API や CLI からもかなりの部分設定できます。(といってもこれらも VCL を書いてるだけです) しかし、この場合でも設定後には必ず Show VCL から VCL で設定を確認した方がよいです。
とはいえ、なんだかんだ開発環境のアクセス制限やリダイレクトをしたい、ログのフォーマットを指定したい等「こんなことできたらいいな」が出てきますので結局 VCL で設定することになります。この時に注意したいのが、 VCL を記載する場合にはできるだけ Custom VCL ではなく VCL snippets を用いるという点です。 よほどのことがない限りは Custom VCL は使用する機会はないと考えています。逆に Custom VCL を使用する場合には、ベストプラクティスにも
If you choose to use custom VCL, it's usually a good idea to capture all your logic within custom VCL files rather than combining custom VCL with VCL-generative objects or VCL snippets.
と記述がある通り VCL snippets は使用しない方がよいです。
ACLs
IPアドレスでアクセス制限をするシーンは多く存在しますが、この場合 VCL に直接記載するのではなく ACLs (Access Control Lists) に記載しておくのがよさそうです。ACLs に記載しておくことで制限対象の IPアドレスに変更があった場合、ACLs を修正するのみでデプロイの必要がありません。
Logging
ログの管理は Fastly 導入の決めてとなった機能の一つです。Fastly ではエッジサーバでログを整形してそのまま GoogleCloud や AWS のいくつかのサービスに出力することができます。 例えば、アクセスログを分析する場合、他のデータとも JOIN することになるパターンが多いので、やはり DWH に取り込んでおきたくなります。となった時に DWH + Fastly のみの設定で済むのはかなり魅力的です。しかも無料で 1ストリームにつき 2箇所までログ出力できるので、費用も抑えられて良いことしかありません。
どう運用するか
バージョン管理
VCL を理解して設定が完了したらどのように運用に落とし込むかを考えなければいけません。
やはりバージョン管理は必須ですのでなんとかコード管理したいところです。 Custom VCL は記載しない方針なのでシンプルに Terraform でよさそうです。ちなみに、サポートに確認したところ VCL をそのままデプロイすることはできないとのことでした。
Terraform でバージョン管理できているので、Terraform 上でも差分はわかりますし、Fastly コンソール上でも diff を確認することができます。コンソールの場合は下図のように直前以外のバージョンとも比較することができるのがいいですね 👏
モニタリング
監視も避けては通れません。前述のとおり、アラートまで設定しようとするとオプションが必要ですが、監視のみであればコンソールにダッシュボードが用意されています。リアルタイムで監視できるのがありがたいですね。
オプション利用なしの場合、運用開始から数日はこまめにダッシュボードを確認しつつステータスページで通知設定 (Webhook で Slack 通知もできるようになっています) をしておくくらいでしょうか。あとはデバッグしやすいようログも多めに出力するように設定しておけば安心です。弊社では特殊なログの利用用途がない場合は、無料の 2箇所のうち、1つは分析用に厳選したもの、もう 1つはデバッグ用にたくさん出力としています。
ユーザ管理
セキュリティリスクを考えると、Fastly を利用するメンバーの管理もきっちりしておきたいところです。メンバーが多くなると2段階認証の設定を必須としたり、ユーザをまとめたチームにアクセス権限を付与したり、という運用をしたくなります。しかし、2025年2月現時点ではこれらの機能は実装されていないようです…😭 今後に期待ですね。
また、オーナーを除いたユーザも Terraform で管理できないかと調査してみましたが、Create はできるもののすでにアカウントを持っているユーザを Invite することができないようで断念しました。今は手動で一人一人に Role とアクセス可能な CDN を付与しています。
おわりに
Fastly は非常に自由度が高く、やりたいことはほぼ実現できるような印象です。オプションやサポートが必要になってくると、他の CDN サービスよりも料金が高額となってしまう可能性もありますが、シーンを見極めれば安価かつ容易に利用できる印象です。
導入からしばらく運用していますが、今のところ困っていることはありません。質問事項があれば無料のサポートに問い合わせれば、レスポンス早く非常に丁寧に回答してくれます。VCL の書き方を問い合わせた場合には Fiddle を用いて具体的な VCL まで教えてくれるので、これから Fastly を導入される方も問題なく設定することができると思います。