デプロイこのページを編集

AWS Lambda

AWSにデプロイするには、ビルトインの aws アダプタを使用します。このアダプタは、AWS SAM(Serverless Application Model)を使用して、AWS Lambda関数とCloudFront CDNディストリビューションとしてアプリケーションをデプロイします。

以下のツールがインストールされている必要があります:

brew install awscli aws-sam-cli

次にAWS認証情報を設定します:

aws configure

AWSアクセスキーIDとシークレットアクセスキーが必要です。AWS IAMコンソールユーザー → セキュリティ認証情報 → アクセスキー で作成できます。

追加のパッケージは不要です — アダプタは @lazarv/react-server に組み込まれています。

react-server.config.mjs ファイルにアダプタを追加します:

export default { adapter: "aws", };

オプションを渡してアダプタをカスタマイズできます:

export default { adapter: [ "aws", { name: "my-app", // アプリケーション名(リソース名に使用) stackName: "my-app-stack", // CloudFormationスタック名 runtime: "nodejs20.x", // Lambdaランタイム(デフォルト: "nodejs20.x") memorySize: 1024, // Lambdaメモリ(MB)(デフォルト: 1024) timeout: 30, // Lambdaタイムアウト(秒)(デフォルト: 30) architecture: "arm64", // Lambdaアーキテクチャ(デフォルト: "arm64") authType: "NONE", // Function URL認証タイプ(デフォルト: "NONE") environment: { // 追加の環境変数 MY_API_KEY: "value", }, }, ], };

設定オプション

アプリケーションをビルドしてデプロイします:

pnpm react-server build [root] --adapter aws sam deploy --guided --stack-name my-app --capabilities CAPABILITY_IAM

または --deploy フラグを使用してビルドとデプロイを一度に実行します:

pnpm react-server build [root] --adapter aws --deploy

初回デプロイでは --guided モードが使用され、設定を求められ samconfig.toml に保存されます。以降のデプロイでは保存された設定が自動的に使用されます。

アダプタは以下のAWSリソースを作成します:

仕組み

すべてのリクエストは単一のLambdaオリジンを通過します:

ビューア → CloudFront → Lambda ├─ 静的ファイル? → ディスクから配信 + Cache-Control └─ 動的? → react-serverによるSSR

Lambdaハンドラはデプロイパッケージ内にすべての静的ファイルを含み、ファイルシステムから直接配信します。各レスポンスには適切な Cache-Control ヘッダーが含まれます:

最初のリクエスト後、CloudFrontはLambdaを呼び出さずにエッジから直接キャッシュされた静的ファイルを配信します。

カスタムドメイン

CloudFrontディストリビューションでカスタムドメインを使用するには、ディストリビューション設定を拡張します:

export default { adapter: [ "aws", { cloudfront: { distributionConfig: { Aliases: ["www.example.com"], ViewerCertificate: { AcmCertificateArn: "arn:aws:acm:us-east-1:123456789:certificate/abc-123", SslSupportMethod: "sni-only", MinimumProtocolVersion: "TLSv1.2_2021", }, }, }, }, ], };

Note: CloudFront用のACM証明書は us-east-1 リージョンに作成する必要があります。

CloudFrontなし

CloudFrontなしでデプロイする場合(Lambda Function URLのみ):

export default { adapter: [ "aws", { cloudfront: false, }, ], };

zsh: command not found: sam

AWS SAM CLIをインストールしてください:

brew install aws-sam-cli

zsh: command not found: aws

AWS CLIをインストールしてください:

brew install awscli

Error: Unable to locate credentials

AWS認証情報を設定してください:

aws configure

アクセスキーID、シークレットアクセスキー、デフォルトリージョン、出力形式が必要です。AWS IAMコンソールでアクセスキーを作成できます。

AWS SSOを使用している場合:

aws sso login --profile your-profile

Failed to create/update the stack ... ROLLBACK_COMPLETE

以前のデプロイが失敗し、CloudFormationがスタックした状態です。失敗したスタックを削除してから再試行してください:

sam delete --stack-name your-stack-name sam deploy --guided --stack-name your-stack-name --capabilities CAPABILITY_IAM

Lambdaコールドスタート

Lambda関数ではコールドスタートが発生します。影響を最小限にするには:

CloudFrontキャッシュの無効化

再デプロイ後、CloudFrontが古いキャッシュコンテンツを配信する場合があります。無効化を作成してください:

aws cloudfront create-invalidation \ --distribution-id YOUR_DISTRIBUTION_ID \ --paths "/*"

コンテンツハッシュ付きファイル名のビルドアセット(/assets/*/client/*)は無効化不要です — 新しいデプロイで自動的に新しいファイル名が生成されます。

Note: VPC設定、IAMポリシー、Lambdaレイヤーなどの追加のAWS固有機能については、functionPropertiesresourcestemplate オプションを使用してください。完全なテンプレート仕様については AWS SAMドキュメント を参照してください。