web-dev-qa-db-ja.com

カスタムドメインを使用したAWSLambdaおよびS3静的ファイルルーティング

AWSでシンプルなサーバーレスアプリをセットアップしようとしていますが、それらを組み合わせる方法を理解できていませんカスタムドメインを使用

Webアプリのルートは次のようになります。

  • /-> S3バケットから静的HTML/CSS/JSを提供します
  • /api/people/->ラムダ関数の呼び出し
  • /api/dogs/->ラムダ関数の呼び出し
  • /stats/->ラムダ関数の呼び出し
  • /backend/-> S3バケットから静的HTML/CSS/JSを提供します

API GatewayとCloudFrontを使用して、Route53でカスタムドメインに接続しようとしましたが、静的S3またはLambdaJSONルーティングのみをサポートしているようです。

AWSアーキテクチャはどのように見えますか?さまざまなAWSリソースにルーティングするルートを自由に選択できます(例:/-> S3、/api/people/->ラムダ、/api/dogs/->ラムダ、/backend/-> S3) `

事前にどうもありがとうございました。

14
Empty2k12

サーバーレステクノロジーを使用してフルスタックWebアプリケーションをセットアップする際の主な課題の1つは、コンピューティング(Lambda)と静的ファイル(HTML、JS、CSS、Images)の両方のメッセージをルーティングするプロキシレイヤーを用意することです。 API Gatewayは内部でCloudFrontを使用していますが、S3からの静的コンテンツと同じドメインを使用する動的コンテンツの両方を提供するのに役立ちません(クロスドメインアクセスの回避)。

したがって、AWS CloudFrontを使用して、ほとんどのWebプロジェクトで使用しているAPIGatewayとLambdaの両方にメッセージをプロキシする必要がありました。トレードオフは、CloudFrontを介してAPI Gatewayにアクセスする際に、追加のレイテンシーとコストが発生することです(ただし、これは重要ではありません)。

詳細については、 AWSを使用したフルスタックサーバーレスWebアプリ に関する私の記事を参照してください。

9
Ashan

私はAWSに比較的慣れていませんが、最近、静的サイトをS3経由で実行し、Lambda関数にアクセスすることに成功したので、とても新鮮です。

まず第一に、ドメインの特定のパスを特定のAWSリソースに向ける方法はありません。そのため、Route 53を使用してドメインをS3バケットにポイントし、静的リソースを提供する場合、そのドメインのすべてのパスは、そのS3バケット内のリソースのみをフェッチしようとします。これで、「バックエンド」はS3バケットから静的ファイルも提供するため、技術的には、「バックエンド」というフォルダーに保存されている「/」に使用するのと同じS3バケットに含めることができます。

そうでなければ、本当の答えはサブドメインを使用することです。

この概念を使用すると、次のことができます。

  • www.yourdomain.comは、「/」の静的サイトを含むS3を指しています。
  • api.yourdomain.comは、Lambda関数にアクセスするためのプロキシとして機能できるAWSAPIゲートウェイを指します
  • backend.yourdomain.comは、必要に応じて「/ backend」サイトのS3バケットをポイントします

ドメインのホストゾーンにレコードセットを追加するだけで、サブドメインを作成できます。ドキュメントを参照してください ここ

このすべての設定を行うことは、この質問の範囲外であり、時間がかかることになるでしょうが、うまくいけば、この情報が理にかなっており、より理にかなっている方向にあなたを導くのに役立ちます。

1
AkaPeyton