Création d'un Lambda scalaire UDF - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création d'un Lambda scalaire UDF

Amazon Redshift peut utiliser des fonctions personnalisées définies dans le AWS Lambda cadre de SQL requêtes. Vous pouvez écrire le scalaire UDFs Lambda dans tous les langages de programmation pris en charge par Lambda, tels que Java, Go, Node.js PowerShell, C#, Python et Ruby. Vous pouvez également utiliser une exécution personnalisée.

Les Lambda UDFs sont définis et gérés dans Lambda, et vous pouvez contrôler les privilèges d'accès pour les invoquer dans Amazon UDFs Redshift. Vous pouvez invoquer plusieurs fonctions Lambda dans la même requête ou invoquer la même fonction plusieurs fois.

Utilisez Lambda UDFs dans toutes les clauses des SQL instructions où les fonctions scalaires sont prises en charge. Vous pouvez également utiliser Lambda UDFs dans n'importe quelle SQL instruction telle queSELECT, UPDATEINSERT, ou. DELETE

Note

L'utilisation de Lambda UDFs peut entraîner des frais supplémentaires liés au service Lambda. Cela dépend de facteurs tels que le nombre de requêtes Lambda (UDFinvocations) et la durée totale d'exécution du programme Lambda. Toutefois, l'utilisation de Lambda UDFs dans Amazon Redshift est gratuite. Pour plus d'informations sur la tarification AWS Lambda, consultez AWS Lambda la section Tarification.

Le nombre de demandes Lambda varie en fonction de la clause d'SQLinstruction spécifique dans laquelle le UDF Lambda est utilisé. Supposons, par exemple, que la fonction soit utilisée dans une WHERE clause telle que la suivante.

SELECT a, b FROM t1 WHERE lambda_multiply(a, b) = 64; SELECT a, b FROM t1 WHERE a*b = lambda_multiply(2, 32)

Dans ce cas, Amazon Redshift appelle la première SELECT instruction pour chacune d'elles et n'appelle la seconde SELECT qu'une seule fois.

Cependant, l'utilisation de a UDF dans la partie projection de la requête peut n'appeler la fonction Lambda qu'une seule fois pour chaque ligne qualifiée ou agrégée du jeu de résultats.

Enregistrer un Lambda UDF

La commande CREATE EXTERNAL FUNCTION crée les paramètres suivants :

  • (Facultatif) Une liste d'arguments avec le type de données.

  • Un type de données de retour.

  • Un nom pour la fonction externe appelée par Amazon Redshift.

  • IAMRôle que le cluster Amazon Redshift est autorisé à assumer et à appeler à Lambda.

  • Un nom de fonction Lambda invoqué par le Lambda. UDF

Pour plus d'informations sur CREATE EXTERNALFUNCTION, voirCREATE EXTERNAL FUNCTION.

Les types de données d'entrée et de retour pour cette fonction peuvent être de n'importe quel type de données Amazon Redshift standard.

Amazon Redshift garantit que la fonction externe peut envoyer et recevoir des arguments et des résultats par lots.

Gestion de la UDF sécurité et des privilèges Lambda

Pour créer un LambdaUDF, assurez-vous que vous disposez des autorisations nécessaires pour l'utiliser sur. LANGUAGE EXFUNC Vous devez explicitement accorder USAGE LANGUAGE EXFUNC ou révoquer l'activation USAGE LANGUAGE EXFUNC à des utilisateurs, groupes ou publics spécifiques.

L'exemple suivant autorise l'utilisation EXFUNC àPUBLIC.

grant usage on language exfunc to PUBLIC;

L'exemple suivant révoque l'utilisation d'exfunc auprès du groupe d'utilisateurs lambda_udf_devs PUBLIC puis l'accorde au groupe d'utilisateurs lambda_udf_devs.

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

Pour exécuter une LambdaUDF, assurez-vous que vous disposez des autorisations nécessaires pour chaque fonction appelée. Par défaut, l'autorisation d'exécuter le nouveau Lambda UDFs est accordée à. PUBLIC Pour restreindre l'utilisation, révoquez cette autorisation PUBLIC pour la fonction. Ensuite, accordez le privilège à des utilisateurs ou à des groupes spécifiques.

L'exemple suivant révoque l'exécution de la fonction exfunc_sum from. PUBLIC Ensuite, il accorde le privilège USAGE au groupe d'utilisateurs 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;

Les super-utilisateurs ont tous les privilèges par défaut.

Pour plus d'informations sur l'octroi et la révocation des privilèges, consultez GRANT et REVOKE.

Configuration du paramètre d'autorisation pour Lambda UDFs

La CREATE EXTERNAL FUNCTION commande nécessite une autorisation pour appeler les fonctions Lambda dans. AWS Lambda Pour démarrer l'autorisation, spécifiez un rôle AWS Identity and Access Management (IAM) lorsque vous exécutez la CREATE EXTERNAL FUNCTION commande. Pour plus d'informations sur IAM les rôles, voir IAMles rôles dans le Guide de IAM l'utilisateur.

S'il existe un IAM rôle autorisé à invoquer des fonctions Lambda associées à votre cluster, vous pouvez remplacer votre rôle Amazon Resource Name (ARN) dans le ROLE paramètre IAM _ de la commande. Les sections suivantes décrivent les étapes d'utilisation d'un IAM rôle dans la CREATE EXTERNAL FUNCTION commande.

Création d'un IAM rôle pour Lambda

