Z punktu widzenia połączenia „coś” musi odpowiadać na twoje żądania (GET, POST, PUT, wszystko). Przede wszystkim masz połączenie TCP i „coś” musi upewnić się, że rozumie warstwę 7 i ma sens w bajtach wysyłanych przez klienta. Tylko w tym momencie można obsługiwać żądania GET inaczej niż żądania POST lub jeden adres URL niż inny adres URL. W końcu potrzebujesz usługi, która jest w stanie zrozumieć i przekierować HTTP. Są w stanie to zrobić: CloudFront ELB / ALB API Gateway (ograniczenie pojawia się później)
API Gateway korzysta z CloudFront wewnętrznie (bez możliwości faktycznej konfiguracji czegokolwiek na poziomie CloudFront) - oznacza to, że nie ma sposobu, aby uruchomić CloudFront i API Gateway obok siebie, ponieważ w końcu oznaczałoby to uruchomienie CloudFront z CloudFront ramię w ramię.
CloudFront daje Ci możliwość wyboru różnych źródeł na podstawie wzorców - ale możesz tylko wybrać S3 lub ELB / ALB jako źródło - nie funkcje Lambda (oprócz funkcji Lambda @ Edge).
ALB / ELB może wykorzystywać tylko instancje EC2 jako backend - nie ma tutaj Lambda ani S3.
Jedyne sposoby, które mogę wymyślić, które mogłyby zrobić to, co chcesz zrobić, to:
- Korzystasz z API Gateway i kierujesz konkretną ścieżkę „zasobu” do funkcji Lambda, która robi rodzaj odwrotnego proxy dla S3 (więc przesyłając statyczne zasoby przez lambda) - pamiętaj o kosztach dla Lambda tutaj!
- Możesz zrobić to samo, ale zamiast przesyłać strumieniowo zasób przez Lambda, po prostu wygeneruj podpisany adres URL w Lambda i przekieruj bezpośrednio do S3 w celu wyświetlenia (może to być bardziej opłacalne)
- Używanie różnych subdomen dla zasobów niż reszty aplikacji - jest to bardzo powszechny wzorzec, ponieważ można łatwo podzielić na poziomie DNS i używać różnych usług dla różnych przypadków użycia (CloudFront dla zasobów i API Gateway dla niestatycznych Części)
Moje połączenie byłoby ostatnią opcją - ale oznacza to, że musisz skierować klientów / przeglądarki do osobnej subdomeny dla wszystkich zasobów statycznych (lub wszystkich żądań POST).
Wygląda na to, że chcesz przyjrzeć się technologiom takim jak AngularJS lub React, aby zbudować w przeglądarce aplikację opartą na interfejsie API. Dzięki takiemu podejściu uruchamiasz prawdziwy interfejs API, który obsługuje wszystkie „dynamiczne” żądania za pomocą interfejsu API Gateway i dostarcza samą aplikację z S3 jako zasób statyczny. Może spojrzenie na te może pomóc ci znaleźć drogę - nawet jeśli ich nie używasz, to wzór architektoniczny, w jaki sposób budować takie rzeczy, jest tym, o co prosisz imho.