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
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# PowerShell, Python e Ruby. Oppure è possibile usare un runtime personalizzato.
Il comando CREATE EXTERNAL FUNCTION 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.
I tipi di dati di input e di restituzione per questa funzione possono essere qualsiasi tipo di dati Amazon Redshift standard.
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.
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 UDF
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_udf_devs.
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_sum da PUBLIC. Concede quindi l'utilizzo al gruppo di utenti lambda_udf_devs.
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 e REVOKE.
Configurazione del parametro di autorizzazione per Lambda UDFs
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 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_ROLE 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
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 policyAWSLambdaRole
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 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 nella Guida per l'utente di IAM.La seguente policy di esempio consente di richiamare Lambda su una particolare funzione Lambda.
{ "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 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 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
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 nella Guida alla gestione di Amazon Redshift.
Inclusione del ruolo IAM nel comando
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.
Utilizzo dell'interfaccia JSON tra Amazon Redshift e AWS Lambda
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.
Nome campo |
Descrizione |
Intervallo di valori |
---|---|---|
request_id | Un identificatore universale univoco (UID, Universally Unique Identifier) che identifichi in modo univoco ogni richiesta di richiamo. |
Un UUID valido. |
cluster |
L'Amazon Resource Name (ARN) del cluster database. |
Un ARN del cluster valido. |
Utente |
Il nome dell'utente che effettua la chiamata. | Un nome utente valido. |
database |
Il nome del database su cui è in esecuzione la query. | Un nome valido del database. |
funzione external_ |
Il nome completo della funzione esterna che effettua la chiamata. | Un nome di funzione completo valido. |
query_id |
L'ID query della query che effettua la chiamata. | Un ID query valido. |
num_records |
Il numero di argomenti nel payload. | Un valore compreso tra 1 e 2^64. |
argomenti |
Il payload di dati nel formato specificato. | I dati in formato array devono essere un array JSON. Ogni elemento è un record che è un array se il numero di argomenti è maggiore di 1. Utilizzando un array, Amazon Redshift mantiene l'ordine dei record nel payload. |
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.
Nome campo |
Descrizione |
Intervallo di valori |
---|---|---|
success | L'indicazione di successo o fallimento per la funzione. |
Un valore di |
error_msg |
Il messaggio di errore se il valore di riuscita è "false" (se la funzione non riesce); in caso contrario, questo campo viene ignorato. |
Un messaggio valido. |
num_records |
Il numero di record nel payload. | Un valore compreso tra 1 e 2^64. |
results |
I risultati della chiamata nel formato specificato. | N/D |
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 ulteriori informazioni sulla sicurezza e le autorizzazioni UDF, consulta. Sicurezza e autorizzazioni UDF
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.