Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan permintaan dan tanggapan
Untuk menggunakan permintaan dan tanggapan Lambda @Edge, lihat topik berikut:
Topik
Gunakan fungsi Lambda @Edge dengan failover asal
Anda dapat menggunakan fungsi Lambda @Edge dengan CloudFront distribusi yang telah Anda atur dengan grup asal, misalnya, untuk failover asal yang Anda konfigurasikan untuk membantu memastikan ketersediaan tinggi. Untuk menggunakan fungsi Lambda dengan kelompok asal, tentukan fungsi dalam permintaan asal atau pemicu respons asal untuk kelompok asal saat Anda membuat perilaku cache.
Untuk informasi selengkapnya, lihat berikut ini:
-
Buat grup asal: Buat grup asal
-
Bagaimana asal failover bekerja dengan Lambda@Edge: Gunakan failover asal dengan fungsi Lambda@Edge
Hasilkan tanggapan HTTP dalam pemicu permintaan
Saat CloudFront menerima permintaan, Anda dapat menggunakan fungsi Lambda untuk menghasilkan respons HTTP yang CloudFront kembali langsung ke penampil tanpa meneruskan respons ke asal. Membuat respons HTTP mengurangi beban pada asal mula, dan biasanya juga mengurangi latensi bagi penampil.
Beberapa skenario umum untuk menghasilkan tanggapan HTTP mencakup hal berikut:
-
Mengembalikan halaman web kecil ke penampil
-
Mengembalikan kode status HTTP 301 atau 302 untuk mengarahkan pengguna ke halaman web lain
-
Mengembalikan kode status HTTP 401 ke penampil saat pengguna belum mengautentikasi
Fungsi Lambda@Edge dapat menghasilkan respons HTTP saat CloudFront peristiwa yang terjadi:
- Peristiwa permintaan penampil
-
Ketika fungsi dipicu oleh peristiwa permintaan penampil, CloudFront mengembalikan respons ke penampil dan tidak menyimpannya.
- Acara permintaan asal
-
Ketika fungsi dipicu oleh peristiwa permintaan asal CloudFront , periksa cache tepi untuk respon yang sebelumnya dihasilkan oleh fungsi.
-
Jika respons ada di cache, fungsi tidak dijalankan dan CloudFront mengembalikan respons yang di-cache ke penampil.
-
Jika respons tidak ada dalam cache, fungsi akan dijalankan, CloudFront mengembalikan respons ke penampil, dan juga menyimpan datanya.
-
Untuk melihat beberapa kode sampel untuk menghasilkan respons HTTP, lihat Lambda @Edge contoh fungsi. Anda juga dapat mengganti respons HTTP dalam pemicu respons. Untuk informasi selengkapnya, lihat Perbarui tanggapan HTTP dalam pemicu respons asal.
Model pemrograman
Bagian ini menjelaskan model pemrograman untuk menggunakan Lambda@Edge untuk menghasilkan respons HTTP.
Objek respons
Tanggapan yang Anda kembalikan sebagai result parameter dari callback harus memiliki struktur berikut (perhatikan bahwa hanya status bidang wajib diisi).
const response = { body: 'content', bodyEncoding: 'text' | 'base64', headers: { 'header name in lowercase': [{ key: 'header name in standard case', value: 'header value' }], ... }, status: 'HTTP status code (string)', statusDescription: 'status description' };
Objek respons dapat mencakup nilai-nilai berikut:
body-
Tubuh, jika ada, yang CloudFront ingin Anda kembalikan dalam respons yang dihasilkan.
bodyEncoding-
Pengodean untuk nilai yang Anda tentukan dalam
body. Satu-satunya pengodean yang valid adalahtextdanbase64. Jika Anda menyertakanbodydalamresponseobjek tetapi menghilangkanbodyEncoding, per CloudFront lakukan tubuh sebagai teks.Jika Anda menentukan
bodyEncodingsebagaibase64tetapi bagian tubuh tidak valid dasar64, CloudFront mengembalikan kesalahan. headers-
Header yang CloudFront ingin Anda kembalikan dalam respons yang dihasilkan. Perhatikan hal-hal berikut:
-
Kunci dalam
headersobjek adalah versi huruf kecil nama header HTTP standar. Menggunakan tombol huruf kecil memberi Anda akses huruf kecil ke nilai header. -
Setiap header (misalnya,
headers["accept"]atauheaders["host"]) adalah serangkaian pasangan kunci. Untuk header tertentu, larik berisi satu pasangan nilai kunci untuk setiap nilai dalam respons yang dihasilkan. -
key(opsional) adalah nama judul yang peka terhadap kasus sebagaimana muncul dalam permintaan HTTP; misalnya,acceptatauhost. -
Tentukan
valuesebagai nilai header. -
Jika Anda tidak menyertakan bagian kunci header dari pasangan nilai kunci, Lambda@Edge secara otomatis memasukkan kunci header menggunakan nama header yang Anda berikan. Terlepas dari bagaimana Anda memformat nama header, kunci header yang dimasukkan secara otomatis diformat dengan kapitalisasi awal untuk setiap bagian, dipisahkan oleh tanda hubung (-).
Misalnya, Anda dapat menambahkan header seperti berikut, tanpa tombol header:
'content-type': [{ value: 'text/html;charset=UTF-8' }]Dalam contoh ini, Lambda@Edge membuat tombol header berikut:
Content-Type.
Untuk informasi tentang pembatasan penggunaan header, lihat Pembatasan pada fungsi edge.
-
status-
Kode status HTTP. Berikan kode status sebagai string. CloudFront menggunakan kode status yang disediakan untuk hal berikut:
-
Kembalikan dalam respons
-
Cache di cache CloudFront tepi, ketika respons dihasilkan oleh fungsi yang dipicu oleh peristiwa permintaan asal
-
Masuk CloudFront Log akses (log standar)
Jika
statusnilainya tidak antara 200 dan 599, CloudFront mengembalikan kesalahan ke penampil. -
statusDescription-
Deskripsi yang CloudFront ingin Anda kembalikan dalam respons, untuk menyertakan kode status HTTP. Anda tidak perlu menggunakan deskripsi standar, seperti
OKuntuk kode status HTTP sebesar 200. Memperbarui bidang ini hanya akan berfungsi jika klien terhubung HTTP/1.1. Jika klien terhubungHTTP/2, setiap perubahan pada klienstatusDescriptionakan diabaikan dan deskripsi standar akan dikembalikan ke klien.
Kesalahan
Berikut ini adalah kemungkinan kesalahan untuk respons HTTP yang dihasilkan.
Respon Berisi Badan dan Menentukan 204 (Tanpa Konten) untuk Status-
Ketika fungsi dipicu oleh permintaan penampil, CloudFront mengembalikan kode status HTTP 502 (Bad Gateway) ke penampil ketika kedua hal berikut ini benar:
-
Nilai dari
statusadalah 204 (Tidak Ada Konten) -
Jawaban mencakup nilai untuk
body
Ini karena Lambda@Edge mengenakan pembatasan opsional yang ditemukan dalam RFC 2616, yang menyatakan bahwa
HTTP 204respons tidak harus berisi isi pesan. -
Pembatasan Ukuran Respon yang Dihasilkan-
Ukuran maksimum respons yang dihasilkan oleh fungsi Lambda tergantung pada peristiwa yang memicu fungsi:
-
Peristiwa permintaan penampil – 40 KB
-
Acara permintaan asal – 1 MB
Jika respons lebih besar dari ukuran yang diizinkan, CloudFront mengembalikan kode status HTTP 502 (Bad Gateway) ke penampil.
-
Bidang wajib
status bidang wajib diisi.
Semua kolom lain bersifat opsional.
Perbarui tanggapan HTTP dalam pemicu respons asal
Saat CloudFront menerima respons HTTP dari server asal, jika ada pemicu respon asal yang terkait dengan perilaku cache, Anda dapat memodifikasi respons HTTP untuk mengganti apa yang dikembalikan dari asal.
Beberapa skenario umum untuk memperbarui respons HTTP mencakup hal berikut:
-
Mengubah status untuk mengatur kode status HTTP 200 dan membuat konten tubuh statis untuk kembali ke penampil ketika asal mengembalikan kode status kesalahan (4xx atau 5xx). Untuk kode sampel, lihat Contoh: Gunakan pemicu respons asal untuk memperbarui kode status kesalahan ke 200.
-
Mengubah status untuk mengatur kode status HTTP 301 atau HTTP 302, untuk mengarahkan pengguna ke situs web lain saat asal mengembalikan kode status kesalahan (4xx atau 5xx). Untuk kode sampel, lihat Contoh: Gunakan pemicu respons asal untuk memperbarui kode status kesalahan ke 302.
catatan
Fungsi harus mengembalikan nilai status antara 200 dan 599 (inklusif), jika tidak CloudFront mengembalikan kesalahan ke penampil.
Anda juga dapat mengganti respons HTTP di penampil dan peristiwa permintaan asal. Untuk informasi selengkapnya, lihat Hasilkan tanggapan HTTP dalam pemicu permintaan.
Saat Anda bekerja dengan respons HTTP, Lambda @Edge tidak mengekspos tubuh yang dikembalikan oleh server asal ke pemicu respon asal. Anda dapat membuat badan konten statis dengan mengaturnya ke nilai yang diinginkan, atau menghapus tubuh di dalam fungsi dengan mengatur nilai yang akan kosong. Jika Anda tidak memperbarui bidang tubuh dalam fungsi Anda, badan asli yang dikembalikan oleh server asal dikembalikan kembali ke penampil.
Akses badan permintaan dengan memilih opsi include body
Anda dapat memilih untuk menggunakan Lambda@Edge mengekspos tubuh dalam permintaan metode HTTP yang dapat ditulis (POST, PUT, DELETE, dan seterusnya), sehingga Anda dapat mengaksesnya dalam fungsi Lambda Anda. Anda dapat memilih akses baca-saja, atau Anda dapat menentukan bahwa Anda akan mengganti bodinya.
Untuk mengaktifkan opsi ini, pilih Sertakan Tubuh saat membuat CloudFront untuk fungsi Anda yang digunakan untuk permintaan pemirsa atau acara permintaan asal. Untuk informasi lebih lanjut, lihat Tambahkan pemicu untuk fungsi Lambda @Edge, atau untuk mempelajari penggunaan Sertakan Tubuh dengan fungsi Anda, lihat Struktur acara Lambda @Edge.
Skenario saat Anda mungkin ingin menggunakan fitur ini meliputi hal berikut:
-
Memproses formulir web, seperti formulir “hubungi kami”, tanpa mengirim data input pelanggan kembali ke server asal.
-
Mengumpulkan data beacon web yang dikirim oleh browser penampil dan memprosesnya di tepi.
Untuk kode sampel, lihat Lambda @Edge contoh fungsi.
catatan
Jika badan permintaan berukuran besar, Lambda@Edge akan memotongnya. Untuk informasi terperinci tentang ukuran dan pemotongan maksimum, lihat Pembatasan pada isi permintaan dengan opsi sertakan isi.