

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

# Memanggil AWS Lambda fungsi dari
<a name="PostgreSQL-Lambda"></a>

AWS Lambda adalah layanan komputasi berbasis peristiwa yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Ini tersedia untuk digunakan dengan banyak AWS layanan, termasuk . Misalnya, Anda dapat menggunakan fungsi Lambda untuk memproses pemberitahuan peristiwa dari basis data, atau memuat data dari file setiap kali file baru diunggah ke Amazon S3. Untuk mempelajari lebih lanjut tentang Lambda, lihat [Apa itu? AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) di *Panduan AWS Lambda Pengembang.* 

**catatan**  
Memanggil AWS Lambda fungsi didukung dalam RDS ini untuk versi PostgreSQL:  
Semua PostgreSQL 18 versi
Semua PostgreSQL 17 versi
Semua PostgreSQL versi 16
Semua PostgreSQL versi 15
PostgreSQL 14.1 dan versi minor yang lebih tinggi
PostgreSQL 13.2 dan versi minor yang lebih tinggi
PostgreSQL 12.6 dan versi minor yang lebih tinggi

 Berikut ini, Anda dapat menemukan ringkasan langkah-langkah yang diperlukan. 

Untuk informasi selengkapnya tentang fungsi Lambda, lihat [Mulai menggunakan Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) dan [Dasar-dasar AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-foundation.html) di *Panduan Developer AWS Lambda *. 

