

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Lambda Skalar UDFs
<a name="udf-creating-a-lambda-sql-udf"></a>

Amazon Redshift dapat menggunakan fungsi kustom yang didefinisikan AWS Lambda sebagai bagian dari kueri SQL. Anda dapat menulis skalar UDFs Lambda dalam bahasa pemrograman apa pun yang didukung oleh Lambda, seperti Java, Go,, Node.js, C \$1 PowerShell, Python, dan Ruby. Atau Anda dapat menggunakan runtime khusus.

[BUAT FUNGSI EKSTERNAL](r_CREATE_EXTERNAL_FUNCTION.md)Perintah membuat parameter berikut:
+ (Opsional) Daftar argumen dengan tipe data. 
+ Satu tipe data pengembalian.
+ Salah satu nama fungsi dari fungsi eksternal yang disebut oleh Amazon Redshift. 
+ Salah satu peran IAM yang diizinkan oleh cluster Amazon Redshift untuk diasumsikan dan dipanggil ke Lambda.
+ Satu nama fungsi Lambda yang dipanggil Lambda UDF.

Untuk informasi tentang MEMBUAT FUNGSI EKSTERNAL, lihat[BUAT FUNGSI EKSTERNAL](r_CREATE_EXTERNAL_FUNCTION.md).

Jenis data input dan pengembalian untuk Lambda UDFs dapat berupa salah satu dari jenis berikut:
+  SMALLINT 
+  INTEGER 
+  BIGINT 
+  DECIMAL 
+  REAL 
+  DOUBLE PRECISION 
+  CHAR 
+  VARCHAR 
+  BOOLEAN 
+  DATE 
+  TIMESTAMP 

Alias untuk jenis ini juga valid. Untuk daftar lengkap tipe data dan aliasnya, lihat[Jenis Data](c_Supported_data_types.md).

Amazon Redshift memastikan bahwa fungsi eksternal dapat mengirim dan menerima argumen dan hasil batch. 

Lambda UDFs didefinisikan dan dikelola di Lambda, dan Anda dapat mengontrol hak akses untuk memanggilnya di Amazon Redshift. UDFs Anda dapat memanggil beberapa fungsi Lambda dalam kueri yang sama atau menjalankan fungsi yang sama beberapa kali.

Gunakan Lambda UDFs dalam klausa pernyataan SQL di mana fungsi skalar didukung. Anda juga dapat menggunakan Lambda UDFs dalam pernyataan SQL seperti SELECT, UPDATE, INSERT, atau DELETE. 

