

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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à.

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

Amazon Redshift può utilizzare funzioni personalizzate definite AWS Lambda come parte delle query SQL. Puoi scrivere UDFs Lambda scalare in qualsiasi linguaggio di programmazione supportato da Lambda, come Java, Go, Node.js, C\$1 PowerShell, Python e Ruby. Oppure è possibile usare un runtime personalizzato.

Il comando [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md) crea i seguenti parametri:
+ (Facoltativo) Un elenco di argomenti con tipo di dati. 
+ Un tipo di dati restituito.
+ Un nome di funzione della funzione esterna chiamata da Amazon Redshift. 
+ Un ruolo IAM che il cluster Amazon Redshift è autorizzato ad assumere e chiamare Lambda.
+ Il nome di una funzione Lambda richiamato dalla funzione Lambda definita dall'utente.

Per informazioni su CREATE EXTERNAL FUNCTION, consultare [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md).

I tipi di dati di input e di ritorno per Lambda UDFs possono essere uno dei seguenti tipi:
+  SMALLINT 
+  INTEGER 
+  BIGINT 
+  DECIMAL 
+  REAL 
+  DOUBLE PRECISION 
+  CHAR 
+  VARCHAR 
+  BOOLEAN 
+  DATE 
+  TIMESTAMP 

Anche gli alias per questi tipi sono validi. Per un elenco completo dei tipi di dati e dei relativi alias, consulta [Tipi di dati](c_Supported_data_types.md).

Amazon Redshift assicura che la funzione esterna possa inviare e ricevere argomenti e risultati in batch. 

Le Lambda UDFs sono definite e gestite in Lambda e puoi controllare i privilegi di accesso per richiamarle in Amazon Redshift. UDFs È possibile richiamare più funzioni Lambda nella stessa query o richiamare la stessa funzione più volte.

Usa Lambda UDFs in tutte le clausole delle istruzioni SQL in cui sono supportate le funzioni scalari. Puoi anche usare Lambda UDFs in qualsiasi istruzione SQL come SELECT, UPDATE, INSERT o DELETE. 