**Topics**
+ [Langkah 1: Konfigurasikan untuk koneksi keluar ke AWS Lambda](#PostgreSQL-Lambda-network)
+ [Langkah 2: Konfigurasikan IAM untuk dan AWS Lambda](#PostgreSQL-Lambda-access)
+ [Langkah 3: Instal `aws_lambda` ekstensi untuk](#PostgreSQL-Lambda-install-extension)
+ [Langkah 4: Gunakan fungsi pembantu Lambda dengan instans DB RDS for PostgreSQL (Opsional)](#PostgreSQL-Lambda-specify-function)
+ [Langkah 5: Invokasi fungsi Lambda dari instans DB RDS for PostgreSQL Anda](#PostgreSQL-Lambda-invoke)
+ [Langkah 6: Berikan pengguna lain izin untuk menginvokasi fungsi Lambda](#PostgreSQL-Lambda-grant-users-permissions)
+ [Contoh: Menginvokasi fungsi Lambda dari instans DB RDS for PostgreSQL](PostgreSQL-Lambda-examples.md)
+ [Pesan kesalahan fungsi Lambda](PostgreSQL-Lambda-errors.md)
+ [AWS Lambdafungsi dan referensi parameter](PostgreSQL-Lambda-functions.md)

## Langkah 1: Konfigurasikan untuk koneksi keluar ke AWS Lambda
<a name="PostgreSQL-Lambda-network"></a>

Fungsi Lambda selalu berjalan di dalam VPC Amazon yang dimiliki oleh layanan. AWS Lambda Lambda menerapkan akses jaringan dan aturan keamanan untuk VPC ini dan mempertahankan serta memantau VPC secara otomatis. Instans DB RDS for PostgreSQL Anda mengirimkan lalu lintas jaringan ke VPC layanan Lambda. Cara Anda mengonfigurasi ini bergantung pada apakah instans DB Anda bersifat publik atau pribadi.
+ **Public RDS untuk instans PostgreSQL DB — Instans DB instans DB** adalah publik jika terletak di subnet publik di VPC Anda, dan jika properti “” instans adalah. PubliclyAccessible `true` Untuk menemukan nilai properti ini, Anda dapat menggunakan [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI perintah. Atau, Anda dapat menggunakan Konsol Manajemen AWS untuk membuka tab **Konektivitas & keamanan** dan memeriksa apakah opsi **Dapat diakses publik** adalah **Ya**. Untuk memverifikasi bahwa instans ini ada di subnet publik VPC, Anda dapat menggunakan Konsol Manajemen AWS atau AWS CLI. 

  Untuk mengatur akses ke Lambda, Anda menggunakan Konsol Manajemen AWS atau AWS CLI untuk membuat aturan keluar pada grup keamanan VPC Anda. Aturan keluar menentukan bahwa TCP dapat menggunakan port 443 untuk mengirim paket ke alamat apa pun IPv4 (0.0.0.0/0).
+ **Private RDS untuk instance PostgreSQL DB** — Dalam hal ini, properti “” instance berada di subnet pribadi. PubliclyAccessible `false` Agar instans dapat berfungsi dengan Lambda, Anda dapat menggunakan gateway Network Address Translation (NAT). Untuk informasi selengkapnya, silakan lihat [Gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html). Atau, Anda dapat mengonfigurasi VPC dengan titik akhir VPC untuk Lambda. Untuk informasi selengkapnya, lihat [Titik akhir VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) di *Panduan Pengguna Amazon VPC*. Titik akhir ini merespons panggilan yang dilakukan oleh instans DB RDS for PostgreSQL ke fungsi Lambda Anda. Titik akhir VPC menggunakan resolusi DNS pribadinya sendiri. RDS for PostgreSQL tidak dapat menggunakan titik akhir VPC Lambda hingga Anda mengubah nilai `rds.custom_dns_resolution` dari default-nya 0 (tidak aktif) menjadi 1. Untuk melakukannya:
  + Buat grup parameter DB kustom.
  + Ubah nilai parameter `rds.custom_dns_resolution` dari default `0` ke `1`. 
  + Ubah instans DB Anda untuk menggunakan grup parameter DB kustom.
  + Boot ulang instans agar parameter yang diubah dapat diterapkan.

VPC Anda sekarang dapat berinteraksi dengan AWS Lambda VPC di tingkat jaringan. Selanjutnya, konfigurasikan izin menggunakan IAM. 

## Langkah 2: Konfigurasikan IAM untuk dan AWS Lambda
<a name="PostgreSQL-Lambda-access"></a>

Menginvokasi fungsi Lambda dari instans DB RDS for PostgreSQL memerlukan hak istimewa tertentu. Untuk mengonfigurasi hak istimewa yang diperlukan, sebaiknya Anda membuat kebijakan IAM yang memungkinkan invokasi fungsi Lambda, menetapkan kebijakan ke peran, dan kemudian menerapkan peran tersebut ke instans DB Anda. Pendekatan ini memberikan hak istimewa instans DB untuk menginvokasi fungsi Lambda yang ditentukan atas nama Anda. Langkah-langkah berikut menunjukkan cara melakukannya dengan menggunakan AWS CLI.

**Untuk mengonfigurasi izin IAM untuk menggunakan instans Amazon RDS dengan Lambda**

1. Gunakan AWS CLI perintah [create-policy untuk membuat kebijakan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) IAM yang memungkinkan Aurora untuk menjalankan fungsi Lambda yang ditentukan. (ID pernyataan (Sid) adalah deskripsi opsional untuk pernyataan kebijakan Anda dan tidak berpengaruh pada penggunaan.) Kebijakan ini memberi  instans DB izin minimum yang diperlukan untuk menginvokasi fungsi Lambda yang ditentukan. 

   ```
   aws iam create-policy  --policy-name rds-lambda-policy --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
           "Sid": "AllowAccessToExampleFunction",
           "Effect": "Allow",
           "Action": "lambda:InvokeFunction",
           "Resource": "arn:aws:lambda:aws-region:444455556666:function:my-function"
           }
       ]
   }'
   ```

   Sebagai alternatif, Anda dapat menggunakan kebijakan `AWSLambdaRole` yang ditentukan sebelumnya yang memungkinkan Anda menginvokasi fungsi Lambda apa pun. Untuk informasi selengkapnya, lihat [Kebijakan IAM berbasis identitas untuk Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html#access-policy-examples-aws-managed) 

1. Gunakan AWS CLI perintah [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) untuk membuat peran IAM yang dapat diasumsikan oleh kebijakan saat runtime.

   ```
   aws iam create-role  --role-name rds-lambda-role --assume-role-policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
           "Effect": "Allow",
           "Principal": {
               "Service": "rds.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
           }
       ]
   }'
   ```

1. Terapkan kebijakan ke peran dengan menggunakan [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) AWS CLI perintah.

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::444455556666:policy/rds-lambda-policy \
       --role-name rds-lambda-role --region aws-region
   ```

1.  AWS CLI Langkah terakhir ini memungkinkan pengguna basis data instans DB menginvokasi fungsi Lambda. 

   ```
   aws rds add-role-to-db-instance \
          --db-instance-identifier my-instance-name \
          --feature-name Lambda \
          --role-arn  arn:aws:iam::444455556666:role/rds-lambda-role   \
          --region aws-region
   ```

Setelah menyelesaikan konfigurasi VPC dan IAM, Anda sekarang dapat menginstal ekstensi `aws_lambda`. (Perhatikan bahwa Anda dapat menginstal ekstensi kapan saja, tetapi sebelum menyiapkan dukungan VPC dan hak istimewa IAM yang benar, ekstensi `aws_lambda` tidak menambahkan apa pun ke kapabilitas instans DB RDS for PostgreSQL.)

## Langkah 3: Instal `aws_lambda` ekstensi untuk
<a name="PostgreSQL-Lambda-install-extension"></a>

 Ekstensi ini memberi instans DB RDS for PostgreSQL kemampuan untuk memanggil fungsi Lambda dari PostgreSQL. 

**Untuk menginstal `aws_lambda` ekstensi di**

Gunakan baris perintah `psql` PostgreSQL atau alat pgAdmin untuk terhubung ke instans DB RDS for PostgreSQL. 

1. Hubungkan ke instans DB RDS for PostgreSQL sebagai pengguna dengan hak istimewa `rds_superuser`. Pengguna `postgres` default ditampilkan dalam contoh.

   ```
   psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
   ```

1. Instal ekstensi `aws_lambda`. Ekstensi `aws_commons` juga diperlukan. Ini memberikan fungsi pembantu `aws_lambda` dan berbagai ekstensi Aurora lainnya untuk PostgreSQL. Jika belum ada di instans DB RDS for PostgreSQL, ekstensi akan diinstal dengan `aws_lambda` seperti yang ditunjukkan sebagai berikut. 

   ```
   CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE;
   NOTICE:  installing required extension "aws_commons"
   CREATE EXTENSION
   ```

Ekstensi `aws_lambda` diinstal di instans DB . Anda sekarang dapat membuat struktur kemudahan untuk menginvokasi fungsi Lambda. 

## Langkah 4: Gunakan fungsi pembantu Lambda dengan instans DB RDS for PostgreSQL (Opsional)
<a name="PostgreSQL-Lambda-specify-function"></a>

Anda dapat menggunakan fungsi pembantu di ekstensi `aws_commons` untuk menyiapkan entitas yang dapat diinvokasi dengan lebih mudah dari PostgreSQL. Untuk melakukannya, Anda harus memiliki informasi berikut tentang fungsi Lambda:
+ **Nama fungsi** – Nama, Amazon Resource Name (ARN), versi, atau alias fungsi Lambda. Kebijakan IAM yang dibuat [Langkah 2: Konfigurasikan IAM untuk instans dan Lambda](#PostgreSQL-Lambda-access) memerlukan ARN, jadi kami sarankan Anda menggunakan ARN fungsi Anda.
+ **AWS Wilayah** - (Opsional) AWS Wilayah tempat fungsi Lambda berada jika tidak berada di Wilayah yang sama dengan Kluster PostgreSQL DB Aurora Anda RDS untuk instans .

Untuk menyimpan informasi nama fungsi Lambda, Anda menggunakan fungsi [aws\$1commons.create\$1lambda\$1function\$1arn](PostgreSQL-Lambda-functions.md#aws_commons.create_lambda_function_arn). Fungsi pembantu ini menciptakan struktur komposit `aws_commons._lambda_function_arn_1` dengan detail yang dibutuhkan oleh fungsi invokasi. Berikut ini, Anda dapat menemukan tiga pendekatan alternatif untuk menyiapkan struktur komposit ini.

```
SELECT aws_commons.create_lambda_function_arn(
   'my-function',
   'aws-region'
) AS aws_lambda_arn_1 \gset
```

```
SELECT aws_commons.create_lambda_function_arn(
   '111122223333:function:my-function',
   'aws-region'
) AS lambda_partial_arn_1 \gset
```

```
SELECT aws_commons.create_lambda_function_arn(
   'arn:aws:lambda:aws-region:111122223333:function:my-function'
) AS lambda_arn_1 \gset
```

Salah satu dari nilai ini dapat digunakan dalam panggilan ke fungsi [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke). Sebagai contoh, lihat [Langkah 5: Invokasi fungsi Lambda dari instans DB RDS for PostgreSQL Anda](#PostgreSQL-Lambda-invoke).

## Langkah 5: Invokasi fungsi Lambda dari instans DB RDS for PostgreSQL Anda
<a name="PostgreSQL-Lambda-invoke"></a>

Fungsi `aws_lambda.invoke` berperilaku sinkron atau asinkron, bergantung pada `invocation_type`. Dua alternatif untuk parameter ini adalah `RequestResponse` (default) dan `Event`, sebagai berikut. 
+ **`RequestResponse`** – Jenis invokasi ini *sinkron*. Ini adalah perilaku default saat panggilan dilakukan tanpa menentukan jenis invokasi. Payload respons mencakup hasil dari fungsi `aws_lambda.invoke`. Gunakan jenis invokasi ini jika alur kerja Anda perlu menerima hasil dari fungsi Lambda sebelum melanjutkan. 
+ **`Event`** – Jenis invokasi ini *asinkron*. Respons tidak mencakup payload yang berisi hasil. Gunakan jenis invokasi ini jika alur kerja Anda tidak memerlukan hasil dari fungsi Lambda untuk melanjutkan pemrosesan.

Sebagai pengujian sederhana terhadap pengaturan Anda, Anda dapat terhubung ke instans DB menggunakan `psql` dan menginvokasi contoh fungsi dari baris perintah. Misalkan Anda memiliki salah satu fungsi dasar yang disiapkan pada layanan Lambda, seperti fungsi Python sederhana yang diperlihatkan pada tangkapan layar berikut.

![\[Contoh fungsi Lambda yang ditampilkan di for AWS CLI AWS Lambda\]](http://docs.aws.amazon.com/id_id/AmazonRDS/latest/UserGuide/images/lambda_simple_function.png)


**Untuk menginvokasi contoh fungsi**

1. Hubungkan ke instans DB menggunakan `psql` atau pgAdmin.

   ```
   psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
   ```

1. Invokasi fungsi menggunakan ARN-nya.

   ```
   SELECT * from aws_lambda.invoke(aws_commons.create_lambda_function_arn('arn:aws:lambda:aws-region:444455556666:function:simple', 'us-west-1'), '{"body": "Hello from Postgres!"}'::json );
   ```

   Respons-nya terlihat sebagai berikut.

   ```
   status_code |                        payload                        | executed_version | log_result
   -------------+-------------------------------------------------------+------------------+------------
            200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST          |
   (1 row)
   ```

Jika upaya invokasi tidak berhasil, lihat [Pesan kesalahan fungsi Lambda](PostgreSQL-Lambda-errors.md). 

## Langkah 6: Berikan pengguna lain izin untuk menginvokasi fungsi Lambda
<a name="PostgreSQL-Lambda-grant-users-permissions"></a>

Dalam langkah ini, hanya Anda sebagai `rds_superuser` yang dapat menginvokasi fungsi Lambda. Untuk mengizinkan pengguna lain menginvokasi fungsi apa pun yang Anda buat, Anda harus memberi mereka izin. 

**Untuk memberi pengguna lain izin untuk menginvokasi fungsi Lambda**

1. Hubungkan ke instans DB menggunakan `psql` atau pgAdmin.

   ```
   psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
   ```

1. Jalankan perintah SQL berikut:

   ```
   postgres=>  GRANT USAGE ON SCHEMA aws_lambda TO db_username;
   GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TO db_username;
   ```

# Contoh: Menginvokasi fungsi Lambda dari instans DB RDS for PostgreSQL
<a name="PostgreSQL-Lambda-examples"></a>

Berikut ini, Anda dapat menemukan beberapa contoh pemanggilan fungsi [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke). Sebagian besar contoh menggunakan struktur komposit `aws_lambda_arn_1` yang Anda buat [Langkah 4: Gunakan fungsi pembantu Lambda dengan instans DB RDS for PostgreSQL (Opsional)](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) untuk menyederhanakan meneruskan detail fungsi. Untuk contoh panggilan asinkron, lihat [Contoh: Invokasi fungsi Lambda asinkron (Event)](#PostgreSQL-Lambda-Event). Semua contoh lain yang tercantum menggunakan panggilan sinkron. 

Untuk mempelajari lebih lanjut tentang jenis invokasi Lambda, lihat [Menginvokasi fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html) di *Panduan Developer AWS Lambda *. Untuk informasi selengkapnya tentang `aws_lambda_arn_1`, lihat [aws\$1commons.create\$1lambda\$1function\$1arn](PostgreSQL-Lambda-functions.md#aws_commons.create_lambda_function_arn). 

**Topics**
+ [Contoh: Synchronous (RequestResponse) pemanggilan fungsi Lambda](#PostgreSQL-Lambda-RequestResponse)
+ [Contoh: Invokasi fungsi Lambda asinkron (Event)](#PostgreSQL-Lambda-Event)
+ [Contoh: Menangkap log eksekusi Lambda dalam respons fungsi](#PostgreSQL-Lambda-log-response)
+ [Contoh: Menyertakan konteks klien dalam fungsi Lambda](#PostgreSQL-Lambda-client-context)
+ [Contoh: Menginvokasi fungsi Lambda versi spesifik](#PostgreSQL-Lambda-function-version)

## Contoh: Synchronous (RequestResponse) pemanggilan fungsi Lambda
<a name="PostgreSQL-Lambda-RequestResponse"></a>

Berikut ini adalah dua contoh dari invokasi fungsi Lambda sinkron. Hasil dari panggilan fungsi `aws_lambda.invoke` ini sama.

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json);
```

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse');
```

Parameternya dijelaskan sebagai berikut:
+ `:'aws_lambda_arn_1'` – Parameter ini mengidentifikasi struktur komposit yang dibuat di[Langkah 4: Gunakan fungsi pembantu Lambda dengan instans DB RDS for PostgreSQL (Opsional)](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function), dengan fungsi pembantu `aws_commons.create_lambda_function_arn`. Anda juga dapat membuat struktur ini sebaris dalam panggilan `aws_lambda.invoke` Anda sebagai berikut. 

  ```
  SELECT * FROM aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function', 'aws-region'),
  '{"body": "Hello from Postgres!"}'::json
  );
  ```
+ `'{"body": "Hello from PostgreSQL!"}'::json` – Payload JSON untuk diteruskan ke fungsi Lambda.
+ `'RequestResponse'` – Jenis invokasi Lambda.

## Contoh: Invokasi fungsi Lambda asinkron (Event)
<a name="PostgreSQL-Lambda-Event"></a>

Berikut ini adalah contoh invokasi fungsi Lambda asinkron. Jenis invokasi `Event` menjadwalkan invokasi fungsi Lambda dengan payload input yang ditentukan dan segera kembali. Gunakan jenis invokasi `Event` di alur kerja tertentu yang tidak bergantung pada hasil fungsi Lambda.

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'Event');
```

## Contoh: Menangkap log eksekusi Lambda dalam respons fungsi
<a name="PostgreSQL-Lambda-log-response"></a>

Anda dapat menyertakan 4 KB terakhir log eksekusi di respons fungsi dengan menggunakan parameter `log_type` dalam panggilan fungsi `aws_lambda.invoke` Anda. Secara default, parameter ini diatur ke `None`, tetapi Anda dapat menentukan `Tail` untuk menangkap hasil log eksekusi Lambda dalam respons, seperti yang ditunjukkan berikut.

```
SELECT *, select convert_from(decode(log_result, 'base64'), 'utf-8') as log FROM aws_lambda.invoke(:'aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'Tail');
```

Atur parameter `log_type` fungsi [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) ke `Tail` untuk menyertakan log eksekusi dalam respons. Nilai default untuk parameter `log_type` adalah `None`.

`log_result` yang ditampilkan string yang dienkode `base64`. Anda dapat mendekode kontennya menggunakan kombinasi fungsi PostgreSQL `decode` dan `convert_from`.

Untuk informasi selengkapnya tentang `log_type`, lihat [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke).

## Contoh: Menyertakan konteks klien dalam fungsi Lambda
<a name="PostgreSQL-Lambda-client-context"></a>

Fungsi `aws_lambda.invoke` memiliki parameter `context` yang dapat Anda gunakan untuk meneruskan informasi yang terpisah dari payload, seperti yang diperlihatkan di bawah. 

```
SELECT *, convert_from(decode(log_result, 'base64'), 'utf-8') as log FROM aws_lambda.invoke(:'aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'Tail');
```

Untuk menyertakan konteks klien, gunakan objek JSON untuk parameter `context` fungsi [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke).

Untuk informasi selengkapnya tentang parameter `context`, lihat referensi [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke). 

## Contoh: Menginvokasi fungsi Lambda versi spesifik
<a name="PostgreSQL-Lambda-function-version"></a>

Anda dapat menentukan versi tertentu dari fungsi Lambda dengan menyertakan parameter `qualifier` dengan panggilan `aws_lambda.invoke`. Berikut ini, Anda dapat menemukan contoh yang melakukan ini menggunakan `'custom_version'` sebagai alias untuk versi.

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'None', NULL, 'custom_version');
```

Anda juga dapat menyediakan pengualifikasi fungsi Lambda dengan detail nama fungsi sebagai berikut.

```
SELECT * FROM aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function:custom_version', 'us-west-2'),
'{"body": "Hello from Postgres!"}'::json);
```

Untuk informasi selengkapnya tentang `qualifier` dan parameter lainnya, lihat referensi [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke).

# Pesan kesalahan fungsi Lambda
<a name="PostgreSQL-Lambda-errors"></a>

Dalam daftar berikut, Anda dapat menemukan informasi tentang pesan kesalahan, dengan kemungkinan penyebab dan solusi.
+ **Masalah konfigurasi VPC**

  Masalah konfigurasi VPC dapat memunculkan pesan kesalahan berikut saat mencoba menghubungkan: 

  ```
  ERROR:  invoke API failed
  DETAIL: AWS Lambda client returned 'Unable to connect to endpoint'.
  CONTEXT:  SQL function "invoke" statement 1
  ```

  Penyebab umum kesalahan ini adalah grup keamanan VPC tidak dikonfigurasi dengan benar. Pastikan Anda memiliki aturan keluar untuk TCP yang terbuka pada di 443 grup keamanan VPC Anda, sehingga VPC Anda dapat terhubung ke VPC Lambda.

  Jika instans DB Anda bersifat pribadi, periksa penyiapan DNS pribadi untuk VPC Anda. Pastikan bahwa Anda mengatur `rds.custom_dns_resolution` parameter ke 1 dan setup AWS PrivateLink seperti yang diuraikan dalam[Langkah 1: Konfigurasikan untuk koneksi keluar ke AWS Lambda](PostgreSQL-Lambda.md#PostgreSQL-Lambda-network). Untuk informasi selengkapnya, lihat [Titik akhir VPC Antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-private-dns) ().AWS PrivateLink 
+ **Kurangnya izin yang diperlukan untuk menginvokasi fungsi Lambda**

  Jika Anda melihat salah satu pesan galat berikut, berarti pengguna (peran) yang menginvokasi fungsi ini tidak memiliki izin yang tepat.

  ```
  ERROR:  permission denied for schema aws_lambda
  ```

  ```
  ERROR:  permission denied for function invoke
  ```

  Pengguna (peran) harus diberi izin khusus untuk menginvokasi fungsi Lambda. Untuk informasi selengkapnya, lihat [Langkah 6: Berikan pengguna lain izin untuk menginvokasi fungsi Lambda](PostgreSQL-Lambda.md#PostgreSQL-Lambda-grant-users-permissions). 
+ **Penanganan kesalahan yang tidak tepat dalam fungsi Lambda**

  Jika fungsi Lambda menampilkan pengecualian selama pemrosesan permintaan, berarti `aws_lambda.invoke` gagal dengan kesalahan PostgreSQL seperti berikut.

  ```
  SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json);
  ERROR:  lambda invocation failed
  DETAIL:  "arn:aws:lambda:us-west-2:555555555555:function:my-function" returned error "Unhandled", details: "<Error details string>".
  ```

  Pastikan untuk menangani kesalahan dalam fungsi Lambda Anda atau di aplikasi PostgreSQL Anda.

# AWS Lambdafungsi dan referensi parameter
<a name="PostgreSQL-Lambda-functions"></a>

Berikut ini adalah referensi untuk fungsi dan parameter yang akan digunakan untuk memanggil Lambda dengan PostgreSQL RDS untuk PostgreSQL.

**Topics**
+ [aws\$1lambda.invoke](#aws_lambda.invoke)
+ [aws\$1commons.create\$1lambda\$1function\$1arn](#aws_commons.create_lambda_function_arn)
+ [parameter aws\$1lambda](#aws_lambda.parameters)

## aws\$1lambda.invoke
<a name="aws_lambda.invoke"></a>

Menjalankan fungsi Lambda untuk instans DB RDS for PostgreSQL.

Untuk detail lebih lanjut tentang memanggil fungsi Lambda, lihat juga [Invokasi](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html) di *Panduan Developer AWS Lambda.*

**Sintaksis**

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

```
aws_lambda.invoke(
IN function_name TEXT,
IN payload JSON,
IN region TEXT DEFAULT NULL,
IN invocation_type TEXT DEFAULT 'RequestResponse',
IN log_type TEXT DEFAULT 'None',
IN context JSON DEFAULT NULL,
IN qualifier VARCHAR(128) DEFAULT NULL,
OUT status_code INT,
OUT payload JSON,
OUT executed_version TEXT,
OUT log_result TEXT)
```

```
aws_lambda.invoke(
IN function_name aws_commons._lambda_function_arn_1,
IN payload JSON,
IN invocation_type TEXT DEFAULT 'RequestResponse',
IN log_type TEXT DEFAULT 'None',
IN context JSON DEFAULT NULL,
IN qualifier VARCHAR(128) DEFAULT NULL,
OUT status_code INT,
OUT payload JSON,
OUT executed_version TEXT,
OUT log_result TEXT)
```

------
#### [ JSONB ]

```
aws_lambda.invoke(
IN function_name TEXT,
IN payload JSONB,
IN region TEXT DEFAULT NULL,
IN invocation_type TEXT DEFAULT 'RequestResponse',
IN log_type TEXT DEFAULT 'None',
IN context JSONB DEFAULT NULL,
IN qualifier VARCHAR(128) DEFAULT NULL,
OUT status_code INT,
OUT payload JSONB,
OUT executed_version TEXT,
OUT log_result TEXT)
```

```
aws_lambda.invoke(
IN function_name aws_commons._lambda_function_arn_1,
IN payload JSONB,
IN invocation_type TEXT DEFAULT 'RequestResponse',
IN log_type TEXT DEFAULT 'None',
IN context JSONB DEFAULT NULL,
IN qualifier VARCHAR(128) DEFAULT NULL,
OUT status_code INT,
OUT payload JSONB,
OUT executed_version TEXT,
OUT log_result TEXT
)
```

------Parameter input

**function\$1name**  
Nama yang mengidentifikasi fungsi Lambda. Nilai tersebut dapat berupa nama fungsi, sebuah ARN, atau ARN parsial. Untuk daftar format yang memungkinkan, lihat [Format nama fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestParameters) dalam *Panduan Developer AWS Lambda.*

*payload*  
Input untuk fungsi Lambda. Formatnya dapat berupa JSON atau JSONB. Untuk informasi selengkapnya, lihat [Jenis JSON](https://www.postgresql.org/docs/current/datatype-json.html) dalam dokumentasi PostgreSQL.

*region*  
(Opsional) Wilayah Lambda untuk fungsi tersebut. Secara default, RDS menyelesaikan Wilayah AWS dari ARN penuh di `function_name` atau menggunakan Wilayah instans DB RDS for PostgreSQL. Jika nilai Wilayah ini bertentangan dengan nilai yang disediakan dalam ARN `function_name`, pesan kesalahan akan muncul.

*invocation\$1type*  
Jenis invokasi fungsi Lambda. Nilai ini peka huruf besar/kecil. Kemungkinan nilainya termasuk yang berikut ini:  
+ `RequestResponse` – Default. Jenis invokasi untuk fungsi Lambda bersifat sinkron dan menampilkan payload respons dalam hasilnya. Gunakan jenis invokasi `RequestResponse` ketika alur kerja Anda bergantung pada penerimaan hasil fungsi Lambda dengan segera. 
+ `Event` – Jenis invokasi untuk fungsi Lambda ini bersifat asinkron dan segera kembali tanpa menampilkan payload. Gunakan jenis invokasi `Event` ketika Anda tidak membutuhkan hasil dari fungsi Lambda sebelum alur kerja Anda berlanjut.
+ `DryRun` – Jenis invokasi ini menguji akses tanpa menjalankan fungsi Lambda. 

*log\$1type*  
Jenis log Lambda untuk ditampilkan dalam parameter output `log_result`. Nilai ini peka huruf besar/kecil. Kemungkinan nilainya termasuk yang berikut ini:  
+ Ekor – Parameter output `log_result` yang ditampilkan akan mencakup 4 KB terakhir log eksekusi. 
+ Tidak Ada – Tidak ada informasi log Lambda yang ditampilkan.

*context*  
Konteks klien dalam format JSON atau JSONB. Kolom yang akan digunakan termasuk `custom` dan `env`.

*qualifier*  
Pengualifikasi yang mengidentifikasi versi fungsi Lambda yang akan diinvokasi. Jika nilai ini bertentangan dengan nilai yang disediakan dalam ARN `function_name`, pesan kesalahan akan muncul.Parameter output

*status\$1code*  
Kode respons status HTTP. Untuk informasi selengkapnya, lihat [Elemen respons invokasi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_ResponseElements) di *Panduan Developer AWS Lambda.*

*payload*  
Informasi yang ditampilkan dari fungsi Lambda yang berjalan. Formatnya berupa JSON atau JSONB.

*executed\$1version*  
Versi fungsi Lambda yang berjalan.

*log\$1result*  
Informasi log eksekusi yang ditampilkan jika nilai `log_type` adalah `Tail` ketika fungsi Lambda diinvokasi. Hasilnya berisi 4 KB terakhir log eksekusi yang dikodekan dalam Base64.

## aws\$1commons.create\$1lambda\$1function\$1arn
<a name="aws_commons.create_lambda_function_arn"></a>

Membuat struktur `aws_commons._lambda_function_arn_1` untuk menyimpan informasi nama fungsi Lambda. Gunakan hasil fungsi `aws_commons.create_lambda_function_arn` dalam parameter `function_name` dari fungsi [aws\$1lambda.invoke](#aws_lambda.invoke) aws\$1lambda.invoke. 

**Sintaksis**

```
aws_commons.create_lambda_function_arn(
    function_name TEXT,
    region TEXT DEFAULT NULL
    )
    RETURNS aws_commons._lambda_function_arn_1
```Parameter input

*function\$1name*  
String teks yang diperlukan berisi nama fungsi Lambda. Nilai tersebut dapat berupa nama fungsi, ARN penuh, atau ARN parsial.

*region*  
String teks opsional yang berisi Wilayah AWS tempat fungsi Lambda berada. Untuk daftar nama Wilayah dan nilai terkait, lihat [Wilayah, Zona Ketersediaan, dan Zona Lokal](Concepts.RegionsAndAvailabilityZones.md).

## parameter aws\$1lambda
<a name="aws_lambda.parameters"></a>

Dalam tabel ini, Anda dapat menemukan parameter yang terkait dengan `aws_lambda` fungsi tersebut.


| Parameter | Deskripsi | 
| --- | --- | 
| `aws_lambda.connect_timeout_ms` | Ini adalah parameter dinamis dan menetapkan waktu tunggu maksimum saat menghubungkan ke AWS Lambda. Nilai defaultnya adalah`1000`. Nilai yang diizinkan untuk parameter ini adalah 1 - 900000. | 
| `aws_lambda.request_timeout_ms` | Ini adalah parameter dinamis dan menetapkan waktu tunggu maksimum sambil menunggu respons dari AWS Lambda. Nilai defaultnya adalah`3000`. Nilai yang diizinkan untuk parameter ini adalah 1 - 900000. | 
| `aws_lambda.endpoint_override` | Menentukan endpoint yang dapat digunakan untuk terhubung ke LambdaAWS. String kosong memilih titik akhir AWS Lambda default untuk wilayah tersebut. Anda harus me-restart database agar perubahan parameter statis ini berlaku. | 