Lambda scalare UDFs - Amazon Redshift

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 SQL query. 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 IAM ruolo che il cluster Amazon Redshift è autorizzato ad assumere e a chiamare in Lambda.

  • Un nome di funzione Lambda richiamato da Lambda. UDF

Per informazioni su, vedere. CREATE EXTERNAL FUNCTION 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 SQL istruzioni in cui sono supportate le funzioni scalari. Puoi anche usare Lambda UDFs in qualsiasi SQL istruzione comeSELECT, UPDATEINSERT, o. DELETE

Nota

L'utilizzo di Lambda UDFs può comportare costi aggiuntivi derivanti dal servizio Lambda. La possibilità di farlo dipende da fattori come il numero di richieste Lambda (UDFchiamate) 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 SQL dichiarazione specifica in cui viene utilizzata la Lambda. UDF Ad esempio, supponiamo che la funzione venga utilizzata in una WHERE clausola 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 SELECT istruzione per ciascuna istruzione e chiama la seconda SELECT una sola volta.

Tuttavia, l'utilizzo di a UDF nella parte di proiezione della query potrebbe richiamare la funzione Lambda solo una volta per ogni riga qualificata o aggregata nel set di risultati.

UDFsicurezza e autorizzazioni

Per creare una LambdaUDF, assicurati di disporre delle autorizzazioni per l'utilizzo su. LANGUAGE EXFUNC È necessario concedere USAGE LANGUAGE EXFUNC o revocare USAGE esplicitamente l'attivazione LANGUAGE EXFUNC a utenti, gruppi o pubblico specifici.

L'esempio seguente concede l'utilizzo a. EXFUNC PUBLIC

grant usage on language exfunc to PUBLIC;

L'esempio seguente revoca l'utilizzo di exfunc from PUBLIC e quindi ne concede l'utilizzo 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 LambdaUDF, assicurati di disporre dell'autorizzazione per ogni funzione chiamata. Per impostazione predefinita, l'autorizzazione a eseguire una nuova Lambda UDFs è concessa a. PUBLIC Per limitare l'utilizzo, revoca questo modulo di autorizzazione PUBLIC per la funzione. Quindi concedere il privilegio a individui o gruppi specifici.

L'esempio seguente revoca l'esecuzione sulla funzione exfunc_sum from. 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 CREATE EXTERNAL FUNCTION comando richiede l'autorizzazione per richiamare le funzioni Lambda in. AWS Lambda Per avviare l'autorizzazione, specifica un ruolo AWS Identity and Access Management (IAM) quando esegui il CREATE EXTERNAL FUNCTION comando. Per ulteriori informazioni sui IAM ruoli, consulta IAMi ruoli nella Guida IAM per l'utente.

Se esiste un IAM ruolo con autorizzazioni per richiamare le funzioni Lambda collegato al cluster, puoi sostituire il tuo ruolo Amazon Resource Name ARN () nel parametro ROLE _ IAM del comando. Le sezioni seguenti descrivono i passaggi per l'utilizzo di un IAM ruolo nel comando. CREATE EXTERNAL FUNCTION

Creare un IAM ruolo per Lambda

Il IAM ruolo richiede l'autorizzazione per richiamare le funzioni Lambda. Durante la creazione del IAM ruolo, fornisci l'autorizzazione in uno dei seguenti modi:

  • Allega la AWSLambdaRole politica nella pagina Allega criteri di autorizzazione durante la creazione di un IAM ruolo. La policy AWSLambdaRole concede le autorizzazioni per richiamare funzioni Lambda, che è il requisito minimo. Per ulteriori informazioni e altre politiche, consulta IAMPolitiche basate sull'identità AWS Lambda nella Guida per gli sviluppatori.AWS Lambda

  • Crea la tua politica personalizzata da associare al tuo IAM ruolo con l'lambda:InvokeFunctionautorizzazione di tutte le risorse o di una particolare funzione Lambda con l'autorizzazione ARN di quella funzione. Per ulteriori informazioni su come creare una politica, consulta Creazione IAM di politiche nella Guida per l'IAMutente.

    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, consulta Risorse e condizioni per le azioni Lambda nel riferimento. IAM API

    Dopo aver creato la policy personalizzata con le autorizzazioni richieste, puoi allegare la policy al IAM ruolo nella pagina Allega policy di autorizzazione durante la creazione di un ruolo. IAM

Per i passaggi per creare un IAM ruolo, consulta Autorizzazione di Amazon Redshift ad accedere ad AWS altri servizi per tuo conto nella Amazon Redshift Management Guide.

Se non desideri creare un nuovo IAM ruolo, puoi aggiungere le autorizzazioni menzionate in precedenza al ruolo esistente. IAM

Associazione di un IAM ruolo al cluster

Associa il IAM ruolo al tuo cluster. Puoi aggiungere un ruolo a un cluster o visualizzare i ruoli associati a un cluster utilizzando la console di gestione Amazon RedshiftCLI, oppure. API Per ulteriori informazioni, consulta Associating an IAM role with a cluster nella Amazon Redshift Management Guide.

Inclusione del IAM ruolo nel comando

Includi il IAM ruolo ARN nel CREATE EXTERNAL FUNCTION comando. Quando crei un IAM ruolo, IAM restituisce un Amazon Resource Name (ARN) per il ruolo. Per specificare un IAM ruolo, fornisci ARN al ruolo il IAM_ROLE parametro. 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, consulta Concatenamento dei ruoli IAM in Amazon Redshift.

Utilizzando l'JSONinterfaccia 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 utilizzati dalla Lambda designata che puoi aspettarti per il JSON payload.

Nome campo

Descrizione

Intervallo di valori
request_id Un identificatore universalmente univoco (UUID) che identifica in modo univoco ogni richiesta di richiamo.

UUIDUn valido.

cluster

L'Amazon Resource Name completo (ARN) del cluster.

Un cluster validoARN.

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 JSON array. 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'JSONarray determina l'ordine di elaborazione in 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 "true" o "false".

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 richiami le funzioni Lambda dalle SQL query, Amazon Redshift garantisce la sicurezza della connessione tenendo conto delle seguenti considerazioni:

  • GRANTe autorizzazioni. REVOKE Per ulteriori informazioni sulla UDF sicurezza e le autorizzazioni, vedere. UDFsicurezza e autorizzazioni

  • Amazon Redshift invia alla funzione Lambda designata solo il set minimo di dati.

  • Amazon Redshift chiama solo la funzione Lambda designata con il ruolo designato. IAM