

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Richiamo di una AWS Lambda funzione da un'istanza RDS del cluster
<a name="PostgreSQL-Lambda"></a>

AWS Lambda è un servizio di elaborazione basato sugli eventi che consente di eseguire codice senza effettuare il provisioning o la gestione di server. È disponibile per l'uso con molti AWS servizi, tra cui . Ad esempio, è possibile utilizzare le funzioni Lambda per elaborare le notifiche di eventi da un database o per caricare dati da file ogni volta che un nuovo file viene caricato su Amazon S3. Per ulteriori informazioni su Lambda, vedi [Cos'è? AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) nella *Guida per gli AWS Lambda sviluppatori*. 

**Nota**  
L'invocazione di una AWS Lambda funzione è supportata in queste versioni di RDS per PostgreSQL:  
Tutte le versioni di PostgreSQL 18
Tutte le versioni di PostgreSQL 17
Tutte le versioni di PostgreSQL 16
Tutte le versioni di PostgreSQL 15
PostgreSQL 14.1 e versioni secondarie successive
PostgreSQL 13.2 e versioni secondarie successive
PostgreSQL 12.6 e versioni secondarie successive

 Di seguito sono riportati i riepiloghi dei passaggi necessari. 

Per ulteriori informazioni sulle funzioni Lambda, consulta [Nozioni di base su Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) e [Fondamenti di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-foundation.html) nella *Guida per gli sviluppatori di AWS Lambda *. 

