

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

# Streaming respons untuk fungsi Lambda
<a name="configuration-response-streaming"></a>

Fungsi Lambda dapat mengalirkan muatan respons secara native kembali ke klien melalui [fungsi Lambda URLs](urls-configuration.md) atau dengan menggunakan [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API (melalui AWS SDK atau panggilan API langsung). Fungsi Lambda Anda juga dapat mengalirkan muatan respons melalui [integrasi proxy Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/response-transfer-mode-lambda.html), yang menggunakan [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API untuk menjalankan fungsi Anda. Streaming respons dapat menguntungkan aplikasi sensitif latensi dengan meningkatkan kinerja time to first byte (TTFB). Ini karena Anda dapat mengirim sebagian tanggapan kembali ke klien saat tersedia. Selain itu, fungsi streaming respons dapat mengembalikan muatan hingga 200 MB, dibandingkan dengan maksimum 6 MB untuk respons buffer. Streaming respons juga berarti bahwa fungsi Anda tidak perlu sesuai dengan seluruh respons dalam memori. Untuk respons yang sangat besar, ini dapat mengurangi jumlah memori yang perlu Anda konfigurasikan untuk fungsi Anda. 

**catatan**  
Streaming respons Lambda belum tersedia di semua. Wilayah AWS Silakan merujuk ke [AWS Kemampuan Builder Center menurut Wilayah](https://builder.aws.com/build/capabilities) untuk ketersediaan fitur menurut Wilayah.

Kecepatan Lambda mengalirkan respons Anda tergantung pada ukuran respons. Rasio streaming untuk 6 MB pertama dari respons fungsi Anda tidak dibatasi. Untuk tanggapan yang lebih besar dari 6 MB, sisa respons tunduk pada batas bandwidth. Untuk informasi lebih lanjut tentang bandwidth streaming, lihat[Batas bandwidth untuk streaming respons](#config-rs-bandwidth-cap).

Respons streaming menimbulkan biaya dan tanggapan yang dialirkan tidak terganggu atau dihentikan ketika koneksi klien yang memanggil terputus. Pelanggan akan ditagih untuk durasi fungsi penuh, jadi pelanggan harus berhati-hati saat mengonfigurasi batas waktu fungsi yang lama.

Lambda mendukung streaming respons pada runtime terkelola Node.js. [Untuk bahasa lain, termasuk Python, Anda dapat [menggunakan runtime kustom dengan integrasi API Runtime kustom](runtimes-custom.md#runtimes-custom-response-streaming) untuk melakukan streaming respons atau menggunakan Adaptor Web Lambda.](https://github.com/awslabs/aws-lambda-web-adapter)

**catatan**  
Saat menguji fungsi Anda melalui konsol Lambda, Anda akan selalu melihat respons sebagai buffer.

**Topics**
+ [Batas bandwidth untuk streaming respons](#config-rs-bandwidth-cap)
+ [Kompatibilitas VPC dengan streaming respons](#config-rs-vpc-compatibility)
+ [Menulis fungsi Lambda yang mendukung streaming respons](config-rs-write-functions.md)
+ [Memanggil fungsi yang diaktifkan streaming respons menggunakan fungsi Lambda URLs](config-rs-invoke-furls.md)
+ [Tutorial: Membuat Fungsi Lambda Streaming Respons dengan URL Fungsi](response-streaming-tutorial.md)

## Batas bandwidth untuk streaming respons
<a name="config-rs-bandwidth-cap"></a>

6 MB pertama dari payload respons fungsi Anda memiliki bandwidth yang tidak dibatasi. Setelah ledakan awal ini, Lambda mengalirkan respons Anda dengan kecepatan maksimum 2. MBps Jika respons fungsi Anda tidak pernah melebihi 6 MB, maka batas bandwidth ini tidak pernah berlaku. 

**catatan**  
Batas bandwidth hanya berlaku untuk payload respons fungsi Anda, dan bukan untuk akses jaringan oleh fungsi Anda.

Tingkat bandwidth yang tidak dibatasi bervariasi tergantung pada sejumlah faktor, termasuk kecepatan pemrosesan fungsi Anda. Anda biasanya dapat mengharapkan tingkat yang lebih tinggi dari 2 MBps untuk 6 MB pertama dari respons fungsi Anda. Jika fungsi Anda mengalirkan respons ke tujuan di luar AWS, kecepatan streaming juga tergantung pada kecepatan koneksi internet eksternal. 

## Kompatibilitas VPC dengan streaming respons
<a name="config-rs-vpc-compatibility"></a>

Saat menggunakan fungsi Lambda di lingkungan VPC, ada pertimbangan penting untuk streaming respons:
+ Fungsi Lambda URLs tidak mendukung streaming respons dalam lingkungan VPC.
+ Anda dapat menggunakan streaming respons dalam VPC dengan menjalankan fungsi Lambda Anda melalui SDK menggunakan API. AWS `InvokeWithResponseStream` Ini memerlukan pengaturan titik akhir VPC yang sesuai untuk Lambda.
+ Untuk lingkungan VPC, Anda harus membuat titik akhir VPC antarmuka untuk Lambda untuk memungkinkan komunikasi antara sumber daya Anda di VPC dan layanan Lambda.

Arsitektur khas untuk streaming respons dalam VPC mungkin termasuk:

```
Client in VPC -> Interface VPC endpoint for Lambda -> Lambda function -> Response streaming back through the same path
```

# Menulis fungsi Lambda yang mendukung streaming respons
<a name="config-rs-write-functions"></a>

Menulis handler untuk fungsi streaming respons berbeda dari pola handler biasa. Saat menulis fungsi streaming, pastikan untuk melakukan hal berikut:
+ Bungkus fungsi Anda dengan `awslambda.streamifyResponse()` dekorator. Objek `awslambda` global disediakan oleh lingkungan runtime Node.js Lambda.
+ Akhiri aliran dengan anggun untuk memastikan bahwa semua pemrosesan data selesai.

## Mengkonfigurasi fungsi handler untuk mengalirkan respons
<a name="config-rs-write-functions-handler"></a>

Untuk menunjukkan ke runtime bahwa Lambda harus mengalirkan respons fungsi Anda, Anda harus membungkus fungsi Anda dengan `streamifyResponse()` dekorator. Ini memberi tahu runtime untuk menggunakan jalur logika yang tepat untuk respons streaming dan memungkinkan fungsi untuk mengalirkan respons.

`streamifyResponse()`Dekorator menerima fungsi yang menerima parameter berikut:
+ `event`— Memberikan informasi tentang peristiwa pemanggilan URL fungsi, seperti metode HTTP, parameter kueri, dan badan permintaan.
+ `responseStream`— Menyediakan aliran yang dapat ditulis.
+ `context`Menyediakan metode dan properti dengan informasi tentang pemanggilan, fungsi, dan lingkungan eksekusi.

`responseStream`Objeknya adalah [Node.js `writableStream`](https://nodesource.com/blog/understanding-streams-in-nodejs/). Seperti halnya aliran seperti itu, Anda harus menggunakan `pipeline()` metode ini.

**catatan**  
Objek `awslambda` global secara otomatis disediakan oleh runtime Node.js Lambda dan tidak diperlukan impor.

**Example handler yang mendukung streaming respons**  

```
import { pipeline } from 'node:stream/promises';
import { Readable } from 'node:stream';

export const echo = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  // As an example, convert event to a readable stream.
  const requestStream = Readable.from(Buffer.from(JSON.stringify(event)));

  await pipeline(requestStream, responseStream);
});
```

Meskipun `responseStream` menawarkan `write()` metode untuk menulis ke aliran, kami sarankan Anda menggunakannya [https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback](https://nodejs.org/api/stream.html#streampipelinesource-transforms-destination-callback)sedapat mungkin. Menggunakan `pipeline()` memastikan bahwa aliran yang dapat ditulis tidak kewalahan oleh aliran yang dapat dibaca lebih cepat.

## Mengakhiri aliran
<a name="config-rs-write-functions-end"></a>

Pastikan Anda mengakhiri aliran dengan benar sebelum handler kembali. `pipeline()`Metode ini menangani ini secara otomatis.

Untuk kasus penggunaan lainnya, panggil `responseStream.end()` metode untuk mengakhiri aliran dengan benar. Metode ini menandakan bahwa tidak ada lagi data yang harus ditulis ke aliran. Metode ini tidak diperlukan jika Anda menulis ke aliran dengan `pipeline()` atau`pipe()`.

Dimulai dengan Node.js 24, Lambda tidak lagi menunggu janji yang belum terselesaikan selesai setelah handler Anda kembali atau aliran respons berakhir. Jika fungsi Anda bergantung pada operasi asinkron tambahan, seperti pengatur waktu atau pengambilan, Anda harus `await` menggunakannya di handler Anda.

**Example Contoh mengakhiri aliran dengan pipeline ()**  

```
import { pipeline } from 'node:stream/promises';

export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  await pipeline(requestStream, responseStream);
});
```

**Example Contoh mengakhiri aliran tanpa pipeline ()**  

```
export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => {
  responseStream.write("Hello ");
  responseStream.write("world ");
  responseStream.write("from ");
  responseStream.write("Lambda!");
  responseStream.end();
});
```

# Memanggil fungsi yang diaktifkan streaming respons menggunakan fungsi Lambda URLs
<a name="config-rs-invoke-furls"></a>

**catatan**  
Fungsi Lambda Anda sekarang dapat mengalirkan muatan respons melalui integrasi proxy [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/response-transfer-mode-lambda.html).

Anda dapat memanggil fungsi yang diaktifkan streaming respons dengan mengubah mode pemanggilan URL fungsi Anda. Mode pemanggilan menentukan operasi API mana yang digunakan Lambda untuk menjalankan fungsi Anda. Mode pemanggilan yang tersedia adalah:
+ `BUFFERED`— Ini adalah opsi default. Lambda memanggil fungsi Anda menggunakan operasi API. `Invoke` Hasil pemanggilan tersedia saat muatan selesai. Ukuran muatan maksimum adalah 6 MB.
+ `RESPONSE_STREAM`— Memungkinkan fungsi Anda untuk mengalirkan hasil payload saat tersedia. Lambda memanggil fungsi Anda menggunakan operasi API. `InvokeWithResponseStream` Ukuran payload respons maksimum adalah 200 MB.

Anda masih dapat menjalankan fungsi Anda tanpa streaming respons dengan langsung memanggil operasi `Invoke` API. Namun, Lambda mengalirkan semua muatan respons untuk pemanggilan yang datang melalui URL fungsi hingga Anda mengubah mode pemanggilan menjadi. `BUFFERED`

------
#### [ Console ]

**Untuk mengatur mode pemanggilan URL fungsi (konsol)**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih nama fungsi yang ingin Anda atur untuk mode pemanggilan.

1. Pilih tab **Konfigurasi**, lalu pilih **URL Fungsi**.

1. Pilih **Edit**, lalu pilih **Pengaturan tambahan**.

1. Di bawah **mode Panggilan, pilih mode** pemanggilan yang Anda inginkan.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

**Untuk mengatur mode pemanggilan URL ()AWS CLI fungsi**

```
aws lambda update-function-url-config \
  --function-name my-function \
  --invoke-mode RESPONSE_STREAM
```

------
#### [ CloudFormation ]

**Untuk mengatur mode pemanggilan URL ()CloudFormation fungsi**

```
MyFunctionUrl:
  Type: AWS::Lambda::Url
  Properties:
    AuthType: AWS_IAM
    InvokeMode: RESPONSE_STREAM
```

------

Untuk informasi selengkapnya tentang mengonfigurasi fungsi URLs, lihat Fungsi [ URLsLambda](urls-configuration.md).

# Tutorial: Membuat Fungsi Lambda Streaming Respons dengan URL Fungsi
<a name="response-streaming-tutorial"></a>

Dalam tutorial ini, Anda membuat fungsi Lambda didefinisikan sebagai arsip file.zip dengan titik akhir URL fungsi yang mengembalikan aliran respons. Untuk informasi selengkapnya tentang mengonfigurasi fungsi URLs, lihat[Fungsi URLs](urls-configuration.md).

## Prasyarat
<a name="response-streaming-prepare"></a>

Tutorial ini mengasumsikan bahwa Anda memiliki pengetahuan tentang operasi Lambda dan konsol Lambda dasar. Jika belum, ikuti petunjuk di [Membuat fungsi Lambda dengan konsol](getting-started.md#getting-started-create-function) untuk membuat fungsi Lambda pertama Anda.

Untuk menyelesaikan langkah-langkah berikut, Anda memerlukan [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). Perintah dan output yang diharapkan dicantumkan dalam blok terpisah:

```
aws --version
```

Anda akan melihat output berikut:

```
aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2
```

Untuk perintah panjang, karakter escape (`\`) digunakan untuk memisahkan perintah menjadi beberapa baris.

Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.

**catatan**  
Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (`zip`seperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, [instal Windows Subsystem untuk](https://docs.microsoft.com/en-us/windows/wsl/install-win10) Linux. Contoh perintah CLI dalam panduan ini menggunakan pemformatan Linux. Perintah yang menyertakan dokumen JSON sebaris harus diformat ulang jika Anda menggunakan CLI Windows. 

## Membuat peran eksekusi
<a name="response-streaming-create-iam-role"></a>

Buat [peran eksekusi](lambda-intro-execution-role.md) yang memberikan izin kepada fungsi Lambda Anda untuk mengakses sumber daya AWS .

**Untuk membuat peran eksekusi**

1. Buka [halaman](https://console.aws.amazon.com/iam/home#/roles) Peran konsol AWS Identity and Access Management (IAM).

1. Pilih **Buat peran**.

1. Buat peran dengan properti berikut:
   + **Jenis entitas tepercaya** - **AWS layanan**
   + **Kasus penggunaan** - **Lambda**
   + **Izin** – **AWSLambdaBasicExecutionRole**
   + **Nama peran** – **response-streaming-role**

**AWSLambdaBasicExecutionRole**Kebijakan ini memiliki izin yang diperlukan fungsi untuk menulis log ke Amazon CloudWatch Logs. Setelah Anda membuat peran, catat Nama Sumber Daya Amazon (ARN). Anda akan membutuhkannya di langkah berikutnya.

## Buat fungsi streaming respons (AWS CLI)
<a name="response-streaming-tutorial-create-function-cli"></a>

Buat respons streaming fungsi Lambda dengan titik akhir URL fungsi menggunakan (). AWS Command Line Interface AWS CLI

**Untuk membuat fungsi yang dapat mengalirkan respons**

1. Salin contoh kode berikut ke file bernama `index.js`. Fungsi ini mengalirkan tiga respons, dipisahkan oleh 1 detik.

   ```
   exports.handler = awslambda.streamifyResponse(
   	async (event, responseStream, _context) => {
   		// Metadata is a JSON serializable JS object. Its shape is not defined here.
   		const metadata = {
   		statusCode: 200,
   		headers: {
   			"Content-Type": "application/json",
   			"CustomHeader": "outerspace"
   		}
   		};
   	
   		// Assign to the responseStream parameter to prevent accidental reuse of the non-wrapped stream.
   		responseStream = awslambda.HttpResponseStream.from(responseStream, metadata);
   	
   		responseStream.write("Streaming with Helper \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.write("Hello 0 \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.write("Hello 1 \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.write("Hello 2 \n");
   		await new Promise(r => setTimeout(r, 1000));
   		responseStream.end();
   		await responseStream.finished();
   	}
     );
   ```

1. Buat paket deployment.

   ```
   zip function.zip index.js
   ```

1. Buat fungsi Lambda dengan perintah `create-function`. Ganti nilai `--role` dengan peran ARN dari langkah sebelumnya. Perintah ini menetapkan batas waktu fungsi menjadi 10 detik, yang memungkinkan fungsi untuk mengalirkan tiga respons.

   ```
   aws lambda create-function \
     --function-name my-streaming-function \
     --runtime nodejs24.x \
     --zip-file fileb://function.zip \
     --handler index.handler \
     --timeout 10 \
     --role arn:aws:iam::123456789012:role/response-streaming-role
   ```

**Untuk membuat URL fungsi**

1. Tambahkan kebijakan berbasis sumber daya ke fungsi Anda yang memberikan dan izin. `lambda:InvokeFunctionUrl` `lambda:InvokeFunction` Setiap pernyataan harus ditambahkan dalam perintah terpisah. Ganti nilai `--principal` dengan Akun AWS ID Anda.

   ```
   aws lambda add-permission \
     --function-name my-streaming-function \
     --action lambda:InvokeFunctionUrl \
     --statement-id UrlPolicyInvokeURL \
     --principal 123456789012 \
     --function-url-auth-type AWS_IAM
   ```

   ```
   aws lambda add-permission \
       --function-name my-streaming-function \
       --action lambda:InvokeFunction \
       --statement-id UrlPolicyInvokeFunction \
       --principal 123456789012
   ```

1. Buat titik akhir URL untuk fungsi dengan `create-function-url-config` perintah.

   ```
   aws lambda create-function-url-config \
     --function-name my-streaming-function \
     --auth-type AWS_IAM \
     --invoke-mode RESPONSE_STREAM
   ```
**catatan**  
Jika Anda mendapatkan kesalahan`--invoke-mode`, Anda mungkin perlu memutakhirkan ke [versi yang lebih baru](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). AWS CLI

## Uji titik akhir URL fungsi
<a name="response-streaming-tutorial-test"></a>

Uji integrasi Anda dengan menjalankan fungsi Anda. Anda dapat membuka URL fungsi Anda di browser, atau Anda dapat menggunakan curl.

```
curl --request GET "https://abcdefghijklm7nop7qrs740abcd.lambda-url.us-east-1.on.aws/" --user "AKIAIOSFODNN7EXAMPLE" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer
```

URL fungsi kami menggunakan jenis `IAM_AUTH` otentikasi. Ini berarti Anda perlu menandatangani permintaan dengan [kunci AWS akses dan kunci rahasia](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) Anda. Pada perintah sebelumnya, ganti `AKIAIOSFODNN7EXAMPLE` dengan ID kunci AWS akses. Masukkan kunci AWS rahasia Anda saat diminta. Jika Anda tidak memiliki kunci AWS rahasia Anda, Anda dapat [menggunakan AWS kredenal sementara](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) sebagai gantinya.

Anda akan melihat tanggapan seperti ini:

```
Streaming with Helper 
Hello 0 
Hello 1
Hello 2
```

## Bersihkan sumber daya Anda
<a name="cleanup"></a>

Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.

**Untuk menghapus peran eksekusi**

1. Buka [halaman Peran](https://console.aws.amazon.com/iam/home#/roles) dari konsol IAM.

1. Pilih peran eksekusi yang Anda buat.

1. Pilih **Hapus**.

1. Masukkan nama peran di bidang input teks dan pilih **Hapus**.

**Untuk menghapus fungsi Lambda**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi yang Anda buat.

1. Pilih **Tindakan**, **Hapus**.

1. Ketik **confirm** kolom input teks dan pilih **Hapus**.