

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

# Streaming respons integrasi untuk integrasi proxy Anda di API Gateway
<a name="response-transfer-mode"></a>

Anda dapat mengonfigurasi integrasi proksi untuk mengontrol cara API Gateway menghasilkan respons integrasi Anda. Secara default, API Gateway menunggu untuk menerima respons lengkap sebelum memulai transmisi. Namun, jika Anda menyetel mode transfer respons integrasi ke`STREAM`, API Gateway tidak menunggu respons dihitung sepenuhnya sebelum mengirimkannya ke klien. Aliran respons berfungsi untuk semua jenis titik akhir API REST.

Gunakan streaming respons untuk kasus penggunaan berikut:
+ Turunkan time-to-first-byte (TTFB) untuk aplikasi AI generatif seperti chatbots.
+ Streaming file gambar, video, atau musik besar tanpa menggunakan URL S3 yang telah ditandatangani sebelumnya.
+ Lakukan operasi yang berjalan lama sambil melaporkan kemajuan tambahan seperti peristiwa terkirim server (SSE).
+ Melebihi batas muatan respons 10 MB API Gateway.
+ Melebihi batas waktu tunggu 29 detik API Gateway tanpa meminta peningkatan batas batas waktu integrasi.
+ Menerima payload biner tanpa mengkonfigurasi jenis media biner.

## Pertimbangan untuk streaming payload respons
<a name="response-transfer-mode-considerations"></a>

Pertimbangan berikut dapat memengaruhi penggunaan streaming payload respons Anda:
+ Anda hanya dapat menggunakan streaming payload respons untuk `HTTP_PROXY` atau jenis `AWS_PROXY` integrasi. Ini termasuk integrasi proxy Lambda dan integrasi pribadi yang menggunakan integrasi. `HTTP_PROXY`
+ Pengaturan mode transfer default adalah`BUFFERED`. Untuk menggunakan streaming respons, Anda harus mengubah mode transfer respons ke`STREAM`.
+ Streaming respons hanya didukung untuk REST APIs.
+ Permintaan streaming tidak didukung.
+ Anda dapat melakukan streaming respons Anda hingga 15 menit.
+ Streaming Anda tunduk pada batas waktu idle. Untuk titik akhir Regional atau pribadi, batas waktu adalah 5 menit. Untuk titik akhir yang dioptimalkan tepi, batas waktu adalah 30 detik.
+ Jika Anda menggunakan streaming respons untuk REST API Regional dengan CloudFront distribusi Anda sendiri, Anda dapat mencapai waktu idle lebih dari 30 detik dengan meningkatkan batas waktu respons distribusi Anda CloudFront. Untuk informasi selengkapnya, lihat [Batas waktu respons.](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout)
+ Saat mode transfer respons disetel ke`STREAM`, API Gateway tidak dapat mendukung fitur yang memerlukan buffering seluruh respons integrasi. Karena itu, fitur berikut tidak didukung dengan streaming respons:
  + Caching titik akhir
  + Pengkodean konten. Jika Anda ingin mengompres respons integrasi Anda, lakukan ini dalam integrasi Anda.
  + Transformasi respons dengan VTL
