Desde el punto de vista de la conexión, "algo" debe responder a sus solicitudes (GET, POST, PUT, todo). En primer lugar, tiene una conexión TCP y "algo" debe asegurarse de que comprende la capa 7 y que tiene sentido los bytes que envía el cliente. Solo en este punto es posible manejar las solicitudes GET de manera diferente a las solicitudes POST o una URL que otra URL. Entonces, al final, necesita un servicio que sea capaz de comprender y enrutar HTTP. Los siguientes servicios son capaces de hacer esto: CloudFront ELB / ALB API Gateway (la limitación viene más adelante)
API Gateway usa CloudFront internamente (sin darle la oportunidad de configurar realmente nada en el nivel de CloudFront), eso significa que no hay forma de ejecutar CloudFront y API Gateway lado a lado, ya que al final esto significaría que ejecuta CloudFront con CloudFront lado a lado.
CloudFront le brinda la oportunidad de seleccionar diferentes orígenes basados en patrones, pero solo puede seleccionar S3 o ELB / ALB como origen, no las funciones de Lambda (además de la funcionalidad Lambda @ Edge).
ALB / ELB solo puede usar instancias EC2 como backend; aquí no hay Lambda o S3.
Las únicas formas en que puedo pensar que podrían hacer lo que quieres hacer son estas:
- Utiliza API Gateway y enruta una ruta de "activo" específica a una función Lambda que hace una especie de proxy inverso para S3 (por lo que canaliza los activos estáticos a través de lambda). ¡Tenga en cuenta los costos para Lambda aquí!
- Puede hacer lo mismo, pero en lugar de canalizar el activo a través de Lambda, simplemente genere una URL firmada dentro de Lambda y redirija directamente a S3 para servir (podría ser más rentable)
- Usar diferentes subdominios para sus activos que el resto de su aplicación: este es un patrón muy común, ya que puede dividirse fácilmente en el nivel DNS y usar diferentes servicios para los diferentes casos de uso (CloudFront para activos y API Gateway para los no estáticos partes)
Por lo tanto, mi llamada sería la última opción, pero eso significa que debe apuntar a los clientes / navegadores a un subdominio separado para todos los activos estáticos (o para todas las solicitudes POST).
Parece que quiere echar un vistazo a tecnologías como AngularJS o React para crear una aplicación verdaderamente basada en API en el navegador. Con este enfoque, está ejecutando una API real que maneja todas las solicitudes "dinámicas" con una API Gateway y entrega la aplicación en sí desde S3 como un activo estático. Tal vez mirarlos podría ayudarlo a encontrar su camino; incluso si no los usa, el patrón arquitectónico sobre cómo construir cosas como esta es lo que está pidiendo en mi humilde opinión.