Pasos para llamar a AWS Lambda como funciones SQL
Muestra los pasos para llamar a las 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 a sus respectivas funciones en la nube y las llamen a través de sus puntos finales de API. Antes de crear este catálogo, se supone que ha creado las funciones en la nube necesarias a las que puede hacer referencia este catálogo.
Nota
Nota: 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 mediante 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.
-
Crear un catálogo.
Un catálogo es una recopilación de funciones de envoltorio que hacen referencia a sus respectivas funciones en la nube y las llaman 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 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 enumerar 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 Procedimiento LIST_FUNCTIONS para obtener más información.
-
Ejecute
DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONSpara crear funciones SQL de envoltorio. Puede utilizar uno de los siguientes métodos para crear las funciones SQL de envoltorio en el catálogo, que llaman a sus respectivas funciones en la nube:- SYNC_FUNCTIONS:
SYNC_FUNCTIONSes el método más rápido y sencillo, que sincroniza automáticamente (crea o suprime) funciones de envoltorio en el 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 las 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
Nota: Anote el usuario actual para ejecutar este comando.Consulte el procedimiento SYNC_FUNCTIONS para obtener más información.
- Puede crear manualmente una función
SQLen 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_TESTLAMBDAen el catálogoAWS_DEMO_CATALOG.La función
AWS_TESTLAMBDAdel catálogo es una referencia a la función en la nube correspondiente a cuyo punto final hace referencia el parámetroFUNCTION_ID. La llamada a la función en el catálogo junto con sus argumentos ejecuta la función en la nube correspondiente y proporciona la salida devuelta por la función en la 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 Procedimiento CREATE_FUNCTION para obtener más información.
- SYNC_FUNCTIONS:
-
Después de crear la función, puede
DESCRIBEy llamarla.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!!"}**Esto llama a la función
AWS_TESTLAMBDAllamando a la referencia de funciónarn:aws:lambda:ap-northeast-1:378079562280:function:hellp-pythonen 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_TESTLAMBDAdel catálogoAWS_DEMO_CATALOG.Consulte 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_CATALOGde la base de datos.Consulte Procedimiento DROP_CATALOG para obtener más información.