Saya menempatkan aset statis situs web saya di S3, dan mengatur CloudFront untuk mendistribusikannya. Ini pada dasarnya menampung konten yang dibutuhkan pengguna untuk setiap permintaan GET di situs saya, ke jalur yang ada, dengan semua kesalahan.
Saya juga punya beberapa permintaan POST yang perlu saya tangani. Pengiriman formulir, mengirim email, pemberitahuan, berinteraksi dengan database.
Bagaimana saya bisa mengatur Lambda (atau API Gateway) berdampingan dengan CloudFront untuk domain yang sama sehingga CloudFront menangani permintaan GET, dan API Gateway menangani permintaan dengan tubuh atau permintaan POST. Atau bisakah saya melakukannya dengan URL individual?
Anda dapat membuat fungsi lambda, mengatur gateway API, dan kemudian mengkonfigurasi CloudFront untuk meneruskan jalur tertentu (mis. / Rest / *) ke gateway API, dan melayani yang lainnya dari bucket S3.
Berikut ini adalah langkah lengkap untuk menunjukkan bagaimana melakukan ini: https://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/
sumber
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:
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.
sumber
Saya memiliki pengaturan yang sama. Aset statis pada S3, fungsi Lambda dilayani melalui gateway API, dan mereka berbagi nama domain yang sama.
Saya menggunakan API gateway yang sudah menggunakan CloudFront dan memperlihatkan beberapa fungsinya seperti caching. Lalu saya mengkonfigurasi URI yang memetakan ke aset statis. Di API Gateway, sumber daya bisa berupa fungsi Lambda, fungsi AWS, tiruan, atau URL lainnya. Saya minta mereka menunjuk ke URL S3 saya.
URI dapat diatur untuk menggumpalkan subpath juga misalnya
/assets/*
.sumber
/assets/*
. Saya harus menghapus penyebaran, dan klik kanan pada/assets/*
jalur dan sebarkan dari sana.