**Nota**  
L'utilizzo di Lambda UDFs può comportare costi aggiuntivi derivanti dal servizio Lambda. Ciò dipende da fattori quali il numero di richieste Lambda (richiami alle funzioni definite dall'utente) e la durata totale dell'esecuzione del programma Lambda. Tuttavia, non sono previsti costi aggiuntivi per l'utilizzo di Lambda UDFs in Amazon Redshift. [Per informazioni sui prezzi di AWS Lambda, consulta AWS Lambda Prezzi.](https://aws.amazon.com/lambda/pricing)  
Il numero di richieste Lambda varia a seconda della clausola di istruzione SQL specifica in cui viene utilizzata la funzioni Lambda definite dall'utente. Si supponga, ad esempio, che la funzione sia utilizzata in una clausola WHERE come la seguente. ``  
`SELECT a, b FROM t1 WHERE lambda_multiply(a, b) = 64; SELECT a, b FROM t1 WHERE a*b = lambda_multiply(2, 32) `  
In questo caso, Amazon Redshift chiama la prima istruzione SELECT per ogni clausola e chiama la seconda istruzione SELECT una sola volta.  
Tuttavia, l'utilizzo di una funzione definita dall'utente nella parte di proiezione della query potrebbe richiamare la funzione Lambda una sola volta per ogni riga qualificata o aggregata nel set di risultati. 

## Sicurezza e autorizzazioni delle UDF
<a name="udf-lambda-security"></a>

Per creare una funzione Lambda definita dall'utente, assicurati di disporre delle autorizzazioni per l'utilizzo su LANGUAGE EXFUNC. È necessario concedere o revocare esplicitamente USE ON LANGUAGE EXFUNC a utenti, gruppi o pubblici specifici.

Nell'esempio seguente viene concesso l'utilizzo su EXFUNC a PUBLIC.

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

Nell'esempio seguente viene revocato l'utilizzo su exfunc da PUBLIC, quindi viene concesso al gruppo di utenti lambda\$1udf\$1devs.

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

Per eseguire una funzione Lambda definita dall'utente, assicurarsi di disporre delle autorizzazioni per ogni funzione chiamata. Per impostazione predefinita, l'autorizzazione a eseguire una nuova Lambda UDFs è concessa a PUBLIC. Per limitare l'utilizzo, revocare l'autorizzazione da PUBLIC. Quindi concedere il privilegio a individui o gruppi specifici.

Nell'esempio seguente viene revocata l'esecuzione su una funzione exfunc\$1sum da PUBLIC. Concede quindi l'utilizzo al gruppo di utenti 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;
```

Per impostazione predefinita gli utenti con privilegi avanzati hanno tutti i privilegi.

Per ulteriori informazioni su come concedere e revocare privilegi, consultare [GRANT](r_GRANT.md) e [REVOKE](r_REVOKE.md).

## Configurazione del parametro di autorizzazione per Lambda UDFs
<a name="udf-lambda-authorization"></a>

Il comando CREATE EXTERNAL FUNCTION richiede l'autorizzazione per richiamare le funzioni Lambda AWS Lambda. Per avviare l'autorizzazione, specifica un ruolo AWS Identity and Access Management (IAM) quando esegui il comando CREATE EXTERNAL FUNCTION. Per ulteriori informazioni sui ruoli IAM, consultare [Ruoli IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles.html) nella *Guida per l'utente di IAM*.

Se è presente un ruolo IAM esistente per richiamare funzioni Lambda collegate al cluster, è possibile sostituire l'Amazon Resource Name (ARN) del ruolo nel parametro IAM\$1ROLE per il comando. Nelle sezioni seguenti vengono descritti i passaggi per l'uso di un ruolo IAM nel comando CREATE EXTERNAL FUNCTION.

### Creazione di un ruolo IAM per Lambda
<a name="udf-lambda-create-iam"></a>

Il ruolo IAM richiede l'autorizzazione per richiamare le funzioni Lambda. Durante la creazione del ruolo IAM, fornire l'autorizzazione in uno dei modi seguenti:
+ Collegare la policy `AWSLambdaRole` sulla pagina **Collega policy di autorizzazioni** durante la creazione di un ruolo IAM. La policy `AWSLambdaRole` concede le autorizzazioni per richiamare funzioni Lambda, che è il requisito minimo. Per ulteriori informazioni e altre policy, consultare [Policy IAM basate sull'identità per AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html) nella *Guida per gli sviluppatori di AWS Lambda *.
+ Creare policy personalizzate da associare al ruolo IAM con l'autorizzazione `lambda:InvokeFunction` di tutte le risorse o di una particolare funzione Lambda con l'ARN di tale funzione. Per informazioni sulla creazione di policy IAM, consultare [Creazione di policy IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) nella *Guida per l'utente di IAM*.

  La seguente policy di esempio consente di richiamare Lambda su una particolare funzione Lambda.

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

****  

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

------

  Per ulteriori informazioni sulle risorse per le funzioni Lambda, consultare [Risorse e condizioni per operazioni Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html) in *Documentazione di riferimento dell'API IAM*.

  Dopo aver creato la policy personalizzata con le autorizzazioni richieste, è possibile collegare la policy al ruolo IAM sulla pagina **Collega policy di autorizzazioni** durante la creazione di un ruolo IAM.

Per i passaggi per creare un ruolo IAM, consulta [Autorizzazione di Amazon Redshift ad accedere ad AWS altri servizi per tuo conto](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) nella *Amazon Redshift* Management Guide.

Se non si desidera creare un nuovo ruolo IAM, è possibile aggiungere le autorizzazioni menzionate in precedenza al ruolo IAM esistente.

### Associazione di un ruolo IAM al cluster
<a name="udf-lambda-associate-iam"></a>

Collegare il ruolo IAM al cluster. È possibile aggiungere un ruolo a un cluster o visualizzare i ruoli associati a un cluster utilizzando la Console di gestione, la CLI o l'API di Amazon Redshift. Per ulteriori informazioni, consulta [Associazione di un ruolo IAM a un cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) nella *Guida alla gestione di Amazon Redshift*.

### Inclusione del ruolo IAM nel comando
<a name="udf-lambda-include-iam"></a>

Includere l'ARN del ruolo IAM nel comando CREATE EXTERNAL FUNCTION. Quando crei un ruolo IAM, IAM restituisce un Amazon Resource Name (ARN) per il ruolo. Per specificare un ruolo IAM, fornire l'ARN del ruolo con il parametro `IAM_ROLE`. Di seguito è mostrata la sintassi del parametro `IAM_ROLE`.

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

Per richiamare le funzioni Lambda che risiedono in altri account all'interno della stessa regione, consultare [Concatenazione di ruoli IAM in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles.html).

## Utilizzo dell'interfaccia JSON tra Amazon Redshift e AWS Lambda
<a name="udf-lambda-json"></a>

Amazon Redshift utilizza un'interfaccia comune per tutte le funzioni Lambda con cui Amazon Redshift comunica.

La tabella seguente mostra l'elenco dei campi di input che le funzioni Lambda designate possono aspettarsi per il payload JSON.

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

L'ordine dell'array JSON determina l'ordine di elaborazione batch. La funzione Lambda deve elaborare gli argomenti in maniera iterativa e produrre il numero esatto di record. Di seguito è riportato un esempio di 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]
   ]
 }
```

L'output restituito dalla funzione Lambda contiene i seguenti campi.

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

Di seguito è riportato un esempio di output di una funzione 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
   ]
}
```

Quando vengono richiamate le funzioni Lambda da query SQL, Amazon Redshift garantisce la sicurezza della connessione con le seguenti considerazioni:
+ Autorizzazioni GRANT e REVOKE. Per informazioni sulle sicurezza e sulle autorizzazioni delle UDF, consulta [Sicurezza e autorizzazioni delle UDF](udf-security-and-privileges.md).
+ Amazon Redshift invia alla funzione Lambda designata solo il set minimo di dati.
+ Amazon Redshift chiama solo la funzione Lambda designata con il ruolo IAM designato.