React ベースのシングルページアプリケーションを Amazon S3 と CloudFront にデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

React ベースのシングルページアプリケーションを Amazon S3 と CloudFront にデプロイする

Amazon Web Services、Jean-Baptiste Guillois

概要

シングルページアプリケーション (SPA) は、JavaScript API を使用して表示される Web ページのコンテンツを動的に更新する Web サイトまたは Web アプリケーションです。このアプローチでは、Web ページ全体をサーバーからリロードするのではなく、新しいデータのみを更新するため、Web サイトのユーザーエクスペリエンスとパフォーマンスが向上します。

このパターンは、Amazon Simple Storage Service (Amazon S3) と Amazon CloudFront で React に記述された SPA のコーディングとホスティングに段階的にアプローチします。このパターンの SPA は、Amazon API Gateway で設定され、Amazon CloudFront ディストリビューションを介して公開される REST API を使用して、クロスオリジンリソース共有 (CORS) 管理を簡素化します。

前提条件と制限事項

前提条件

  • アクティブ AWS アカウント。

  • Node.js と npm、インストールおよび設定済み。詳細については、Node.js ドキュメントのダウンロードセクションを参照してください。

  • Yarn がインストールされ、設定されている。詳細については、Yarn ドキュメントを参照してください。

  • Git、インストールおよび設定済み。詳細については、GitHub ドキュメントを参照してください。

アーキテクチャ

React ベースの SPA を Amazon S3 とCloudFront にデプロイするアーキテクチャ

このアーキテクチャは、 AWS CloudFormation (コードとしてのインフラストラクチャ) を使用して自動的にデプロイされます。また、静的アセットを保存する Amazon S3、リージョナル API (REST) エンドポイントを公開する Amazon API Gateway を使用する Amazon CloudFront などの、リージョナルサービスを使用します。アプリケーションログは Amazon CloudWatch を使用して収集されます。すべての AWS API コールが監査されます AWS CloudTrail。すべてのセキュリティ設定 (ID やアクセス許可など) は AWS Identity and Access Management (IAM) で管理されます。静的コンテンツは Amazon CloudFront コンテンツ配信ネットワーク (CDN) で配信され、DNS クエリは Amazon Route 53 によって処理されます。

ツール

AWS サービス

  • Amazon API Gateway」は、任意のスケールで REST、HTTP、WebSocket API を作成、公開、維持、監視、保護する上で役立ちます。

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および リージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

  • Amazon CloudFront は、世界中のデータセンターネットワークを通じて配信することで、ウェブコンテンツの配信を高速化します。これにより、レイテンシーが減少し、パフォーマンスが向上します。

  • AWS CloudTrail は、 のガバナンス、コンプライアンス、運用リスクを監査するのに役立ちます AWS アカウント。

  • Amazon CloudWatch は、 AWS リソースと で実行するアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

  • Amazon Route 53 は、高可用性でスケーラブルな DNS ウェブサービスです。

  • Amazon Simple Storage Service (Amazon S3) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。

コード

このパターンのサンプルアプリケーションコードは、GitHub のReact ベースの CORS シングルページアプリケーションのリポジトリにあります。

ベストプラクティス

Amazon S3 オブジェクトストレージを使用すると、アプリケーションの静的アセットを、安全性、回復力、性能、コスト効率に優れた方法で保存できます。このタスクには、専用のコンテナや Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用する必要はありません。

Amazon CloudFront コンテンツ配信ネットワークを使用すると、ユーザーがアプリケーションにアクセスするときに発生する可能性のあるレイテンシーを低減できます。ウェブアプリケーションファイアウォール (AWS WAF) を付加して、悪意のある攻撃からアセットを保護することもできます。

エピック

タスク説明必要なスキル

リポジトリのクローン作成

次のコマンドを実行して、サンプルアプリケーションのリポジトリを複製します。

git clone https://github.com/aws-samples/react-cors-spa react-cors-spa && cd react-cors-spa
アプリ開発者、AWS DevOps

アプリケーションをローカルにデプロイします。

  1. プロジェクトディレクトリで、npm install コマンドを実行してアプリケーションの依存関係を開始します。 

  2. yarn dev コマンドを実行して、アプリケーションをローカルで起動します。 

アプリ開発者、AWS DevOps

アプリケーションにローカルでアクセスします。

