

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

# 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**.