Next.js と Cloud Run の無料枠を活用すれば、ほぼ無料で運用可能
Next.js アプリケーションの本番環境デプロイのコストに頭を悩ませているエンジニアは多いはずです。しかし、Google Cloud の Cloud Run を活用すれば、その悩みはほとんど解消できます。
なぜ Cloud Run なのか
Cloud Run は、コンテナ化されたアプリケーションを簡単にデプロイできるサーバーレスプラットフォームです。しかも、毎月かなり寛容な無料枠が提供されています。
Cloud Run の無料枠(毎月):
- コンピューティング時間:180,000 vCPU 秒
- メモリ時間:360,000 GB 秒
- リクエスト:2 百万回
- 送信データ:1 GB
これらの無料枠は、多くの個人プロジェクトや小規模なサービスであれば、十分にカバーできる量です。では、具体的な手順を見ていきましょう。
Next.js の設定:Standalone モードの有効化
まず、Next.js のビルド出力を最適化する必要があります。next.config.js
を以下のように設定します。
この設定により、Next.js は最小限の依存関係だけを含む、最適化されたビルド出力を生成します。これは Docker イメージのサイズを小さく保つために重要です。
Docker 設定:最適化されたビルド
次に、本番環境用の Docker イメージを作成します。以下の Dockerfile
は、マルチステージビルドを使用して最適化されています。
Cloud Run は 8080 ポートを使用することを推奨しています。環境変数 PORT
を設定することで、Next.js サーバーが正しいポートでリッスンします。
Artifact Registry の準備
Docker イメージを保存するために、Artifact Registry を設定します。
Docker イメージのビルドとプッシュ
作成した Dockerfile からイメージをビルドし、Artifact Registry にプッシュします。
Cloud Run へのデプロイ
最後に、Cloud Run にアプリケーションをデプロイします。
min-instances
を 0 に設定することで、トラフィックがないときはインスタンスが完全に停止し、コストを最小限に抑えることができます。
コスト最適化のポイント
-
インスタンス数の制御
min-instances: 0
でコールドスタートを許容max-instances: 1
で予期せぬスケールアウトを防止
-
イメージサイズの最適化
- マルチステージビルドの活用
- 不要なファイルの除外
- 軽量なベースイメージの使用
-
キャッシュの活用
- Next.js のビルトインキャッシュ機能の活用
- CDN の利用検討
まとめ
Cloud Run の無料枠を最大限活用することで、Next.js アプリケーションをほぼ無料で運用できます。特に以下の点に注意を払うことで、コストを最小限に抑えることができます。
- Standalone モードによるビルド最適化
- Docker イメージのサイズ最小化
- インスタンス数の適切な制御
- キャッシュ戦略の実装
定期的に Cloud Run のメトリクスをチェックし、使用量が無料枠の範囲内に収まっているか確認することをお勧めします。