🏎️

Fastlyを導入してよかったこと

2022/09/27に公開

先日とあるサービスのCDNをFastlyに切り替えました。
導入体験が非常に良かったので、紹介していきます。

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

早い

当たり前ですが、レスポンスはもちろん速かったです。
おおよそ20ms前後で応答できていました。

またCDN設定変更の反映も非常に早かったです。
体感ですが1分もかからず反映されていたと思います。

安い

  • データ転送量
    最初の10TB$0.19/1GB毎(2022年9月現在、アジアリージョン)
  • リクエスト数
    $0.0090/1万リクエスト毎(2022年9月現在、アジアリージョン)

従量課金の場合、上記の費用がかかります。
このあと紹介していく機能などを考慮した費用対効果の面で考えると安いと思っています。

機能が豊富

Fastlyにはさまざまな便利機能があります。
そのうち実際に使用してよかったサービスを紹介します。

VCL

Fastlyは管理画面から設定もできるのですが、Varnishをベースに作られているため設定するのに Varnish の設定言語であるVarnish Configuration Language(VCL)が利用できます。

VCLの構成をTerraformで管理することもできるのでIaC化も可能です。

Image Optimizer

画像を最適化してくれるサービスです。

画像最適化はnext/imageLambda@Edgeなどさまざまなアプローチがありますが、Fastlyはセットアップしやすくカスタマイズも柔軟でした。

導入はサポートチームに有効化してもらったあとに、VCLにて

if (req.url.ext ~ "(?i)^(gif|png|jpe?g|webp)$" || req.url.path ~ "^/image/") {
  set req.http.x-fastly-imageopto-api = "fastly";
}

画像リクエストに対してImage Optimizerを設定することで利用できました。

デフォルトで画像の変換(webpなど)やパラメーターを付与して画像の加工などもできるため、非常に使いやすいです。

Stale-While-Revalidate

FastlyはStale-While-Revalidateにも対応しています。

Next.jsのISRのようなキャッシュを使いつつ、なるべく新しいデータを返却したいケースに有効です。

対応していないCDNもまだあるので対応していて非常によかったです。

TTLの上書き

VCLを利用して、リクエストパスなどに対してTTLを上書きすることが可能です。

if (req.url == "/") {
  set beresp.ttl = 3600s;
  return(deliver);
} else if (req.url ~ "^/posts/") {
  set beresp.ttl = 600s;
  return(deliver);
}

上記の例では、
/に対して3600s
/posts/*に対して600s
のTTLを設定しています。

諸事情でCache-Contorlヘッダーをカスタマイズすることが難しい場面で利用しました。

導入がスムーズ

セールスやサポートチームの方の対応がよく、導入もスムーズにできました。

導入前テスト

CDNの導入前のテストは/etc/hostsを書き換えてテストしました。

具体的な手順は以下が参考になります。
https://qiita.com/AtsushiFukuda/items/b277fe7db05a7f1cfa26

切り替え方法

Fastlyへの切り替えは3パターン用意されています。

  1. DNSにCNAMEレコードを設定(推奨)
  2. DNSにFastlyサーバーのIPをAレコードで設定
  3. Fastlyドメインを利用(*****.global.ssl.fastly.net)

1のCNAMEをFastlyに切り替えて導入しました。
APIサーバなどであれば3のFastlyドメインを使っても良いかもしれないですね。

さいごに

今回紹介していませんが、もちろんパージなども柔軟に利用できます。
前から気になっていたものの、使ってみて本当の良さを実感することができました。

CDN運用で課題を感じている方は検討してみてはいかがでしょうか?

Discussion