Pasos para llamar a AWS Lambda como funciones SQL
Muestra los pasos para llamar a funciones remotas de AWS como funciones SQL en la base de datos.
Para llamar a AWS Lambda como funciones SQL, crearemos un catálogo de funciones de envoltorio SQL que hagan referencia y llamen a sus respectivas funciones en la nube a través de sus puntos finales de API. Antes de crear este catálogo, se asume aquí que ha creado las funciones en la nube necesarias a las que se hará referencia en este catálogo.
Para acceder a las funciones lambda de AWS, debe configurar las políticas necesarias. Consulte Creación de una política de IAM para acceder a los recursos de AWS Lambda y Uso de políticas basadas en recursos para Lambda para obtener más información.
- Cree una credencial con el procedimiento
DBMS_CLOUD.CREATE_CREDENTIAL
. El objeto de credencial que está creando debe ser de tipo clave secreta.SET DEFINE OFF BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL
( credential_name => 'AWS_CRED', username => 'access_key_ID', password => 'secret_access_key' ); END; /Esto crea la credencial
AWS_CRED
.Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.
- Cree un catálogo.
Un catálogo es una recopilación de funciones de envoltorio que hacen referencia y llaman a sus respectivas funciones en la nube a través de sus puntos finales de API.
Ejemplo para crear un catálogo para las funciones de AWS.
BEGIN
DBMS_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.Esto crea el catálogo
AWS_DEMO_CATALOG
.Consulte el procedimiento CREATE_CATALOG para obtener más información. Puede consultar las vistas DBA_CLOUD_FUNCTION_CATALOG y USER_CLOUD_FUNCTION_CATALOG para recuperar la lista de todos los catálogos de la base de datos.
- Puede mostrar las funciones de un catálogo.
A continuación, se muestra un ejemplo para mostrar las funciones de AWS Lambda:
VAR function_list CLOB; BEGIN
DBMS_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/" } ]Consulte el procedimiento LIST_FUNCTIONS para obtener más información.
- Ejecute
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
para crear funciones SQL de envoltorio. Puede utilizar uno de los siguientes métodos para crear las funciones SQL del envoltorio en el catálogo, que llaman a sus respectivas funciones en la nube:-
SYNC_FUNCTIONS:
SYNC_FUNCTIONS
es el método más rápido y sencillo, que sincroniza (crea o suprime) automáticamente las funciones de envoltorio del catálogo con la lista completa de funciones en la nube definidas en la región, el compartimento y el arrendamiento con los que se ha creado el catálogo. Por ejemplo:
BEGIN
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS
( catalog_name => 'AWS_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Esto crea un envoltorio PL/SQL para agregar nuevas funciones al catálogo y eliminar envoltorios para funciones que se han suprimido del catálogo.
Ejecute la siguiente consulta para verificar la sincronización.
SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION'; OBJECT_NAME -------------------------------------------------------------------------------- TESTLAMBDA HELLP-PYTHON TESTLAM TEST3 SUMOFNUMBERS
Nota
Mantenga una nota del usuario actual para ejecutar este comando.Consulte el procedimiento SYNC_FUNCTIONS para obtener más información.
- Puede crear manualmente una función
SQL
en el catálogo que llame a su función en la nube respectiva medianteDBMS_CLOUD.CREATE_FUNCTION
.
Ejemplo para crear una función en el catálogo
AWS_DEMO_CATALOG
.BEGIN
DBMS_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.Esto crea la función
AWS_TESTLAMBDA
en el catálogoAWS_DEMO_CATALOG
.La función
AWS_TESTLAMBDA
del catálogo es una referencia a la función en la nube correspondiente cuyo punto final hace referencia al parámetroFUNCTION_ID
. La llamada a la función en el catálogo junto con sus argumentos ejecuta la función de nube correspondiente y proporciona la salida devuelta por la función de nube.Puede consultar las vistas DBA_CLOUD_FUNCTION y USER_CLOUD_FUNCTION para recuperar la lista de todas las funciones de la base de datos.
Consulte el procedimiento CREATE_FUNCTION para obtener más información.
-
- Una vez creada la función, puede ejecutar
DESCRIBE
y llamarla.DESC AWS_TESTLAMBDA COLUMN STATUS format a30 COLUMN OUTPUT format a30
SELECT AWS_TESTLAMBDA(NULL) FROM dual; AWS_TESTLAMBDA(NULL) ---------------------------------------------------- {"STATUS":"200","RESPONSE_BODY":"Hello Python!!"}
Esto llama a la función
AWS_TESTLAMBDA
llamando a la referencia de funciónarn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python
en el catálogoAWS_DEMO_CATALOG
. - Puede borrar una función existente mediante el procedimiento
DROP_FUNCTION
. Por ejemplo:EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AWS_DEMO_CATALOG', FUNCTION_NAME => 'AWS_TESTLAMBDA'); PL/SQL procedure successfully completed.
Esto borra la función
AWS_TESTLAMBDA
del catálogoAWS_DEMO_CATALOG
.Consulte el procedimiento DROP_FUNCTION para obtener más información.
- Puede borrar un catálogo existente mediante el procedimiento
DROP_CATALOG
. Por ejemplo:BEGIN
DBMS_CLOUD_FUNCTION.DROP_CATALOG
( catalog_name => 'AWS_DEMO_CATALOG' ); END; / PL/SQL procedure successfully completed.Esto borra
AWS_DEMO_CATALOG
de la base de datos.Consulte el procedimiento DROP_CATALOG para obtener más información.
Tema principal: Llamada a funciones definidas por el usuario