0Pricing
React Academy · レッスン

AWS S3とCloudFrontでReact SPAをホスティング

React appをbuildしてS3にuploadし、CloudFront distributionとcache invalidationを設定します。

「AWS S3とCloudFrontでReact SPAをホスティング」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

S3静的ホスティングの概要

AWS S3は、静的ファイル(HTML、JS、CSS、画像)をWebサイトとして提供できます。CloudFront(CDN)と組み合わせると、React SPAにグローバルな配信、HTTPS、低レイテンシを提供できます。

SPAのビルド

Reactアプリを静的な出力ディレクトリにビルドします。

# Vite:
npm run build  # outputs to dist/

# Create React App:
npm run build  # outputs to build/

# Next.js static export:
next build && next export  # outputs to out/

S3バケットの作成と設定

S3バケットを作成し、静的ウェブサイトホスティングを有効にして、インデックスドキュメントとエラードキュメントを設定します。

# Create bucket (replace with your domain name):
aws s3 mb s3://my-react-app.com

# Enable static hosting:
aws s3 website s3://my-react-app.com --index-document index.html --error-document index.html
# Error doc = index.html handles client-side routing (React Router)

ビルドファイルのアップロード

ビルドの出力をS3に同期します。ハッシュ付きアセットには積極的なキャッシュヘッダーを設定し、index.htmlにはno-cacheを設定します。

# Upload hashed assets with long cache:
aws s3 sync dist/ s3://my-react-app.com/ \
  --exclude index.html \
  --cache-control "max-age=31536000,immutable"

# Upload index.html with no cache (always fresh):
aws s3 cp dist/index.html s3://my-react-app.com/index.html \
  --cache-control "no-cache,no-store"

CloudFrontディストリビューションの作成

S3バケットを参照するCloudFrontディストリビューションを作成します。SPAのルーティングをサポートするため、RESTエンドポイントではなくS3ウェブサイトエンドポイントを使用します。

# In AWS console or CDK:
# Origin: my-react-app.com.s3-website-us-east-1.amazonaws.com
# Default root object: index.html
# Viewer protocol: Redirect HTTP to HTTPS
# Error pages: 403 → /index.html (200) for SPA routing

SPAルーティングの修正

CloudFrontは不明なパスに対して403を返します(S3はReactのルートを認識しないためです)。カスタムエラーレスポンスを設定し、403を/index.htmlに変換してステータス200を返すようにします。

カスタムドメインとSSL

ドメインのACM証明書をus-east-1でリクエストします(CloudFrontでは必須です)。証明書をディストリビューションに関連付け、CloudFrontのドメインを参照するCNAME DNSレコードを追加します。

デプロイ時のキャッシュ無効化

新しいファイルをデプロイした後、CloudFrontのindex.htmlのキャッシュを無効化します。S3ではno-cacheでも、CloudFrontによってキャッシュされている可能性があるためです。

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

GitHub Actionsによるデプロイ

CIでデプロイワークフローを自動化します。ビルド → S3への同期 → CloudFrontのキャッシュ無効化という流れです。

- name: Deploy to S3
  run: aws s3 sync dist/ s3://my-react-app.com/ --delete
  env:
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET }}

- name: Invalidate CloudFront
  run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CF_ID }} --paths "/*"

S3バケットポリシー

バケットへのパブリックアクセスをブロックし、Origin Access Control(OAC)ポリシーを使ってCloudFrontだけがバケットを読み取れるようにします。パブリックなバケットホスティングよりも安全です。

料金の見積もり

S3の静的ホスティングは非常に安価です。ストレージは約0.023ドル/GB、リクエストは約0.0004ドル/1000リクエストです。CloudFrontの料金はリージョンとデータ転送量によって異なりますが、無料利用枠では月1TBまで無料です。

小テスト

React SPAをホスティングするとき、S3のエラードキュメントをindex.htmlに設定するのはなぜですか?

まとめ

SPAをビルドし、キャッシュを分けてS3に同期します(ハッシュ付きアセットは長期間キャッシュし、index.htmlはno-cacheにします)。そのうえでCloudFront経由で配信します。403エラーを/index.htmlにマッピングしてSPAのルーティングを修正し、GitHub Actionsでデプロイを自動化して、デプロイごとにCloudFrontのキャッシュを無効化します。

よくある質問

「AWS S3とCloudFrontでReact SPAをホスティング」レッスンは無料ですか?

はい。「AWS S3とCloudFrontでReact SPAをホスティング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「AWS S3とCloudFrontでReact SPAをホスティング」で何を学びますか?

React appをbuildしてS3にuploadし、CloudFront distributionとcache invalidationを設定します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「AWS S3とCloudFrontでReact SPAをホスティング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Vercelへのデプロイ:Zero-ConfigとPreview URLs
  2. AWS S3とCloudFrontでReact SPAをホスティング
  3. React/Next.js AppのDocker化
  4. React向けGitHub Actions CI/CD
← React Academyに戻る