Siapkan integrasi proxy Lambda dengan streaming respons payload di API Gateway - Amazon API Gateway

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Siapkan integrasi proxy Lambda dengan streaming respons payload di API Gateway

Anda dapat melakukan streaming respons fungsi Lambda untuk meningkatkan kinerja time to first byte (TTFB) dan mengirim sebagian tanggapan kembali ke klien saat tersedia. API Gateway mengharuskan Anda menggunakan API InvokeWithResponseStreamLambda untuk menjalankan fungsi Lambda Anda. API Gateway meneruskan objek peristiwa ke fungsi Lambda. Fungsi backend Lambda mem-parsing data permintaan yang masuk untuk menentukan respons yang dikembalikan. Agar API Gateway dapat melakukan streaming output Lambda, fungsi Lambda harus menampilkan format yang diperlukan oleh API Gateway.

Perbedaan integrasi proxy Lambda antara mode transfer respons streaming dan buffer

Daftar berikut menjelaskan perbedaan antara integrasi proxy Lambda dan integrasi proxy Lambda untuk streaming respons:

  • API Gateway menggunakan InvokeWithResponseStreamAPI untuk menjalankan integrasi proxy Lambda untuk streaming respons. Ini menghasilkan URI yang berbeda, yaitu sebagai berikut:

    arn:aws:apigateway:us-west-1:lambda:path/2021-11-15/functions/arn:aws:lambda:us-west-1:111122223333:function:my-function-name/response-streaming-invocations

    ARN ini menggunakan tanggal yang berbeda untuk versi API dan tindakan layanan yang berbeda dibandingkan dengan integrasi proxy Lambda.

    Jika Anda menggunakan konsol API Gateway untuk streaming respons, konsol menggunakan URI yang benar untuk Anda.

  • Dalam integrasi proxy Lambda, API Gateway mengirimkan respons ke klien hanya setelah menerima respons penuh dari Lambda. Dalam integrasi proxy Lambda untuk streaming respons, API Gateway memulai aliran muatan setelah menerima metadata dan pembatas yang valid dari Lambda.

  • Integrasi proxy Lambda untuk streaming respons menggunakan format input yang sama dengan integrasi proxy, tetapi memerlukan format output yang berbeda.

Format integrasi proxy Lambda untuk streaming respons

Saat API Gateway memanggil fungsi Lambda dengan streaming respons, format input sama dengan format input fungsi Lambda untuk integrasi proxy. Untuk informasi selengkapnya, lihat Format input fungsi Lambda untuk integrasi proxy.

Saat Lambda mengalirkan respons ke API Gateway, respons harus mematuhi format berikut. Format ini menggunakan pembatas untuk memisahkan metadata JSON dan muatan mentah. Dalam hal ini, data payload dialirkan saat ditransmisikan oleh fungsi Lambda streaming Anda:

{ "headers": {"headerName": "headerValue", ...}, "multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... }, "cookies" : ["cookie1", "cookie2"], "statusCode": httpStatusCode }<DELIMITER>PAYLOAD1 | PAYLOAD2 | PAYLOAD3

Dalam output:

  • statusCodeTombol headersmultiValueHeaders,cookies, dan dapat tidak ditentukan jika tidak ada header respons tambahan yang akan dikembalikan.

  • headersKuncinya hanya dapat berisi header nilai tunggal.

  • Output mengharapkan header berisi salah satu atauTransfer-Encoding: chunked. Content-length: number Jika fungsi Anda tidak mengembalikan salah satu header ini, API Gateway akan ditambahkan Transfer-Encoding: chunked ke header respons.

  • multiValueHeadersKuncinya dapat berisi header multi-nilai serta header nilai tunggal. Anda dapat menggunakan multiValueHeaders kunci untuk menentukan semua header tambahan Anda, termasuk yang bernilai tunggal.

  • Jika Anda menentukan nilai untuk keduanya headers danmultiValueHeaders, API Gateway menggabungkannya ke dalam satu daftar. Jika pasangan kunci-nilai yang sama ditentukan di keduanya, hanya nilai dari yang multiValueHeaders akan muncul dalam daftar gabungan.

  • Metadata harus JSON yang valid. Hanyaheaders,multiValueHeaders, cookies dan statusCode kuncinya didukung.

  • Anda harus memberikan pembatas setelah metadata JSON. Pembatas harus 8 byte nol dan harus muncul dalam 16KB pertama data aliran.

  • API Gateway tidak memerlukan format khusus untuk payload respons metode.

Jika Anda menggunakan URL fungsi untuk melakukan streaming fungsi Lambda Anda, Anda harus memodifikasi input dan output fungsi Lambda Anda untuk memenuhi persyaratan ini.

Jika output fungsi Lambda Anda tidak mematuhi persyaratan format ini, API Gateway mungkin masih menjalankan fungsi Lambda Anda. Tabel berikut menunjukkan kombinasi setelan permintaan integrasi API dan kode fungsi Lambda yang didukung oleh API Gateway. Ini termasuk kombinasi yang didukung untuk mode transfer respons buffer.

Mode transfer respons Kode fungsi mematuhi format yang diperlukan Lambda memanggil API Didukung oleh API Gateway

Streaming

Ya

InvokeWithResponseStream

Ya. API Gateway mengalirkan respons Anda.

Streaming

Tidak

InvokeWithResponseStream

Tidak. API Gateway memanggil fungsi Lambda Anda dan mengembalikan respons kesalahan 500.

Streaming

Ya

Memohon

Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.

Streaming

Tidak

Memohon

Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.

Buffer

Ya

InvokeWithResponseStream

Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.

Buffer

Tidak

InvokeWithResponseStream

Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.

Buffer

Ya

Memohon

API Gateway mengembalikan header HTTP dan kode status tetapi bukan badan respons.

Buffer

Tidak

Memohon

Ya. Ini adalah integrasi proxy Lambda. Untuk informasi selengkapnya, lihat Integrasi proxy Lambda.