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.

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.
  1. 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.

  2. 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.

  3. 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.

  4. 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 mediante DBMS_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álogo AWS_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ámetro FUNCTION_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.

  5. 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ón arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python en el catálogo AWS_DEMO_CATALOG.

  6. 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álogo AWS_DEMO_CATALOG.

    Consulte el procedimiento DROP_FUNCTION para obtener más información.

  7. 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.