Saas
Vercel
ISRや、Image Optimization、CDNでの静的ファイルキャッシュといった機能を設定なしで使うことができるのでNext.js動かすならこれを使った方が楽。
というか、Next.jsのISRはVercel以外のサーバーではかなり難易度が高いらしいので使いたいならほぼVercelになる。(Vercel以外では一部CDNで対応しているSSR+stale-while-revalidateを使えばよい。ただこの場合はNext.jsじゃなくてもRailsでもLaravelでもできる。また、SGはprefetchするのでSSRより早いというメリットがある。)
キャッシュ機能
静的コンテンツは自動でキャッシュされる。(デプロイをまたいでキャッシュされます。)Edge Function(VercelのJS実行機能)などの動的コンテンツをキャッシュしたい場合はCache-Controlレスポンスヘッダーを指定する必要がある。
静的コンテンツのキャッシュに関しては、Vercel Edge Networkにて31日間保存されます。
サイトにパスワード
月150ドル程度かかる。
プラン
プラン | 料金 | BandWidth | next/Image 最適化画像枚数 |
---|---|---|---|
Hobby | 0円 | 月1000枚 | |
Pro | 月20ドル | 月1TBまで | 月3000枚 |
Enterprise | 要相談(月数千 ドル程度は考えておく。) |
仕組み
AWSのLambdaを使っている。Next.jsのSSRやISRの処理もLambda上で実行される。(なのでLambda上の制限を受けることになる。)
受ける制限
- リクエスト・レスポンスのbodyが5MBを超えると413エラーを返す。(概ね画像など容量の大きめの内容を処理した場合に影響する。)
耐障害性
AWSのLambda、Vercelのいずれかに障害が発生すると落ちてしまいます。Lambdaに依存しているので障害発生リスクは他のSaaSに比べたら少し高いです。
Serverless Framework
AWSのサーバーレス環境のフレームワーク。うまみとしてはAWSからインフラを分離せず、ISRが使える。
Next.jsを使うには?
Serverless Nextjs Pluginというものがある。Next.js8から導入されたサーバーレスモードをお手軽にデプロイすることができます。
serverless-next.js
これはISRをサポートしている。
ECS on Fargate
他のデプロイ先に比べるとコンテナベースなのでDockerfileを別途作る必要がある。(npm buildしてstartするような物を作る。)
わざわざローカルをdocker-composeとかでコンテナ化まではする必要はないかとは思う。
これも、ISRは使えない。(仮にECSのスケーリングが動いた際に、キャッシュが分散したり、バージョニングを適切にしないと_next以下のアセットを別サーバーに取りに行ってしまってエラーになる場合がある。)
ECS on Fargateを使うにしてもISR的なことがしたい場合はSSR + CDNになる。
Google Cloud
それなりに通信料が多くても月数百ドル程度に抑えることも可能。Vercelよりは安い。
ただし、Vercelに比べてデプロイは2倍ほど遅くなるらしいです。
負荷分散について
ELBでロードバランシングする構成にする。プロキシ(Nginx)を冗長構成にする。環境自体は冗長にはしないって作りが一般的。
この記事へのコメントはありません。