Từ quan điểm kết nối, "một cái gì đó" cần phải trả lời các yêu cầu của bạn (GET, POST, PUT, mọi thứ). Trước hết, bạn có kết nối TCP và "một cái gì đó" cần đảm bảo rằng nó hiểu được lớp 7 và hiểu được các byte mà máy khách đang gửi. Chỉ tại thời điểm này, có thể xử lý các yêu cầu GET khác với yêu cầu POST hoặc một URL so với URL khác. Vì vậy, cuối cùng bạn cần một dịch vụ có khả năng hiểu và định tuyến HTTP. Các dịch vụ sau có khả năng thực hiện việc này: Cổng API ELB / ALB của CloudFront (giới hạn đến sau)
API Gateway sử dụng CloudFront trong nội bộ (không cho bạn cơ hội thực sự định cấu hình mọi thứ ở cấp độ CloudFront) - điều đó có nghĩa là không có cách nào để chạy song song CloudFront và API Gateway vì điều này có nghĩa là bạn sẽ chạy CloudFront với CloudFront cạnh bên nhau.
CloudFront cung cấp cho bạn cơ hội chọn các nguồn gốc khác nhau dựa trên các mẫu - nhưng bạn chỉ có thể chọn S3 hoặc ELB / ALB làm nguồn gốc - không phải chức năng Lambda (ngoài chức năng Lambda @ Edge).
ALB / ELB chỉ có thể sử dụng các phiên bản EC2 làm phụ trợ - không có Lambda hoặc S3 ở đây.
Những cách duy nhất tôi có thể nghĩ ra có thể làm những gì bạn muốn làm là:
- Bạn sử dụng API Gateway và định tuyến một "tài sản" cụ thể đến chức năng Lambda có loại proxy ngược cho S3 (vì vậy, chuyển các tài sản tĩnh qua lambda) - hãy lưu ý về chi phí cho Lambda tại đây!
- Bạn có thể làm tương tự nhưng thay vì dẫn tài sản qua Lambda, chỉ cần tạo một URL đã ký trong Lambda, chuyển hướng trực tiếp đến S3 để phục vụ (có thể hiệu quả hơn về chi phí)
- Sử dụng các tên miền phụ khác nhau cho tài sản của bạn so với phần còn lại của ứng dụng - đây là mô hình rất phổ biến vì bạn có thể dễ dàng tách ra ở cấp DNS và sử dụng các dịch vụ khác nhau cho các trường hợp sử dụng khác nhau (CloudFront cho tài sản và Cổng API cho không tĩnh các bộ phận)
Vì vậy, cuộc gọi của tôi sẽ là tùy chọn cuối cùng - nhưng điều đó có nghĩa là bạn cần trỏ máy khách / trình duyệt đến một tên miền phụ riêng cho tất cả các tài sản tĩnh (hoặc cho tất cả các yêu cầu POST).
Có vẻ như bạn muốn có một cái nhìn về các công nghệ như AngularJS hoặc React để xây dựng một ứng dụng thực sự dựa trên API trong trình duyệt. Với cách tiếp cận này, bạn đang chạy một API thực sự đang xử lý tất cả các yêu cầu "động" với Cổng API và phân phối ứng dụng từ S3 như một tài sản tĩnh. Có lẽ nhìn vào những thứ đó có thể giúp bạn tìm đường - ngay cả khi bạn không sử dụng chúng, mô hình kiến trúc về cách xây dựng những thứ như thế này là những gì bạn đang yêu cầu imho.