接続の観点からは、「何か」が要求(GET、POST、PUTなど)に応答する必要があります。まず最初に、TCP接続があり、「何か」は、それがレイヤー7を理解し、クライアントが送信するバイトから意味をなすことを確認する必要があります。この時点でのみ、GETリクエストをPOSTリクエストまたは別のURLとは異なる方法で処理できます。つまり、最終的には、HTTPを理解してルーティングできるサービスが必要になります。次のサービスでこれを実行できます:CloudFront ELB / ALB API Gateway(制限は後で提供されます)
API GatewayはCloudFrontを内部で使用します(実際にCloudFrontレベルで何かを構成する機会を与えることはありません)。つまり、最終的にCloudFrontでCloudFrontを実行することになるため、CloudFrontとAPI Gatewayを並べて実行する方法はありません。並んで。
CloudFrontを使用すると、パターンに基づいて異なるオリジンを選択できます。ただし、オリジンとして選択できるのはLambda関数(Lambda @ Edge機能以外)ではなく、S3またはELB / ALBのみです。
ALB / ELBはEC2インスタンスのみをバックエンドとして使用できます-ここではLambdaやS3は使用できません。
私があなたがしたいことをするかもしれないと考えることができる唯一の方法はこれらです:
- API Gatewayを使用して、特定の「アセット」パスをS3の一種のリバースプロキシを実行するLambda関数にルーティングします(ラムダを介して静的アセットをパイプする)-ここでLambdaのコストに注意してください!
- 同じことを行うことができますが、Lambdaを介してアセットをパイプ処理する代わりに、Lambda内で署名付きURLを生成し、S3に直接リダイレクトして配信します(コスト効率が向上する可能性があります)。
- アセットにアプリケーションの他の部分とは異なるサブドメインを使用する-これは非常に一般的なパターンです。これは、DNSレベルで簡単に分割して、さまざまなユースケース(CloudFrontをアセットに、API Gatewayを非静的に使用)に簡単に使用できるためです。部品)
したがって、私の呼び出しが最後のオプションになります-しかし、これは、すべての静的アセット(またはすべてのPOSTリクエスト)に対して、クライアント/ブラウザに個別のサブドメインを指定する必要があることを意味します。
AngularJSやReactなどのテクノロジーを見て、真にAPI駆動のアプリケーションをブラウザーで作成したいようです。このアプローチでは、APIゲートウェイですべての「動的」リクエストを処理し、アプリケーション自体をS3から静的アセットとして配信する実際のAPIを実行しています。多分それらを見ることはあなたがあなたの方法を見つけるのを助けるかもしれません-あなたがそれらを使わなくても、このようなものを構築する方法の建築パターンはあなたが私見を求めているものです。