Nuxt/Next を AWS サーバーレスで SSR する最新アーキテクチャ - 2025年版実装ガイド
なぜ今、サーバーレスSSRなのか
フロントエンドフレームワークの選択肢が成熟してきた2025年現在、NuxtやNextを使ったプロジェクトでは「SSR」を採用するケースが標準的になってきました。SEO対策、初期表示速度の改善、そしてユーザー体験の向上といった観点から、もはやSSRは選択肢の一つではなく、必須要件として扱われることが増えています。
一方で、SSRを実装する際の運用コストやインフラ管理の複雑さは、多くの開発チームにとって悩みの種でした。そこで注目されているのが、AWSのサーバーレスアーキテクチャを活用したSSR環境です。Lambda の Node.js 22 サポートにより、最新のJavaScript機能を活用できるようになり、パフォーマンスも大幅に向上しました。
2025年版アーキテクチャの基本構成
Lambda ランタイムの選定と最適化戦略
まず重要な変更点として、Lambda のランタイムは「nodejs22.x」を採用します。Node.js 18は既にEnd of Lifeを迎えており、AWSのサポートも段階的に終了していくため、新規プロジェクトでは必ずNode.js 22を選択することが重要です。
// serverless.yml の例
provider:
runtime: nodejs22.x
architecture: arm64 # Graviton2プロセッサでコストを20%削減
memorySize: 1024
timeout: 30
興味深い点として、「arm64」アーキテクチャの採用により、x86_64と比較して約20%のコスト削減が可能になります。Nuxtの「Nitro」エンジンは、ARMアーキテクチャでも安定して動作することが確認されており、コストパフォーマンスの観点から積極的に採用すべきです。
Nitroエンジンによる革新的なビルド戦略
Nuxt 3の中核を担う「Nitro」エンジンは、従来のサーバーレスデプロイの概念を根本から変えました。Nitro公式サイトが掲げる"Say goodbye to node_modules
"というスローガンの通り、ビルド時に依存関係を解決し、極めてコンパクトな成果物を生成します。
// nuxt.config.ts
export default defineNuxtConfig({
ssr: true,
nitro: {
preset: 'aws-lambda',
minify: true,
// 新機能:ツリーシェイキングの最適化
rollupConfig: {
output: {
manualChunks: (id) => {
if (id.includes('node_modules')) {
return 'vendor';
}
}
}
}
}
})
従来必須だった「serverless-layers」プラグインは、2024年6月15日にアーカイブされ、メンテナンスが終了しました。しかし、これは問題ではありません。Nitroの最適化により、Layerを使わなくても十分に高速な起動が実現できるようになったからです。実際、私たちのプロジェクトでは、Layer廃止後もコールドスタートが平均300ms以内に収まっています。
API Gateway vs Function URL - 適材適所の選択
ストリーミングSSRへの対応
2024年から2025年にかけての最も重要な変化の一つが、「ストリーミングSSR」への対応です。React Server Components(RSC)やVue 3.4以降のSuspenseを活用した段階的レンダリングは、ユーザー体験を劇的に向上させます。
しかし、ここに大きな制約があります。API GatewayはLambdaレスポンスストリーミングをサポートしていません。これはREST API、HTTP APIの両方に共通する制限です。
// ストリーミング対応のNitro設定
export default defineNuxtConfig({
nitro: {
preset: 'aws-lambda',
awsLambda: {
streaming: true // Function URL使用時のみ有効
}
}
})
ストリーミングSSRを実装する場合は、「Lambda Function URL」を使用する必要があります。Function URLは最大15分のタイムアウトをサポートし、ストリーミングレスポンスにも完全対応しています。
非ストリーミングSSRでのAPI Gateway活用
従来型の非ストリーミングSSRであれば、API Gatewayは依然として有効な選択肢です。特に2024年6月のアップデートにより、REST APIとPrivate APIの統合タイムアウトが29秒を超えて設定可能になりました(要申請)。
以下の表は、各サービスの特性を比較したものです。
表:API Gateway と Function URL の機能比較
項目 | REST API | HTTP API | Function URL |
---|---|---|---|
レスポンスストリーミング | 非対応 | 非対応 | 対応 |
最大タイムアウト | 29秒(申請で延長可) | 29秒 | 15分 |
料金(100万リクエスト) | $3.50 | $1.00 | $0.20 |