**catatan**  
Menggunakan Lambda UDFs dapat dikenakan biaya tambahan dari layanan Lambda. Apakah itu tergantung pada faktor-faktor seperti jumlah permintaan Lambda (pemanggilan UDF) dan total durasi eksekusi program Lambda. Namun, tidak ada biaya tambahan untuk menggunakan Lambda UDFs di Amazon Redshift. [Untuk informasi tentang harga AWS Lambda, lihat AWS Lambda Harga.](https://aws.amazon.com/lambda/pricing)  
Jumlah permintaan Lambda bervariasi tergantung pada klausa pernyataan SQL tertentu di mana Lambda UDF digunakan. Misalnya, fungsi tersebut digunakan dalam klausa WHERE seperti berikut ini. ``  
`SELECT a, b FROM t1 WHERE lambda_multiply(a, b) = 64; SELECT a, b FROM t1 WHERE a*b = lambda_multiply(2, 32) `  
Dalam hal ini, Amazon Redshift memanggil pernyataan SELECT pertama untuk masing-masing dan memanggil pernyataan SELECT kedua hanya sekali.  
Namun, menggunakan UDF di bagian proyeksi kueri mungkin hanya memanggil fungsi Lambda sekali untuk setiap baris yang memenuhi syarat atau gabungan dalam kumpulan hasil. 

## Keamanan dan izin UDF
<a name="udf-lambda-security"></a>

Untuk membuat UDF Lambda, pastikan Anda memiliki izin untuk penggunaan pada BAHASA EXFUNC. Anda harus secara eksplisit memberikan PENGGUNAAN PADA BAHASA EXFUNC atau mencabut PENGGUNAAN PADA BAHASA EXFUNC kepada pengguna, grup, atau publik tertentu.

Contoh berikut memberikan penggunaan pada EXFUNC ke PUBLIK.

```
grant usage on language exfunc to PUBLIC; 
```

Contoh berikut mencabut penggunaan pada exfunc dari PUBLIC dan kemudian memberikan penggunaan ke grup pengguna lambda\$1udf\$1devs.

```
revoke usage on language exfunc from PUBLIC;
grant usage on language exfunc to group lambda_udf_devs;
```

Untuk menjalankan UDF Lambda, pastikan Anda memiliki izin untuk setiap fungsi yang dipanggil. Secara default, izin untuk menjalankan Lambda baru UDFs diberikan kepada PUBLIC. Untuk membatasi penggunaan, cabut izin ini dari PUBLIC untuk fungsi tersebut. Kemudian, berikan hak istimewa kepada pengguna atau grup tertentu.

Contoh berikut mencabut eksekusi pada fungsi exfunc\$1sum dari PUBLIC. Kemudian, itu memberikan penggunaan ke grup pengguna lambda\$1udf\$1devs.

```
revoke execute on function exfunc_sum(int, int) from PUBLIC;
grant execute on function exfunc_sum(int, int) to group lambda_udf_devs;
```

Superuser memiliki semua hak istimewa secara default.

Untuk informasi selengkapnya tentang pemberian dan pencabutan hak istimewa, lihat dan. [HIBAH](r_GRANT.md) [MENCABUT](r_REVOKE.md)

## Mengkonfigurasi parameter otorisasi untuk Lambda UDFs
<a name="udf-lambda-authorization"></a>

Perintah CREATE EXTERNAL FUNCTION memerlukan otorisasi untuk memanggil fungsi Lambda di. AWS Lambda Untuk memulai otorisasi, tentukan peran AWS Identity and Access Management (IAM) saat Anda menjalankan perintah CREATE EXTERNAL FUNCTION. Untuk informasi selengkapnya tentang peran IAM, lihat [Peran IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles.html) dalam *Panduan Pengguna IAM*.

Jika ada peran IAM yang ada dengan izin untuk memanggil fungsi Lambda yang dilampirkan ke klaster Anda, maka Anda dapat mengganti peran Anda Amazon Resource Name (ARN) di parameter IAM\$1ROLE untuk perintah tersebut. Bagian berikut menjelaskan langkah-langkah untuk menggunakan peran IAM dalam perintah CREATE EXTERNAL FUNCTION.

### Membuat peran IAM untuk Lambda
<a name="udf-lambda-create-iam"></a>

Peran IAM memerlukan izin untuk menjalankan fungsi Lambda. Saat membuat peran IAM, berikan izin dengan salah satu cara berikut:
+ Lampirkan `AWSLambdaRole` kebijakan di halaman **Kebijakan izin Lampirkan** saat membuat peran IAM. `AWSLambdaRole`Kebijakan ini memberikan izin untuk menjalankan fungsi Lambda yang merupakan persyaratan minimal. *Untuk informasi selengkapnya dan kebijakan lainnya, lihat Kebijakan [IAM berbasis identitas AWS Lambda di Panduan Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html).AWS Lambda *
+ Buat kebijakan kustom Anda sendiri untuk dilampirkan ke peran IAM Anda dengan `lambda:InvokeFunction` izin dari semua sumber daya atau fungsi Lambda tertentu dengan ARN fungsi itu. Untuk informasi selengkapnya tentang cara membuat kebijakan, lihat [Membuat kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) di *Panduan Pengguna IAM*.

  Kebijakan contoh berikut memungkinkan pemanggilan Lambda pada fungsi Lambda tertentu.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Invoke",
              "Effect": "Allow",
              "Action": [
                  "lambda:InvokeFunction"
              ],
              "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function"
          }
      ]
  }
  ```

------

  *Untuk informasi selengkapnya tentang sumber daya untuk fungsi Lambda, lihat [Sumber daya dan ketentuan untuk tindakan Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html) di Referensi API IAM.*

  Setelah membuat kebijakan kustom dengan izin yang diperlukan, Anda dapat melampirkan kebijakan Anda ke peran IAM di halaman **kebijakan Lampirkan izin** sambil membuat peran IAM.

Untuk langkah-langkah untuk membuat peran IAM, lihat [Mengotorisasi Amazon Redshift untuk mengakses layanan AWS lain atas nama Anda di Panduan Manajemen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) Amazon *Redshift*.

Jika Anda tidak ingin membuat peran IAM baru, Anda dapat menambahkan izin yang disebutkan sebelumnya ke peran IAM yang ada.

### Mengaitkan peran IAM dengan cluster
<a name="udf-lambda-associate-iam"></a>

Lampirkan peran IAM ke cluster Anda. Anda dapat menambahkan peran ke klaster atau melihat peran yang terkait dengan klaster menggunakan Amazon Redshift Management Console, CLI, atau API. Untuk informasi selengkapnya, lihat [Mengaitkan Peran IAM Dengan Cluster di Panduan](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) Manajemen *Pergeseran Merah Amazon*.

### Termasuk peran IAM dalam perintah
<a name="udf-lambda-include-iam"></a>

Sertakan peran IAM ARN dalam perintah CREATE EXTERNAL FUNCTION. Saat Anda membuat peran IAM, IAM mengembalikan Amazon Resource Name (ARN) untuk peran tersebut. Untuk menentukan peran IAM, berikan peran ARN dengan `IAM_ROLE` parameter. Berikut ini menunjukkan sintaks untuk `IAM_ROLE` parameter.

```
IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
```

Untuk menjalankan fungsi Lambda yang berada di akun lain dalam Wilayah yang sama, [lihat Merantai peran](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles.html) IAM di Amazon Redshift.

## Menggunakan antarmuka JSON antara Amazon Redshift dan AWS Lambda
<a name="udf-lambda-json"></a>

Amazon Redshift menggunakan antarmuka umum untuk semua fungsi Lambda yang dikomunikasikan oleh Amazon Redshift.

Tabel berikut menunjukkan daftar kolom input yang fungsi Lambda yang ditunjuk yang dapat Anda harapkan untuk payload JSON.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)

Urutan array JSON menentukan urutan pemrosesan batch. Fungsi Lambda harus memproses argumen secara iteratif dan menghasilkan jumlah catatan yang tepat. Berikut ini adalah contoh payload. 

```
{
  "request_id" : "23FF1F97-F28A-44AA-AB67-266ED976BF40",
  "cluster" : "arn:aws:redshift:xxxx",
  "user" : "adminuser",
  "database" : "db1",
  "external_function": "public.foo",
  "query_id" : 5678234,
  "num_records" : 4,
  "arguments" : [
     [ 1, 2 ],
     [ 3, null],
     null,
     [ 4, 6]
   ]
 }
```

Output kembali dari fungsi Lambda berisi bidang-bidang berikut.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)

Berikut ini adalah contoh dari output fungsi Lambda.

```
{
  "success": true,   // true indicates the call succeeded
  "error_msg" : "my function isn't working",  // shall only exist when success != true
  "num_records": 4,      // number of records in this payload
  "results" : [
     1,
     4,
     null,
     7
   ]
}
```

Saat Anda memanggil fungsi Lambda dari kueri SQL, Amazon Redshift memastikan keamanan koneksi dengan pertimbangan berikut:
+ IZIN GRANT dan REVOKE. Untuk informasi selengkapnya tentang keamanan dan izin UDF, lihat. [Keamanan dan izin UDF](udf-security-and-privileges.md)
+ Amazon Redshift hanya mengirimkan kumpulan data minimum ke fungsi Lambda yang ditentukan.
+ Amazon Redshift hanya memanggil fungsi Lambda yang ditunjuk dengan peran IAM yang ditunjuk.