Bağlantı bakış açısından "bir şey" isteklerinizi cevaplamak gerekir (GET, POST, PUT, her şey). Her şeyden önce bir TCP bağlantınız var ve katman 7'yi anladığından ve istemcinin gönderdiği baytlardan anlam çıkardığından emin olmak için "bir şey" gerekiyor. Yalnızca bu noktada GET isteklerini POST isteklerinden veya bir URL'den başka bir URL'den farklı şekilde ele almak mümkündür. Sonuçta HTTP'yi anlayabilen ve yönlendirebilen bir hizmete ihtiyacınız var. Aşağıdaki hizmetler bunu yapabilir: CloudFront ELB / ALB API Gateway (sınırlama daha sonra gelir)
API Gateway, CloudFront'u dahili olarak kullanır (size CloudFront düzeyinde herhangi bir şey yapılandırma şansı vermeden) - bu, CloudFront'u ve API Gateway'i yan yana çalıştırmanın bir yolu olmadığı anlamına gelir; çünkü bu, CloudFront'u CloudFront ile çalıştırdığınız anlamına gelir yan yana.
CloudFront, desenlere dayalı olarak farklı orijinler seçme şansı verir - ancak Lambda işlevleri (Lambda @ Edge işlevinin yanı sıra) yerine yalnızca S3 veya ELB / ALB'leri orijinal olarak seçebilirsiniz.
ALB / ELB, EC2 örneklerini yalnızca arka uç olarak kullanabilir - burada Lambda veya S3 yoktur.
Düşünmek istediğim şeyi yapabilecek tek yol bunlar:
- API Ağ Geçidi kullanın ve belirli bir "varlık" -yolunu, S3 için bir ters proxy gibi bir Lambda işlevine yönlendirirsiniz (böylece statik varlıkları lambda aracılığıyla pipolayın) - Lambda'nın maliyetlerinin farkında olun!
- Bunu da yapabilirsiniz, ancak varlığı Lambda üzerinden borulamak yerine Lambda içinde imzalı bir URL oluşturmak için doğrudan S3'e sunum için yönlendirmek (daha uygun maliyetli olabilir)
- Varlıklarınız için uygulamanızın geri kalanından farklı alt alan adları kullanma - bu, DNS düzeyinde kolayca ayrılabileceğiniz ve farklı kullanım durumları için farklı hizmetler kullanabileceğiniz için çok yaygın bir kalıptır (statik olmayanlar için varlıklar için CloudFront ve statik olmayanlar için API Gateway parçalar)
Bu yüzden çağrım son seçenek olurdu - ancak bu, istemcileri / tarayıcıları tüm statik varlıklar (veya tüm POST istekleri için) için ayrı bir alt alana yönlendirmeniz gerektiği anlamına gelir.
Tarayıcıda gerçekten API odaklı bir uygulama oluşturmak için AngularJS veya React gibi teknolojilere bakmak istediğiniz gibi görünüyor. Bu yaklaşımla, bir API Ağ Geçidi ile tüm "dinamik" istekleri işleyen ve uygulamanın kendisini statik bir varlık olarak S3'ten teslim eden gerçek bir API çalıştırıyorsunuz. Belki bunlara bakmak, yolunuzu bulmanıza yardımcı olabilir - bunları kullanmasanız bile, böyle şeyleri nasıl inşa edeceğinize dair mimari desen imho için sormanız gereken şeydir.