+ Dalam setiap respons streaming, muatan respons 10MB pertama tidak tunduk pada batasan bandwidth apa pun. Data payload respons melebihi 10MB dibatasi hingga 2MB/s.
+ Ketika koneksi antara klien dan API Gateway atau antara API Gateway dan Lambda ditutup karena batas waktu, fungsi Lambda mungkin terus dijalankan. Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Streaming respons menimbulkan biaya. Untuk informasi selengkapnya, lihat [Harga API Gateway](https://aws.amazon.com/api-gateway/pricing/).

# Siapkan integrasi proxy HTTP dengan streaming respons payload di API Gateway
<a name="response-streaming-http"></a>

Saat mengatur streaming payload respons, Anda menentukan mode transfer respons dalam permintaan integrasi metode Anda. Anda mengonfigurasi setelan ini dalam permintaan integrasi untuk mengontrol perilaku API Gateway sebelum dan selama respons integrasi. Saat Anda menggunakan streaming respons, Anda dapat mengonfigurasi batas waktu integrasi hingga 15 menit.

Saat Anda menggunakan streaming respons payload dengan `HTTP_PROXY` integrasi, API Gateway tidak akan mengirim kode status respons HTTP atau header respons HTTP apa pun hingga sepenuhnya menerima semua header.

## Buat integrasi proxy HTTP dengan streaming respons payload
<a name="response-streaming-http-create"></a>

Prosedur berikut menunjukkan cara mengimpor API baru dengan `responseTransferMode` set ke`STREAM`. Jika Anda memiliki API integrasi yang ada dan ingin memodifikasinya`responseTransferMode`, lihat[Perbarui mode transfer respons untuk integrasi proxy HTTP](#response-streaming-http-update).

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat integrasi proxy HTTP dengan streaming respons payload**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih REST API.

1. Pilih **Buat sumber daya**.

1. Untuk **Nama sumber daya**, masukkan **streaming**.

1. Pilih **Buat sumber daya**.

1. Dengan sumber daya **/streaming** yang dipilih, pilih **Create method**.

1. Untuk **jenis Metode**, pilih **APAPUN**.

1. Untuk **jenis Integrasi**, pilih **HTTP**.

1. Pilih **integrasi proxy HTTP**.

1. Untuk **mode transfer Respons**, pilih **Streaming**.

1. Untuk **metode HTTP**, pilih metode.

1. Untuk **URL Endpoint**, masukkan titik akhir integrasi. Pastikan Anda memilih titik akhir yang menghasilkan muatan besar untuk dialirkan kembali kepada Anda.

1. Pilih **metode Buat**.

Setelah Anda membuat metode, terapkan API Anda.

**Untuk men-deploy API Anda**

1. Pilih **Deploy API**.

1. Untuk **Stage**, pilih **New stage**.

1. Untuk **nama Panggung**, masukkan**prod**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Pilih **Deploy**.

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

**Untuk membuat API baru dengan streaming respons payload**

1. Salin file Open API berikut, lalu simpan sebagai`ResponseStreamDemoSwagger.yaml`. Dalam file ini, `responseTransferMode` diatur ke`STREAM`. Titik akhir integrasi diatur ke`https://example.com`, tetapi kami menyarankan Anda memodifikasinya ke titik akhir yang menghasilkan muatan besar untuk dialirkan kembali kepada Anda.

   ```
   openapi: "3.0.1"
   info:
     title: "ResponseStreamingDemo"
     version: "2025-04-28T17:28:25Z"
   servers:
   - url: "{basePath}"
     variables:
       basePath:
         default: "prod"
   paths:
     /streaming:
       get:
         x-amazon-apigateway-integration:
           httpMethod: "GET"
           uri: "https://example.com"
           type: "http_proxy"
           timeoutInMillis: 900000
           responseTransferMode: "STREAM"
   ```

1. Gunakan `import-rest-api` perintah berikut untuk mengimpor definisi OpenAPI Anda:

   ```
   aws apigateway import-rest-api \
     --body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
     --parameters endpointConfigurationTypes=REGIONAL \
     --region us-west-1
   ```

1. Gunakan `create-deployment` perintah berikut untuk menerapkan API baru Anda ke panggung:

   ```
   aws apigateway create-deployment \
     --rest-api-id a1b2c3 \
     --stage-name prod \
     --region us-west-1
   ```

------

## Perbarui mode transfer respons untuk integrasi proxy HTTP
<a name="response-streaming-http-update"></a>

Prosedur berikut menunjukkan cara memperbarui mode transfer respons untuk integrasi proxy HTTP.

------
#### [ Konsol Manajemen AWS ]

**Untuk memperbarui mode transfer respons untuk integrasi proxy HTTP**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih REST API.

1. Pilih metode.

1. Pada tab **Permintaan integrasi**, di bawah **Pengaturan permintaan integrasi**, pilih **Edit**.

1. Untuk **mode transfer Respons**, pilih **Streaming**.

1. Pilih **Simpan**.

Setelah memperbarui metode, terapkan API Anda.

**Untuk men-deploy API Anda**

1. Pilih **Deploy API**.

1. Untuk **Stage**, pilih **New stage**.

1. Untuk **nama Panggung**, masukkan**prod**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Pilih **Deploy**.

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

`update-integration`Perintah berikut memperbarui mode transfer integrasi dari `BUFFERED` ke`STREAM`. Untuk yang ada APIs, mode transfer respons untuk semua integrasi diatur ke`BUFFERED`.

```
aws apigateway update-integration \
 --rest-api-id a1b2c3 \
 --resource-id aaa111 \
 --http-method GET \
 --patch-operations "op='replace',path='/responseTransferMode',value=STREAM" \
 --region us-west-1
```

Anda perlu menerapkan ulang API agar perubahan diterapkan. Jika Anda menyesuaikan batas waktu integrasi, nilai batas waktu ini akan dihapus, karena API Gateway mengalirkan respons Anda hingga 5 menit.

`update-integration`Perintah berikut memperbarui mode transfer integrasi dari `STREAM` ke`BUFFERED`:

```
aws apigateway update-integration \
 --rest-api-id a1b2c3 \
 --resource-id aaa111 \
 --http-method GET \
 --patch-operations "op='replace',path='/responseTransferMode',value=BUFFERED" \
 --region us-west-1
```

Anda perlu menerapkan ulang API agar perubahan diterapkan.

------

# Siapkan integrasi proxy Lambda dengan streaming respons payload di API Gateway
<a name="response-transfer-mode-lambda"></a>

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 [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)Lambda 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](#response-transfer-mode-lambda-format) yang diperlukan oleh API Gateway.

## Perbedaan integrasi proxy Lambda antara mode transfer respons streaming dan buffer
<a name="response-transfer-mode-lambda-comparison"></a>

Daftar berikut menjelaskan perbedaan antara integrasi proxy Lambda dan integrasi proxy Lambda untuk streaming respons:
+ API Gateway menggunakan [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API 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
<a name="response-transfer-mode-lambda-format"></a>

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](set-up-lambda-proxy-integrations.md#api-gateway-simple-proxy-for-lambda-input-format). 

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:
+ `statusCode`Tombol `headers``multiValueHeaders`,`cookies`, dan dapat tidak ditentukan jika tidak ada header respons tambahan yang akan dikembalikan.
+ `headers`Kuncinya hanya dapat berisi header nilai tunggal.
+ Output mengharapkan header berisi salah satu atau`Transfer-Encoding: chunked`. `Content-length: number` Jika fungsi Anda tidak mengembalikan salah satu header ini, API Gateway akan ditambahkan `Transfer-Encoding: chunked` ke header respons.
+ `multiValueHeaders`Kuncinya 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` dan`multiValueHeaders`, 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. Hanya`headers`,`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](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Ya. API Gateway mengalirkan respons Anda.  | 
|  Streaming  |  Tidak  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Tidak. API Gateway memanggil fungsi Lambda Anda dan mengembalikan respons kesalahan 500.  | 
|  Streaming  |  Ya  |   [Memohon](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.  | 
|  Streaming  |  Tidak  |   [Memohon](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.  | 
|  Buffer  |  Ya  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.  | 
|  Buffer  |  Tidak  |   [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)  |  Tidak. API Gateway tidak mendukung konfigurasi integrasi ini.  | 
|  Buffer  |  Ya  |   [Memohon](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  API Gateway mengembalikan header HTTP dan kode status tetapi bukan badan respons.  | 
|  Buffer  |  Tidak  |   [Memohon](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Ya. Ini adalah integrasi proxy Lambda. Untuk informasi selengkapnya, lihat Integrasi [proxy Lambda](set-up-lambda-proxy-integrations.md).  | 

# Konfigurasikan integrasi proxy Lambda dengan streaming respons payload di API Gateway
<a name="response-streaming-lambda-configure"></a>

Saat mengatur streaming payload respons, Anda menentukan mode transfer dalam permintaan integrasi sumber daya Anda. Anda mengonfigurasi setelan ini dalam permintaan integrasi untuk mengontrol perilaku API Gateway sebelum dan selama respons integrasi.

## Contoh fungsi Lambda untuk streaming respons
<a name="response-streaming-lambda-example"></a>

Fungsi Lambda Anda harus mematuhi. [Format integrasi proxy Lambda untuk streaming respons](response-transfer-mode-lambda.md#response-transfer-mode-lambda-format) Kami menyarankan Anda menggunakan salah satu dari tiga contoh fungsi Lambda untuk menguji streaming respons. Saat Anda membuat fungsi Lambda, pastikan untuk melakukan hal berikut:
+ Berikan batas waktu yang memadai untuk fungsi Anda. Kami menyarankan Anda mengonfigurasi batas waktu minimal 1 menit untuk mempelajari tentang streaming respons. Saat Anda membuat sumber daya produksi, pastikan batas waktu fungsi Lambda Anda mencakup siklus permintaan penuh. Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).
+ Gunakan runtime Node.js terbaru.
+ Gunakan Wilayah tempat streaming respons Lambda tersedia.

------
#### [ Using HttpResponseStream.from ]

Contoh kode berikut mengalirkan objek metadata JSON dan muatan kembali ke klien menggunakan `awslambda.HttpResponseStream()` metode tanpa menggunakan metode pipeline. Anda tidak perlu membuat pembatas. Untuk informasi selengkapnya, lihat [Menulis fungsi Lambda yang mendukung streaming respons](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

```
export const handler = awslambda.streamifyResponse(
  async (event, responseStream, context) => {
    const httpResponseMetadata = {
      "statusCode": 200,
      "headers": {
        "x-foo": "bar"
      },
      "multiValueHeaders": {
        "x-mv1": ["hello", "world"],
        "Set-Cookie": ["c1=blue", "c2=red"]
      }
    };

    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);
    await new Promise(r => setTimeout(r, 1000)); // synthetic delay

    responseStream.write("First payload ");
    await new Promise(r => setTimeout(r, 1000)); // synthetic delay

    responseStream.write("Final payload");
    responseStream.end();
});
```

------
#### [ Using the pipeline method ]

Lambda merekomendasikan bahwa ketika Anda menulis fungsi yang mendukung streaming respons, Anda menggunakan `awslambda.streamifyResponse()` dekorator yang disediakan runtime Node.js asli, dan metodenya. `pipeline()` Saat Anda menggunakan metode pipeline, Anda tidak perlu membuat pembatas, Lambda melakukan ini untuk Anda. Untuk informasi selengkapnya, lihat [Menulis fungsi Lambda yang mendukung streaming respons](https://docs.aws.amazon.com/lambda/latest/dg/config-rs-write-functions.html).

Contoh kode berikut mengalirkan objek metadata JSON dan tiga muatan kembali ke klien.

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

export const handler = awslambda.streamifyResponse(
  async (event, responseStream, context) => {
    const httpResponseMetadata = {
      statusCode: 200,
      headers: {
        "Content-Type": "text/plain",
        "X-Custom-Header": "Example-Custom-Header"
      }
    };

    responseStream = awslambda.HttpResponseStream.from(responseStream, httpResponseMetadata);

    const dataStream = Readable.from(async function* () {
      yield "FIRST payload\n";
      await new Promise(r => setTimeout(r, 1000));
      yield "SECOND payload\n";
      await new Promise(r => setTimeout(r, 1000));
      yield "THIRD payload\n";
      await new Promise(r => setTimeout(r, 1000));
    }());

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

------
#### [ Without using the pipeline method ]

Contoh kode berikut mengalirkan objek metadata JSON dan tiga muatan kembali ke klien tanpa menggunakan metode ini. `awslambda.HttpResponseStream()` Tanpa `awslambda.HttpResponseStream()` metode ini, Anda harus menyertakan pembatas 8 byte nol antara metadata dan muatan. 

```
export const handler = awslambda.streamifyResponse(async (event, response, ctx) => {
  response.write('{"statusCode": 200, "headers": {"hdr-x": "val-x"}}');
  response.write("\x00".repeat(8)); // DELIMITER
  await new Promise(r => setTimeout(r, 1000));

  response.write("FIRST payload");
  await new Promise(r => setTimeout(r, 1000));

  response.write("SECOND payload");
  await new Promise(r => setTimeout(r, 1000));

  response.write("FINAL payload");
  response.end();
});
```

------

## Buat integrasi proxy Lambda dengan streaming respons payload
<a name="response-streaming-lambda-create"></a>

Prosedur berikut menunjukkan cara membuat integrasi proxy Lambda dengan streaming respons payload. Gunakan contoh fungsi Lambda atau buat sendiri.

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat integrasi proxy Lambda dengan streaming respons payload**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih REST API.

1. Pilih **Buat sumber daya**.

1. Untuk **Nama sumber daya**, masukkan **streaming**.

1. Pilih **Buat sumber daya**.

1. Dengan sumber daya **/streaming** yang dipilih, pilih **Create method**.

1. Untuk **jenis Metode**, pilih **APAPUN**.

1. Untuk **jenis Integrasi**, pilih **Lambda**.

1. Pilih integrasi **proxy Lambda**.

1. Untuk **mode transfer Respons**, pilih **Streaming**.

1. Untuk fungsi **Lambda, pilih nama fungsi** Lambda Anda.

   Konsol API Gateway secara otomatis menggunakan [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/api/API_InvokeWithResponseStream.html)API untuk menjalankan fungsi Lambda. Anda bertanggung jawab untuk menulis fungsi Lambda yang mendukung streaming respons. Sebagai contoh, lihat [Contoh fungsi Lambda untuk streaming respons](#response-streaming-lambda-example).

1. Pilih **metode Buat**.

Setelah Anda membuat metode, terapkan API Anda.

**Untuk men-deploy API Anda**

1. Pilih **Deploy API**.

1. Untuk **Stage**, pilih **New stage**.

1. Untuk **nama Panggung**, masukkan**prod**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Pilih **Deploy**.

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

Prosedur berikut menunjukkan cara mengimpor API baru dengan `responseTransferMode` set ke`STREAM`. Jika Anda memiliki API integrasi yang ada dan ingin memodifikasinya`responseTransferMode`, lihat[Perbarui mode transfer respons untuk integrasi proxy Lambda](#response-streaming-lambda-update).

**Untuk membuat API baru dengan streaming respons payload**

1. Salin file Open API berikut, lalu simpan sebagai file`ResponseStreamDemoSwagger.yaml`. Dalam file ini, `responseTransferMode` diatur ke`STREAM`, dan URI integrasi diatur ke`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`.

   Ganti nama fungsi dari `my-function` dengan fungsi berkemampuan streaming dan ganti kredensialnya dengan peran IAM yang memiliki kebijakan yang memungkinkan layanan `apigateway` memanggil fungsi Lambda.

   ```
   openapi: "3.0.1"
   info:
     title: "ResponseStreamingDemo"
     version: "2025-04-28T17:28:25Z"
   servers:
   - url: "{basePath}"
     variables:
       basePath:
         default: "prod"
   paths:
     /lambda:
       get:
         x-amazon-apigateway-integration:
           httpMethod: "POST"
           uri: "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"
           type: "aws_proxy"
           timeoutInMillis: 90000
           responseTransferMode: "STREAM"
           credentials: "arn:aws:iam::111122223333:role/apigateway-lambda-role"
   ```

   Alih-alih menyediakan peran IAM untuk kredensyal, Anda dapat menggunakan perintah untuk Lambda `add-permission` untuk menambahkan izin berbasis sumber daya.

1. Gunakan `import-rest-api` perintah berikut untuk mengimpor definisi OpenAPI Anda:

   ```
   aws apigateway import-rest-api \
     --body 'fileb://~/ResponseStreamDemoSwagger.yaml' \
     --parameters endpointConfigurationTypes=REGIONAL \
     --region us-west-1
   ```

1. Gunakan `create-deployment` perintah berikut untuk menerapkan API baru Anda ke panggung:

   ```
   aws apigateway create-deployment \
     --rest-api-id a1b2c2 \
     --stage-name prod \
     --region us-west-1
   ```

------

### Perbarui mode transfer respons untuk integrasi proxy Lambda
<a name="response-streaming-lambda-update"></a>

Prosedur berikut menunjukkan cara memperbarui mode transfer respons untuk integrasi proxy Lambda. Saat Anda mengubah mode transfer respons ke streaming, perbarui fungsi Lambda Anda sehingga mematuhi persyaratan untuk streaming respons. Gunakan contoh fungsi Lambda atau buat sendiri.

------
#### [ Konsol Manajemen AWS ]

**Untuk memperbarui mode transfer respons untuk integrasi proxy Lambda**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih REST API.

1. Pilih metode.

1. Pada tab **Permintaan integrasi**, di bawah **Pengaturan permintaan integrasi**, pilih **Edit**.

1. Untuk **mode transfer Respons**, pilih **Streaming**.

1. Untuk fungsi **Lambda, pilih nama fungsi** Lambda Anda.

1. Pilih **Simpan**.

Setelah memperbarui metode, terapkan API Anda.

**Untuk men-deploy API Anda**

1. Pilih **Deploy API**.

1. Untuk **Stage**, pilih **New stage**.

1. Untuk **nama Panggung**, masukkan**prod**.

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi.

1. Pilih **Deploy**.

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

1. Perbarui fungsi Lambda Anda agar diaktifkan streaming.

1. Gunakan AWS CLI perintah berikut untuk memperbarui URI integrasi dan mode transfer respons integrasi Anda:

   ```
   aws apigateway update-integration \
    --rest-api-id a1b2c3 \
    --resource-id aaa111 \
    --http-method ANY \
    --patch-operations "[{\"op\":\"replace\",\"path\":\"/uri\",\"value\":\"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\"}, {\"op\":\"replace\",\"path\":\"/responseTransferMode\",\"value\":\"STREAM\"}]" \
    --region us-west-1
   ```

1. Menerapkan ulang API Anda agar perubahan diterapkan.

------

# Memecahkan masalah dengan streaming respons di API Gateway
<a name="response-streaming-troubleshoot"></a>

Panduan pemecahan masalah berikut dapat membantu menyelesaikan masalah dengan Anda APIs yang menggunakan streaming respons.

## Pemecahan masalah umum
<a name="response-streaming-general-troubleshooting"></a>

Anda dapat menggunakan tab pengujian [TestInvokeMethod](https://docs.aws.amazon.com/apigateway/latest/api/API_TestInvokeMethod.html)atau konsol untuk menguji respons streaming Anda. Pertimbangan berikut dapat memengaruhi penggunaan pemanggilan pengujian Anda untuk streaming respons:
+ Saat Anda menguji metode Anda, API Gateway menyangga payload respons yang dialirkan. Setelah salah satu kondisi berikut terpenuhi, API Gateway mengembalikan respons satu kali yang berisi muatan buffer:
  + Permintaan selesai
  + 35 detik telah berlalu
  + Lebih dari 1 MB payload respons telah di-buffer
+ Jika lebih dari 35 detik berlalu sebelum metode Anda mengembalikan status respons HTTP dan semua header, maka status respons yang dikembalikan adalah 0. TestInvokeMethod 
+ API Gateway tidak menghasilkan log eksekusi apa pun.

Setelah menerapkan API, Anda dapat menguji respons streaming dengan menggunakan perintah curl. Kami menyarankan Anda menggunakan `-i` opsi untuk menyertakan header respons protokol dalam output. Untuk melihat data respons saat tiba, gunakan opsi curl `--no-buffer`

## Memecahkan masalah kesalahan cURL
<a name="response-streaming-troubleshoot-curl-error"></a>

Jika Anda menguji integrasi dan Anda menerima kesalahan`curl: (18) transfer closed with outstanding read data remaining`, pastikan batas waktu integrasi Anda cukup lama. Jika Anda menggunakan fungsi Lambda, Anda perlu memperbarui batas waktu respons fungsi Lambda. Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-timeout.html).

## Memecahkan masalah menggunakan pencatatan akses
<a name="response-streaming-troubleshoot-access-logging"></a>

Anda dapat menggunakan log akses untuk tahap REST API untuk mencatat dan memecahkan masalah aliran respons Anda. Selain variabel yang ada, Anda dapat menggunakan variabel log akses berikut:

`$context.integration.responseTransferMode`  
Mode transfer respons integrasi Anda. Ini bisa salah satu `BUFFERED` atau`STREAMED`.

`$context.integration.timeToAllHeaders`  
Waktu antara saat API Gateway menetapkan koneksi integrasi saat menerima semua header respons integrasi dari klien.

`$context.integration.timeToFirstContent`  
Waktu antara saat API Gateway menetapkan koneksi integrasi saat menerima byte konten pertama.

`$context.integration.latency` atau `$context.integrationLatency`  
Waktu ketika API Gateway menetapkan koneksi integrasi saat aliran respons integrasi selesai.

Gambar berikut menunjukkan bagaimana variabel log akses ini mewakili komponen yang berbeda dari aliran respons.

![\[Akses variabel log untuk streaming respons di API Gateway\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/response-streaming-figure.png)


Untuk informasi selengkapnya tentang log akses, lihat [Siapkan CloudWatch logging untuk REST APIs di API Gateway](set-up-logging.md). Anda juga dapat menggunakan X-Ray untuk memantau aliran respons Anda. Lihat informasi yang lebih lengkap di [Lacak permintaan pengguna ke REST APIs menggunakan X-Ray di API Gateway](apigateway-xray.md).