**Topics**
+ [Fase 1: configurare l'istanza DB RDS del per le connessioni in uscita a AWS Lambda](#PostgreSQL-Lambda-network)
+ [Passaggio 2: configura IAM per l'istanza RDS del e AWS Lambda](#PostgreSQL-Lambda-access)
+ [Passaggio 3: installare l'`aws_lambda`estensione per un'istanza database](#PostgreSQL-Lambda-install-extension)
+ [Fase 4: utilizzo delle funzioni di supporto Lambda con l'istanza database RDS for PostgreSQL (facoltativo)](#PostgreSQL-Lambda-specify-function)
+ [Fase 5: richiamo di una funzione Lambda dall'istanza database RDS for PostgreSQL](#PostgreSQL-Lambda-invoke)
+ [Fase 6: concessione delle autorizzazioni ad altri utenti per richiamare le funzioni Lambda](#PostgreSQL-Lambda-grant-users-permissions)
+ [Esempi: Richiamo delle funzioni Lambda dall'istanza database RDS for PostgreSQL](PostgreSQL-Lambda-examples.md)
+ [Messaggi di errore della funzione Lambda](PostgreSQL-Lambda-errors.md)
+ [Informazioni di riferimento per le funzioni e i parametri AWS Lambda](PostgreSQL-Lambda-functions.md)

## Fase 1: configurare l'istanza DB RDS del per le connessioni in uscita a AWS Lambda
<a name="PostgreSQL-Lambda-network"></a>

Le funzioni Lambda vengono sempre eseguite all'interno di un Amazon VPC di proprietà del servizio. AWS Lambda Lambda applica le regole di accesso alla rete e di sicurezza a questo VPC e mantiene e monitora il VPC automaticamente. L'istanza database RDS per PostgreSQL deve inviare traffico di rete al VPC del servizio Lambda. La modalità di configurazione dipende dal fatto che l'istanza database sia pubblica o privata.
+ ** dell'istanza DB principale di un cluster DB** pubblica sul VPC e se la proprietà "" dell'istanza è. PubliclyAccessible `true` Per trovare il valore di questa proprietà, puoi usare il comando. [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI In alternativa, puoi utilizzare la Console di gestione AWS per aprire la scheda **Connectivity & security** (Connettività e sicurezza) e controllare che l’opzione **Publicly accessible** (Accessibile pubblicamente) sia impostata su **Yes** (Sì). Per verificare se l'istanza si trova nella sottorete pubblica del VPC, puoi utilizzare la Console di gestione AWS o la AWS CLI. 

  Per configurare l'accesso a Lambda, usi Console di gestione AWS o AWS CLI per creare una regola in uscita sul gruppo di sicurezza del tuo VPC. La regola in uscita specifica che TCP può utilizzare la porta 443 per inviare pacchetti a qualsiasi indirizzo (0.0.0.0/0). IPv4 
+ Istanza **privata del : in questo caso, la proprietà "" dell'istanza si trova o** si trova in una sottorete privata. PubliclyAccessible `false` Per consentire all'istanza di funzionare con Lambda, è possibile utilizzare un gateway Network Address Translation (NAT). Per ulteriori informazioni, consulta [Gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html). In alternativa, puoi configurare il VPC con un endpoint VPC per Lamda. Per ulteriori informazioni, consultare [Endpoint VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) nella *Guida per l'utente di Amazon VPC*. L'endpoint risponde alle chiamate effettuate dall'istanza database RDS per PostgreSQL alle funzioni Lambda. L'endpoint VPC utilizza la propria risoluzione DNS privata. RDS for PostgreSQL non può utilizzare l'endpoint VPC di Lambda fino a quando non modifichi il valore di `rds.custom_dns_resolution` dal valore predefinito di 0 (non abilitato) a 1. A tale scopo:
  + Crea un gruppo parametri del database personalizzato.
  + Cambia il valore del parametro `rds.custom_dns_resolution` da `0` (valore predefinito) a `1`. 
  + Modifica l'istanza database per utilizzare il gruppo parametri del database personalizzato.
  + Affinché il parametro modificato abbia effetto, riavvia l'istanza.

Il tuo VPC può ora interagire con il AWS Lambda VPC a livello di rete. Configura quindi le autorizzazioni utilizzando IAM. 

## Passaggio 2: configura IAM per l'istanza RDS del e AWS Lambda
<a name="PostgreSQL-Lambda-access"></a>

Il richiamo di funzioni Lambda dall'istanza database RDS for PostgreSQL richiede determinati privilegi. Per configurare i privilegi necessari, si consiglia di creare una policy IAM che consenta di richiamare le funzioni Lambda, assegnare tale policy a un ruolo e quindi applicare il ruolo all'istanza database. Questo approccio fornisce all'istanza database privilegi per richiamare la funzione Lambda specificata per tuo conto. La procedura seguente mostra come eseguire questa operazione in AWS CLI.

**Configurare le autorizzazioni IAM per l'utilizzo dell'istanza Amazon RDS con Lambda**

1. Usa il AWS CLI comando [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) per creare una policy IAM che consenta all'istanza database Aurora di richiamare la funzione Lambda specificata. (L'ID dichiarazione (Sid) è una descrizione facoltativa per la dichiarazione di policy e non ha alcun effetto sull'utilizzo). Questa policy fornisce all'istanza database le autorizzazioni minime necessarie per richiamare la funzione Lambda specificata. 

   ```
   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"
           }
       ]
   }'
   ```

   In alternativa, puoi utilizzare la policy `AWSLambdaRole` predefinita che ti consente di richiamare una qualsiasi delle tue funzioni Lambda. Per ulteriori informazioni, consulta [Policy IAM basate sull'identità per Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html#access-policy-examples-aws-managed) 

1. Utilizza il comando [create-role per creare un ruolo IAM che la policy può assumere in fase di esecuzione](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) AWS CLI .

   ```
   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. Applica la policy al ruolo utilizzando il [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) AWS CLI comando.

   ```
   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 Quest'ultimo passaggio consente agli utenti dell'istanza database di richiamare le funzioni 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
   ```

Con le configurazioni di VPC e IAM completate, puoi ora installare l'estensione `aws_lambda`. (Puoi installare l'estensione in qualsiasi momento, ma fino a quando non configuri il supporto VPC e i privilegi IAM corretti, l'estensione `aws_lambda`non aggiunge nulla alle funzionalità dell'istanza database RDS for PostgreSQL).

## Passaggio 3: installare l'`aws_lambda`estensione per un'istanza database
<a name="PostgreSQL-Lambda-install-extension"></a>

 Questa estensione fornisce all’istanza database RDS for PostgreSQL la possibilità di chiamare le funzioni Lambda da PostgreSQL. 

**Per installare l'`aws_lambda`estensione nell'istanza database**

Utilizza la riga di comando PostgreSQL `psql` o lo strumento pgAdmin per connetterti al all'istanza database RDS for PostgreSQL. 

1. Connettiti all'istanza database RDS for PostgreSQL come utente con privilegi `rds_superuser`. L'utente `postgres` predefinito viene visualizzato nell'esempio.

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

1. Installa l’estensione `aws_lambda`. Anche l'estensione `aws_commons` è obbligatoria. Fornisce funzioni di supporto ad `aws_lambda` e molte altre estensioni Aurora per PostgreSQL. Se non si trova già nella tua istanza database RDS for PostgreSQL, viene installata con `aws_lambda` come mostrato di seguito. 

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

L'estensione `aws_lambda` è installata nell'istanza database principale . Ora puoi creare strutture utili per richiamare le tue funzioni Lambda. 

## Fase 4: utilizzo delle funzioni di supporto Lambda con l'istanza database RDS for PostgreSQL (facoltativo)
<a name="PostgreSQL-Lambda-specify-function"></a>

Puoi utilizzare le funzioni di supporto nell'estensione `aws_commons` per preparare entità che è possibile richiamare più facilmente da PostgreSQL. Per farlo, devi disporre delle seguenti informazioni sulle funzioni Lambda:
+ **Nome funzione**: il nome, l'Amazon Resource Name (ARN), la versione o l'alias della funzione Lambda. La policy IAM creata in [Fase 2: configurazione di IAM per l'istanza e Lambda](#PostgreSQL-Lambda-access) richiede l'ARN, quindi ti consigliamo di utilizzare l'ARN della tua funzione.
+ **AWS Regione**: (Facoltativo) La AWS regione in cui si trova la funzione Lambda se non si trova nella stessa regione dell'istanza DB RDS per PostgreSQL del .

Per mantenere le informazioni sul nome della funzione Lambda, puoi utilizzare la funzione [aws\$1commons.create\$1lambda\$1function\$1arn](PostgreSQL-Lambda-functions.md#aws_commons.create_lambda_function_arn). Questa funzione di supporto crea una struttura composita `aws_commons._lambda_function_arn_1` con i dettagli necessari alla funzione di richiamo. Di seguito, puoi trovare tre approcci alternativi per l'impostazione di questa struttura composita.

```
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
```

Ognuno di questi valori può essere utilizzato nelle chiamate alla funzione [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke). Per alcuni esempi, consulta [Fase 5: richiamo di una funzione Lambda dall'istanza database RDS for PostgreSQL](#PostgreSQL-Lambda-invoke).

## Fase 5: richiamo di una funzione Lambda dall'istanza database RDS for PostgreSQL
<a name="PostgreSQL-Lambda-invoke"></a>

La funzione `aws_lambda.invoke` si comporta in modo sincrono o asincrono, a seconda del `invocation_type`. Le due alternative per questo parametro sono `RequestResponse` (il valore predefinito) e `Event`, come di seguito riportato. 
+ **`RequestResponse`**: questo tipo di richiamo è *sincrono*. Questo è il comportamento predefinito quando viene effettuata la chiamata senza specificare un tipo di chiamata. Il payload di risposta include i risultati della funzione `aws_lambda.invoke`. Utilizza questo tipo di chiamata quando il flusso di lavoro richiede la ricezione dei risultati della funzione Lambda prima di procedere. 
+ **`Event`**: questo tipo di richiamo è *asincrono*. La risposta non include un payload contenente i risultati. Utilizza questo tipo di richiamo quando il flusso di lavoro non ha bisogno di un risultato della funzione Lambda per continuare l'elaborazione.

Come semplice test della configurazione, puoi connetterti all'istanza database utilizzando `psql` e richiamare una funzione di esempio dalla riga di comando. Supponiamo di avere una delle funzioni di base impostate sul tuo servizio Lambda, come la semplice funzione Python mostrata nello screenshot di seguito.

![\[Esempio di funzione Lambda mostrata nel modulo AWS CLI AWS Lambda\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/UserGuide/images/lambda_simple_function.png)


**Per richiamare una funzione di esempio**

1. Connettiti all’istanza database utilizzando `psql` o pgAdmin.

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

1. Richiama la funzione utilizzando il relativo ARN.

   ```
   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 );
   ```

   La risposta è la seguente.

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

Se il tuo tentativo di richiamo non ha esito positivo, vedi [Messaggi di errore della funzione Lambda](PostgreSQL-Lambda-errors.md). 

## Fase 6: concessione delle autorizzazioni ad altri utenti per richiamare le funzioni Lambda
<a name="PostgreSQL-Lambda-grant-users-permissions"></a>

A questo punto della procedura, solo tu in qualità di `rds_superuser` puoi richiamare le funzioni Lambda. Per consentire ad altri utenti di richiamare le funzioni che crei, è necessario concedere loro l'autorizzazione. 

**Per concedere ad altri utenti l'autorizzazione per richiamare le funzioni Lambda**

1. Connettiti all’istanza database utilizzando `psql` o pgAdmin.

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

1. Esegui i seguenti comandi SQL:

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

# Esempi: Richiamo delle funzioni Lambda dall'istanza database RDS for PostgreSQL
<a name="PostgreSQL-Lambda-examples"></a>

Di seguito, è possibile trovare diversi esempi di chiamate alla funzione [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke). Nella maggior parte degli esempi viene utilizzata la struttura composita `aws_lambda_arn_1` creata in [Fase 4: utilizzo delle funzioni di supporto Lambda con l'istanza database RDS for PostgreSQL (facoltativo)](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) per semplificare il passaggio dei dettagli della funzione. Per un esempio di chiamata asincrona, consulta [Esempio: richiamo (di eventi) asincroni di funzioni Lambda](#PostgreSQL-Lambda-Event). Tutti gli altri esempi elencati utilizzano il richiamo sincrono. 

Per ulteriori informazioni sui tipi di chiamata Lambda, consulta [Richiamo di funzioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html) nella *Guida per gli sviluppatori di AWS Lambda *. Per ulteriori informazioni su `aws_lambda_arn_1`, consultare [aws\$1commons.create\$1lambda\$1function\$1arn](PostgreSQL-Lambda-functions.md#aws_commons.create_lambda_function_arn). 

**Topics**
+ [Esempio: invocazione sincrona (RequestResponse) di funzioni Lambda](#PostgreSQL-Lambda-RequestResponse)
+ [Esempio: richiamo (di eventi) asincroni di funzioni Lambda](#PostgreSQL-Lambda-Event)
+ [Esempio: acquisizione del registro di esecuzione Lambda in una risposta di funzione](#PostgreSQL-Lambda-log-response)
+ [Esempio: inclusione del contesto client in una funzione Lambda](#PostgreSQL-Lambda-client-context)
+ [Esempio: richiamo di una versione specifica di una funzione Lambda](#PostgreSQL-Lambda-function-version)

## Esempio: invocazione sincrona (RequestResponse) di funzioni Lambda
<a name="PostgreSQL-Lambda-RequestResponse"></a>

Di seguito sono riportati due esempi di una chiamata di funzione Lambda sincrona. I risultati di queste chiamate di funzione `aws_lambda.invoke` sono gli stessi.

```
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');
```

I parametri sono descritti come segue:
+ `:'aws_lambda_arn_1'`: questo parametro identifica la struttura composita creata in [Fase 4: utilizzo delle funzioni di supporto Lambda con l'istanza database RDS for PostgreSQL (facoltativo)](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) con la funzione di supporto di `aws_commons.create_lambda_function_arn`. Puoi anche creare questa struttura in linea all'interno della chiamata `aws_lambda.invoke` come segue: 

  ```
  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`: il payload JSON da passare alla funzione Lambda.
+ `'RequestResponse'`: il tipo di richiamo Lambda.

## Esempio: richiamo (di eventi) asincroni di funzioni Lambda
<a name="PostgreSQL-Lambda-Event"></a>

Di seguito è riportato un esempio di una chiamata di funzione Lambda asincrona. Il tipo di richiamo `Event` pianifica il richiamo della funzione Lambda con il payload di input specificato e restituisce immediatamente un risultato. Utilizza il tipo di chiamata `Event` in determinati flussi di lavoro che non dipendono dai risultati della funzione Lambda.

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

## Esempio: acquisizione del registro di esecuzione Lambda in una risposta di funzione
<a name="PostgreSQL-Lambda-log-response"></a>

È possibile includere gli ultimi 4 KB del registro di esecuzione nella risposta della funzione utilizzando il parametro `log_type` nella chiamata di funzione `aws_lambda.invoke`. Per impostazione predefinita, questo parametro è impostato su `None`, ma puoi specificare `Tail` per acquisire i risultati del registro di esecuzione Lambda nella risposta, come illustrato di seguito.

```
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');
```

Impostare il parametro [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) della funzione `log_type` su `Tail` per includere il log di esecuzione nella risposta. Il valore predefinito per il parametro `log_type` è `None`.

Il `log_result` che viene restituito è una stringa `base64` codificata. È possibile decodificare i contenuti utilizzando una combinazione delle funzioni PostgreSQL `decode` e `convert_from`.

Per ulteriori informazioni su `log_type`, consultare [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke).

## Esempio: inclusione del contesto client in una funzione Lambda
<a name="PostgreSQL-Lambda-client-context"></a>

La funzione `aws_lambda.invoke` ha un parametro `context` che puoi utilizzare per passare le informazioni separate dal payload, come illustrato di seguito. 

```
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');
```

Per includere il contesto client, utilizzare un oggetto JSON per il parametro [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) della funzione `context`.

Per ulteriori informazioni sul parametro `context`, consulta la documentazione di riferimento di [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke). 

## Esempio: richiamo di una versione specifica di una funzione Lambda
<a name="PostgreSQL-Lambda-function-version"></a>

Puoi specificare una determinata versione di una funzione Lambda includendo il parametro `qualifier` con la chiamata `aws_lambda.invoke`. Di seguito puoi trovare un esempio in cui viene utilizzato `'custom_version'` come alias per la versione.

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

Puoi inoltre fornire un qualificatore di funzione Lambda con i dettagli relativi al nome della funzione, come mostrato di seguito.

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

Per ulteriori informazioni su `qualifier` e altri parametri, consulta documentazione di riferimento di [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke).

# Messaggi di errore della funzione Lambda
<a name="PostgreSQL-Lambda-errors"></a>

Nell'elenco seguente sono disponibili informazioni sui messaggi di errore, con le possibili cause e soluzioni.
+ **Problemi di configurazione del VPC**

  I problemi di configurazione del VPC possono generare i seguenti messaggi di errore al momento della connessione: 

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

  Una causa comune di questo errore è il gruppo di sicurezza VPC configurato in modo errato. Assicurati di avere una regola in uscita per TCP aperta sulla porta 443 del gruppo di sicurezza VPC in modo che il VPC possa connettersi al VPC Lambda.

  Se la tua istanza database è privata, controlla la configurazione DNS privata per il tuo VPC. Assicurati di impostare il `rds.custom_dns_resolution` parametro su 1 e di configurarlo AWS PrivateLink come descritto in[Fase 1: configurare l'istanza DB RDS del per le connessioni in uscita a AWS Lambda](PostgreSQL-Lambda.md#PostgreSQL-Lambda-network). Per ulteriori informazioni, consulta [Interface VPC endpoints ()](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-private-dns).AWS PrivateLink 
+ **Mancanza delle autorizzazioni necessarie per richiamare le funzioni Lambda**

  Se viene visualizzato uno dei seguenti messaggi di errore, l'utente (ruolo) che richiama la funzione non dispone delle autorizzazioni appropriate.

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

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

  A un utente (ruolo) devono essere concesse autorizzazioni specifiche per richiamare le funzioni Lambda. Per ulteriori informazioni, consulta [Fase 6: concessione delle autorizzazioni ad altri utenti per richiamare le funzioni Lambda](PostgreSQL-Lambda.md#PostgreSQL-Lambda-grant-users-permissions). 
+ **Gestione impropria degli errori nelle funzioni Lambda**

  Se una funzione Lambda genera un'eccezione durante l'elaborazione della richiesta, `aws_lambda.invoke` non riesce e indica un errore PostgreSQL come quello seguente.

  ```
  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>".
  ```

  Assicurati di gestire gli errori nelle funzioni Lambda o nell'applicazione PostgreSQL.

# Informazioni di riferimento per le funzioni e i parametri AWS Lambda
<a name="PostgreSQL-Lambda-functions"></a>

Di seguito sono riportate informazioni di riferimento per le funzioni e i parametri da utilizzare per invocare Lambda con RDS per PostgreSQL.

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

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

Esegue una funzione Lambda per una istanza database RDS for PostgreSQL.

Per ulteriori dettagli sul richiamo delle funzioni Lambda, consulta anche [Invoke](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html) nella *Guida per gli sviluppatori di AWS Lambda*.

**Sintassi**

------
#### [ 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
)
```

------Parametri di input

**function\$1name**  
Nome identificativo della funzione Lambda. Il valore può essere il nome della funzione, un ARN o un ARN parziale. Per un elenco dei formati possibili, consulta [Formati dei nomi delle funzioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_RequestParameters) nella *Guida per gli sviluppatori di AWS Lambda*.

*payload*  
L'input per la funzione Lambda. Il formato può essere JSON o JSONB. Per ulteriori informazioni, consulta [Tipi di JSON](https://www.postgresql.org/docs/current/datatype-json.html) nella documentazione di PostgreSQL.

*region*  
(Facoltativo) La regione Lambda per la funzione. Per impostazione predefinita, RDS risolve la regione AWS dall'ARN completo nella `function_name` oppure utilizza la regione dell'istanza database RDS for PostgreSQL. Se il valore di questa Regione è in conflitto con quello fornito nell'ARN `function_name`, viene generato un errore.

*invocation\$1type*  
Il tipo di chiamata della funzione Lambda. Il valore prevede la distinzione tra lettere maiuscole e minuscole. I valori possibili sono:  
+ `RequestResponse` – Il valore predefinito. Questo tipo di chiamata per una funzione Lambda è sincrono e restituisce un payload di risposta nel risultato. Utilizzare il tipo di chiamata `RequestResponse` quando il flusso di lavoro dipende dalla ricezione immediata del risultato della funzione Lambda. 
+ `Event` – Questo tipo di chiamata per una funzione Lambda è asincrono e restituisce immediatamente una risposta senza un payload restituito. Utilizzare il tipo di chiamata `Event` quando non sono necessari i risultati della funzione Lambda prima che il flusso di lavoro proceda.
+ `DryRun` – Questo tipo di chiamata verifica l'accesso senza eseguire la funzione Lambda. 

*log\$1type*  
Il tipo di log Lambda da restituire nel parametro di output `log_result`. Il valore prevede la distinzione tra lettere maiuscole e minuscole. I valori possibili sono:  
+ Tail – Il parametro di output `log_result` restituito includerà gli ultimi 4 KB del registro di esecuzione. 
+ None – Non viene restituita nessuna informazione di log Lambda.

*context*  
Contesto client in formato JSON o JSONB. I campi da utilizzare includono `custom` e `env`.

*qualifier*  
Un qualificatore che identifica la versione di una funzione Lambda da richiamare. Se questo valore è in conflitto con quello fornito nell' `function_name` ARN, viene generato un errore.Parametri di output

*status\$1code*  
Un codice di risposta allo stato HTTP. Per ulteriori informazioni, consulta [Elementi di risposta del richiamo di Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_ResponseElements) nella *Guida per gli sviluppatori di AWS Lambda*.

*payload*  
Le informazioni restituite dalla funzione Lambda eseguita. Il formato è in JSON o JSONB.

*executed\$1version*  
La versione della funzione Lambda eseguita.

*log\$1result*  
Le informazioni del registro di esecuzione restituite se il valore `log_type` è `Tail` quando è stata richiamata la funzione Lambda. Il risultato contiene gli ultimi 4 KB del registro di esecuzione codificato in Base64.

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

Crea una struttura `aws_commons._lambda_function_arn_1` per contenere le informazioni sul nome della funzione Lambda. È possibile utilizzare i risultati della `aws_commons.create_lambda_function_arn` funzione nel parametro `function_name` della funzione [aws\$1lambda.invoke](#aws_lambda.invoke) aws\$1lambda.invoke. 

**Sintassi**

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

*function\$1name*  
Stringa di testo obbligatoria contenente il nome della funzione Lambda. Il valore può essere un nome di funzione, un ARN parziale o un ARN completo.

*region*  
Una stringa di testo facoltativa contenente la regione AWS in cui si trova la funzione Lambda. Per un elenco di nomi di regione e dei valori associati, consulta [Regioni, zone di disponibilità e Local Zones ](Concepts.RegionsAndAvailabilityZones.md).

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

In questa tabella sono illustrati i parametri associati alla funzione `aws_lambda`.


| Parametro | Descrizione | 
| --- | --- | 
| `aws_lambda.connect_timeout_ms` | Si tratta di un parametro dinamico che imposta il tempo di attesa massimo durante la connessione a AWS Lambda. Il valore predefinito è `1000`. I valori consentiti per questo parametro sono compresi tra 1 e 900.000. | 
| `aws_lambda.request_timeout_ms` | Si tratta di un parametro dinamico che imposta il tempo di attesa massimo durante l’attesa della risposta da AWS Lambda. Il valore predefinito è `3000`. I valori consentiti per questo parametro sono compresi tra 1 e 900.000. | 
| `aws_lambda.endpoint_override` | Specifica l’endpoint che può essere utilizzato per connettersi a AWS Lambda. Una stringa vuota seleziona l’endpoint AWS Lambda predefinito per la Regione. Per rendere effettiva la modifica del parametro statico, è necessario riavviare il database. | 