Dari sudut pandang koneksi, "sesuatu" perlu menjawab permintaan Anda (GET, POST, PUT, semuanya). Pertama-tama Anda memiliki koneksi TCP dan "sesuatu" perlu memastikan itu memahami lapisan 7 dan masuk akal dari byte yang dikirim klien. Hanya pada titik ini dimungkinkan untuk menangani permintaan GET berbeda dari permintaan POST atau satu URL dari URL lain. Jadi pada akhirnya Anda membutuhkan layanan yang mampu memahami dan mengarahkan HTTP. Layanan berikut mampu melakukan ini: CloudFront ELB / ALB API Gateway (batasan datang nanti)
API Gateway menggunakan CloudFront secara internal (tanpa memberi Anda kesempatan untuk benar-benar mengonfigurasi apa pun di tingkat CloudFront) - itu berarti tidak ada cara untuk menjalankan CloudFront dan API Gateway secara berdampingan karena pada akhirnya ini berarti Anda menjalankan CloudFront dengan CloudFront bersebelahan.
CloudFront memberi Anda kesempatan untuk memilih asal yang berbeda berdasarkan pola - tetapi Anda hanya dapat memilih S3 atau ELB / ALB sebagai asal - bukan fungsi Lambda (selain fungsi Lambda @ Edge).
ALB / ELB hanya dapat menggunakan instance EC2 sebagai backend - tidak ada Lambda atau S3 di sini.
Satu-satunya cara yang dapat saya pikirkan yang mungkin melakukan apa yang ingin Anda lakukan adalah ini:
- Anda menggunakan API Gateway dan merutekan "aset" khusus - jalan ke fungsi Lambda yang melakukan semacam proxy terbalik untuk S3 (jadi menyalurkan aset statis melalui lambda) - perhatikan biaya untuk Lambda di sini!
- Anda dapat melakukan hal yang sama tetapi alih-alih menyalurkan aset melalui Lambda, cukup buat URL yang ditandatangani di dalam Lambda, redirect langsung ke S3 untuk ditayangkan (mungkin lebih hemat biaya)
- Menggunakan subdomain yang berbeda untuk aset Anda daripada aplikasi lainnya - ini adalah pola yang sangat umum karena Anda dapat dengan mudah membagi pada tingkat DNS dan menggunakan layanan yang berbeda untuk berbagai kasus penggunaan (CloudFront untuk aset dan API Gateway untuk non-statis bagian)
Jadi panggilan saya akan menjadi opsi terakhir - tetapi itu berarti Anda harus mengarahkan klien / browser ke subdomain terpisah untuk semua aset statis (atau untuk semua permintaan POST).
Sepertinya Anda ingin melihat teknologi seperti AngularJS atau Bereaksi untuk membangun aplikasi yang benar-benar digerakkan oleh API di browser. Dengan pendekatan ini Anda menjalankan API nyata yang menangani semua permintaan "dinamis" dengan API Gateway dan mengirimkan aplikasi itu sendiri dari S3 sebagai aset statis. Mungkin melihat itu dapat membantu Anda menemukan jalan - bahkan jika Anda tidak menggunakannya, pola arsitektur tentang cara membangun hal-hal seperti ini adalah apa yang Anda minta untuk imho.