ブラウザウィンドウを開き、http://localhost:3000 URL を入力してアプリケーションにアクセスします。

アプリ開発者、AWS DevOps
タスク説明必要なスキル

AWS CloudFormation テンプレートをデプロイします。

  1. にサインインし AWS マネジメントコンソール、AWS CloudFormation コンソールを開きます。

  2. [Create Stack(スタックの作成)] を選択してから、[With new resources (standard) (新しいリソースを使用 (標準))] を選択します。

  3. [Upload a template file(テンプレートファイルをアップロード)] を選択します。

  4. [Choose file(ファイルを選択)] を選択し、クローンされたリポジトリから react-cors-spa-stack.yaml ファイルを選択してから、[Next(次へ)] を選択します。

  5. スタックの名前を入力してから、[Next(次へ)] を選択します。

  6. デフォルトのオプションを保持するには、[Next(次へ)] を選択します。

  7. スタックの設定を確認してから、[Create stack (スタックの作成)] を選択します。

アプリ開発者、AWS DevOps

アプリケーションソースファイルをカスタマイズします。

  1. スタックがデプロイされたら、[出力] タブを開き、Bucket 名と APIDomain 値を特定します。

  2. REST API の CloudFront ディストリビューションドメインをコピーします。

  3. <project_root>/src/pages/index.tsx に移動し、index.tsx ファイルの 13 行目の APIEndPoint 変数値にこのドメインを挿入するか、貼り付けます。

アプリ開発者

アプリケーションパッケージをビルドします。

プロジェクトディレクトリで yarn build コマンドを実行して、アプリケーションパッケージをビルドします。

アプリ開発者

アプリケーションパッケージをデプロイします。

  1. Amazon S3 コンソールを開きます。

  2. CloudFormation スタックによって以前に作成された S3 バケットを特定して選択します。

  3. [Upload(アップロード)] を選択してから、[Add files(ファイルの追加)] を選択します。

  4. out フォルダのコンテンツを選択します。

  5. [フォルダの追加] を選択してから、_next ディレクトリを選択します。

    重要

    コンテンツではなく _next ディレクトリを選択します。

  6. [Upload(アップロード) ] を選択し、S3 バケットにファイルとディレクトリをアップロードします。

アプリ開発者、AWS DevOps
タスク説明必要なスキル

アプリケーションにアクセスしてテストします。

ブラウザウィンドウを開いてから、CloudFront ディストリビューションドメイン (以前にデプロイした CloudFormation スタックからの SPADomain 出力) を貼り付けてアプリケーションにアクセスします。

アプリ開発者、AWS DevOps
タスク説明必要なスキル

S3 バケットのコンテンツを削除します。

  1. Amazon S3 コンソールを開き、スタックで以前に作成されたバケット (名前が react-cors-spa- で始まる最初のバケット) を選択します。 

  2. [Empty(空)] を選択してバケットのコンテンツを削除します。

  3. スタックによって以前に作成された 2 番目のバケット (名前が react-cors-spa- で始まり、-logs で終わる 2 番目のバケット) を選択します。

  4. [Empty(空)] を選択してバケットのコンテンツを削除します。

AWS DevOps、アプリ開発者

CloudFormation スタックを削除します。

  1. CloudFormation コンソールを開き、以前に作成したスタックを選択します。

  2. 削除を選択し、スタックとすべての関連リソースを削除します。

AWS DevOps、アプリ開発者

関連リソース

ウェブアプリケーションをデプロイおよびホストするには、AWS Amplify ホスティングを使用して、継続的なデプロイでフルスタックかつサーバーレスのウェブアプリをホストする Git ベースのワークフローを提供することもできます。Amplify ホスティングは の一部でありAWS Amplify、フロントエンドのウェブデベロッパーやモバイルデベロッパーがフルスタックアプリケーションを迅速かつ簡単に構築できるようにする専用のツールと機能を提供します AWS。

追加情報

ユーザーによってリクエストされ、403 エラーを生成する可能性のある無効な URL を処理するために、CloudFront ディストリビューションに設定されたカスタムエラーページが 403 エラーをキャッチし、アプリケーションエントリポイント (index.html) にリダイレクトします。

CORS の管理を簡素化するために、REST API は CloudFront ディストリビューションを通じて公開されます。