З точки зору підключення "щось" має відповідати на ваші запити (GET, POST, PUT, все). Перш за все, у вас є TCP-з'єднання, і "щось" потрібно переконатися, що він розуміє рівень 7 та має сенс з байтів, які клієнт надсилає. Тільки в цей момент можна обробляти GET-запити інакше, ніж POST-запити або одну URL-адресу, ніж іншу URL-адресу. Отже, врешті-решт, вам потрібна послуга, яка здатна розуміти та маршрутизувати HTTP. Наступні служби здатні зробити це: CloudFront ELB / ALB API шлюз (обмеження настає пізніше)
API Gateway використовує CloudFront внутрішньо (не даючи вам можливості реально налаштувати що-небудь на рівні CloudFront) - це означає, що немає можливості запустити CloudFront та API Gateway поруч, оскільки, зрештою, це означатиме, що ви запускаєте CloudFront з CloudFront пліч-о-пліч.
CloudFront надає вам можливість вибору різних джерел на основі шаблонів, але ви можете вибрати лише S3 або ELB / ALB як джерело, а не функції Lambda (крім функцій Lambda @ Edge).
ALB / ELB може використовувати лише екземпляри EC2 як бекенд - тут немає Lambda або S3.
Єдині способи, які я можу придумати, з чого можна зробити те, що ви хочете зробити, це такі:
- Ви використовуєте шлюз API і спрямовуєте певний "актив"-шлях до функції Lambda, який робить вид зворотного проксі-сервера для S3 (таким чином, обробляючи статичні активи через лямбда) - будьте в курсі витрат на Lambda тут!
- Ви можете зробити те ж саме, але замість того, щоб передати об'єкт через Lambda, просто генеруйте підписану URL-адресу в Lambda, переадресацію безпосередньо на S3 для обслуговування (можливо, це буде більш економічно)
- Використання інших субдоменів для ваших активів, ніж для решти вашої програми - це дуже поширена модель, оскільки ви можете легко розділитись на рівні DNS і використовувати різні сервіси для різних випадків використання (CloudFront для активів та шлюз API для нестатичних частини)
Отже, мій дзвінок був би останнім варіантом - але це означає, що вам потрібно вказати клієнтам / браузерам на окремий піддомен для всіх статичних активів (або для всіх POST-запитів).
Здається, ви хочете ознайомитись з такими технологіями, як AngularJS або React, щоб створити в браузері справді керовану програму API. При такому підході ви використовуєте справжній API, який обробляє всі "динамічні" запити за допомогою шлюзу API і доставляє саму програму від S3 як статичний актив. Можливо, перегляд тих, хто може допомогти вам знайти свій шлях - навіть якщо ви їх не використовуєте, архітектурна схема того, як будувати такі речі, - це те, що ви просите в імхо.