Etapes à suivre pour appeler AWS Lambda en tant que fonctions SQL
Affiche les étapes permettant d'appeler des fonctions distantes AWS en tant que fonctions SQL dans votre base de données.
Pour appeler AWS Lambda en tant que fonctions SQL, nous allons créer un catalogue de fonctions wrapper SQL qui référencent et appellent leur fonction cloud respective via leurs adresses d'API. Avant de créer ce catalogue, il est supposé que vous avez créé les fonctions cloud nécessaires à référencer par ce catalogue.
Pour accéder aux fonctions AWS lambda, vous devez configurer les stratégies nécessaires. Pour plus d'informations, reportez-vous à Création d'une stratégie IAM pour accéder aux ressources AWS Lambda et à Utilisation de stratégies basées sur les ressources pour Lambda.
- Créez des informations d'identification en utilisant la procédure
DBMS_CLOUD.CREATE_CREDENTIAL. L'objet d'informations d'identification que vous créez doit être de type clé secrète.SET DEFINE OFF BEGINDBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'AWS_CRED', username => 'access_key_ID', password => 'secret_access_key' ); END; /Les informations d'identification
AWS_CREDsont ainsi créées.Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.
- Création d'un catalogue
Un catalogue est un ensemble de fonctions de wrapper qui référencent et appellent leurs fonctions cloud respectives via leurs adresses d'API.
Exemple de création d'un catalogue pour les fonctions AWS.
BEGINDBMS_CLOUD_FUNCTION.CREATE_CATALOG( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', service_provider => 'AWS', cloud_params => '{"region_id":"ap-northeast-1"}' ); END; / PL/SQL procedure successfully completed.Le catalogue
AWS_DEMO_CATALOGest ainsi créé.Pour plus d'informations, reportez-vous à Procédure CREATE_CATALOG. Vous pouvez interroger les vues DBA_CLOUD_FUNCTION_CATALOG View et USER_CLOUD_FUNCTION_CATALOG View pour extraire la liste de tous les catalogues de la base de données.
- Vous pouvez répertorier les fonctions dans un catalogue.
Voici l'exemple pour répertorier les fonctions AWS Lambda :
VAR function_list CLOB; BEGINDBMS_CLOUD_FUNCTION.LIST_FUNCTIONS( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', function_list => :function_list ); END; / PL/SQL procedure successfully completed. SELECT JSON_QUERY (:function_list, '$' RETURNING VARCHAR2(32676) pretty) AS search_results FROM dual; SEARCH_RESULTS --This is a sample output ------------------------------------------------------------------------------------------------ [ { "functionName" : "test3_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:test3_example", "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, { "functionName" : "SumOfNum_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:SumOfNum_example" SEARCH_RESULTS --------------------------------------------------------------------------------------------------- "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, { "functionName" : "testlambda_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:testlambda_example", "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, SEARCH_RESULTS --------------------------------------------------------------------------------------------------- { "functionName" : "hellp-python_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:hellp-python_example", "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" }, { "functionName" : "testlam_example", "functionArn" : "arn:aws:lambda:ap-north-1:378:func:testlam_example", SEARCH_RESULTS --------------------------------------------------------------------------------------------------- "invokeEndpoint" : "https://swiy3.lambda-url.ap-north-1.on.aws_example/" } ]Pour plus d'informations, reportez-vous à Procédure LIST_FUNCTIONS.
- Exécutez
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONSpour créer des fonctions SQL de wrapper. Vous pouvez utiliser l'une des méthodes suivantes pour créer les fonctions SQL wrapper dans le catalogue, qui appellent leurs fonctions cloud respectives :-
SYNC_FUNCTIONS :
SYNC_FUNCTIONSest la méthode la plus rapide et la plus simple qui synchronise automatiquement (crée ou supprime) les fonctions de wrapper dans le catalogue avec la liste complète des fonctions cloud définies dans la région, le compartiment et la location avec lesquels le catalogue a été créé. Par exemple :
BEGINDBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS( catalog_name => 'AWS_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Cela crée un wrapper PL/SQL pour ajouter de nouvelles fonctions au catalogue et enlever des wrappers pour les fonctions qui ont été supprimées du catalogue.
Exécutez la requête suivante pour vérifier la synchronisation.
SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION'; OBJECT_NAME -------------------------------------------------------------------------------- TESTLAMBDA HELLP-PYTHON TESTLAM TEST3 SUMOFNUMBERSRemarque
Notez l'utilisateur en cours pour exécuter cette commande.Pour plus d'informations, reportez-vous à Procédure SYNC_FUNCTIONS.
- Vous pouvez créer manuellement une fonction
SQLdans votre catalogue qui appelle sa fonction cloud respective à l'aide deDBMS_CLOUD.CREATE_FUNCTION.
Exemple permettant de créer une fonction dans le catalogue
AWS_DEMO_CATALOG.BEGINDBMS_CLOUD_FUNCTION.CREATE_FUNCTION( credential_name => 'AWS_CRED', catalog_name => 'AWS_DEMO_CATALOG', function_name => 'aws_testlambda', function_id => 'arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python' ); END; / PL/SQL procedure successfully completed.La fonction
AWS_TESTLAMBDAest ainsi créée dans le catalogueAWS_DEMO_CATALOG.La fonction
AWS_TESTLAMBDAdans le catalogue est une référence à la fonction cloud respective dont l'adresse est référencée par le paramètreFUNCTION_ID. L'appel de la fonction dans le catalogue avec ses arguments exécute la fonction cloud correspondante et fournit la sortie renvoyée par la fonction cloud.Vous pouvez interroger les vues DBA_CLOUD_FUNCTION View et USER_CLOUD_FUNCTION View pour extraire la liste de toutes les fonctions de la base de données.
Pour plus d'informations, reportez-vous à Procédure CREATE_FUNCTION.
-
- Une fois la fonction créée, vous pouvez
DESCRIBEet l'appeler.DESC AWS_TESTLAMBDA COLUMN STATUS format a30 COLUMN OUTPUT format a30SELECT AWS_TESTLAMBDA(NULL) FROM dual; AWS_TESTLAMBDA(NULL) ---------------------------------------------------- {"STATUS":"200","RESPONSE_BODY":"Hello Python!!"}La fonction
AWS_TESTLAMBDAest appelée en appelant la référence de fonctionarn:aws:lambda:ap-northeast-1:378079562280:function:hellp-pythondans le catalogueAWS_DEMO_CATALOG. - Vous pouvez supprimer une fonction existante en utilisant la procédure
DROP_FUNCTION. Par exemple :EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AWS_DEMO_CATALOG', FUNCTION_NAME => 'AWS_TESTLAMBDA'); PL/SQL procedure successfully completed.La fonction
AWS_TESTLAMBDAest supprimée du catalogueAWS_DEMO_CATALOG.Pour plus d'informations, reportez-vous à Procédure DROP_FUNCTION.
- Vous pouvez supprimer un catalogue existant en utilisant la procédure
DROP_CATALOG. Par exemple :BEGINDBMS_CLOUD_FUNCTION.DROP_CATALOG( catalog_name => 'AWS_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Cette opération supprime
AWS_DEMO_CATALOGde la base de données.Pour plus d'informations, reportez-vous à Procédure DROP_CATALOG.
Rubrique parent : Appel de fonctions définies par l'utilisateur