Le IAM rôle nécessite une autorisation pour appeler les fonctions Lambda. Lors de la création du IAM rôle, fournissez l'autorisation de l'une des manières suivantes :

  • Joignez la AWSLambdaRole politique sur la page Joindre la politique d'autorisations lors de la création d'un IAM rôle. La politique AWSLambdaRole accorde des autorisations pour invoquer des fonctions Lambda, ce qui est la condition minimale. Pour plus d'informations et pour d'autres politiques, consultez la section IAMPolitiques basées sur l'identité AWS Lambda dans le Guide du AWS Lambda développeur.

  • Créez votre propre politique personnalisée à associer à votre IAM rôle avec l'lambda:InvokeFunctionautorisation de toutes les ressources ou d'une fonction Lambda particulière associée à cette fonction. ARN Pour plus d'informations sur la création d'une politique, consultez la section Création de IAM politiques dans le Guide de IAM l'utilisateur.

    L'exemple de politique suivant permet d'invoquer Lambda sur une fonction Lambda particulière.

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

    Pour plus d'informations sur les ressources relatives aux fonctions Lambda, consultez la section Ressources et conditions relatives aux actions Lambda dans la référence. IAM API

    Après avoir créé votre politique personnalisée avec les autorisations requises, vous pouvez associer votre politique au IAM rôle sur la page Joindre une politique d'autorisations lors de la création d'un IAM rôle.

Pour savoir comment créer un IAM rôle, consultez la section Autoriser Amazon Redshift à accéder à AWS d'autres services en votre nom dans le guide de gestion Amazon Redshift.

Si vous ne souhaitez pas créer de nouveau IAM rôle, vous pouvez ajouter les autorisations mentionnées précédemment à votre IAM rôle existant.

Associer un IAM rôle au cluster

Associez le IAM rôle à votre cluster. Vous pouvez ajouter un rôle à un cluster ou consulter les rôles associés à un cluster à l'aide de la console de gestion Amazon RedshiftCLI, ou. API Pour plus d'informations, consultez la section Associer un IAM rôle à un cluster dans le guide de gestion Amazon Redshift.

Inclure le IAM rôle dans la commande

Incluez le IAM rôle ARN dans la CREATE EXTERNAL FUNCTION commande. Lorsque vous créez un IAM rôle, IAM renvoie un Amazon Resource Name (ARN) pour le rôle. Pour spécifier un IAM rôle, ARN indiquez-lui le IAM_ROLE paramètre. L'exemple suivant montre la syntaxe du paramètre IAM_ROLE.

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

Pour appeler des fonctions Lambda résidant dans d'autres comptes de la même région, consultez la section Chainage des IAM rôles dans Amazon Redshift.

Utilisation de l'JSONinterface entre Amazon Redshift et AWS Lambda

Amazon Redshift utilise une interface commune pour toutes les fonctions Lambda avec lesquelles Amazon Redshift communique.

Le tableau suivant présente la liste des champs de saisie auxquels les fonctions Lambda désignées peuvent s'attendre pour la JSON charge utile.

Nom de champ

Description

Plage de valeurs
request_id Un identifiant unique universel (UUID) qui identifie de manière unique chaque demande d'appel.

Un valideUUID.

cluster

Nom complet de la ressource Amazon (ARN) du cluster.

Un cluster valideARN.

utilisateur

Nom de l'utilisateur qui effectue l'appel. Un nom d'utilisateur valide.

database

Nom de la base de données sur laquelle la requête est exécutée. Un nom de base de données valide.

external_function

Nom entièrement qualifié de la fonction externe qui effectue l'appel. Un nom de fonction complet valide.

query_id

ID de la requête qui effectue l'appel. Un ID de requête valide.

num_records

Nombre d'arguments dans la charge utile. Une valeur de 1 à 2^64.

arguments

Charge utile de données dans le format spécifié. Les données au format tableau doivent être un JSON tableau. Chaque élément est un enregistrement qui est un tableau si le nombre d'arguments est supérieur à 1. En utilisant un tableau, Amazon Redshift préserve l'ordre des enregistrements dans la charge utile.

L'ordre de la JSON matrice détermine l'ordre du traitement par lots. La fonction Lambda doit traiter les arguments de manière itérative et produire le nombre exact d'enregistrements. Voici un exemple de charge utile.

{ "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] ] }

La sortie de retour de la fonction Lambda contient les champs suivants.

Nom de champ

Description

Plage de valeurs
success Indication du succès ou de l'échec de la fonction.

Une valeur de "true" ou "false".

error_msg

Message d'erreur si la valeur de succès est "false" (si la fonction échoue) ; sinon, ce champ est ignoré.

Un message valide.

num_records

Nombre d'enregistrements dans la charge utile. Une valeur de 1 à 2^64.

results

Résultats de l'appel dans le format spécifié. N/A

Voici un exemple de sortie de fonction 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 ] }

Lorsque vous appelez des fonctions Lambda à partir de SQL requêtes, Amazon Redshift garantit la sécurité de la connexion en tenant compte des considérations suivantes :

  • GRANTet REVOKE autorisations. Pour plus d'informations sur UDF la sécurité et les privilèges, consultezUDFsécurité et privilèges.

  • Amazon Redshift soumet uniquement le jeu minimal de données à la fonction Lambda désignée.

  • Amazon Redshift appelle uniquement la fonction Lambda désignée avec le rôle désigné. IAM