Passi per richiamare AWS Lambda come funzioni SQL

Mostra i passi per richiamare le funzioni remote AWS come funzioni SQL nel database.

Per richiamare AWS Lambda come funzioni SQL, creeremo un catalogo di funzioni SQL wrapper che fanno riferimento e chiamano la loro rispettiva funzione cloud tramite i loro endpoint API. Prima di creare questo catalogo, si presume che siano state create le funzioni cloud necessarie a cui questo catalogo fa riferimento.

Nota

Per accedere alle funzioni AWS lambda, è necessario configurare i criteri necessari. Per ulteriori informazioni, consulta la sezione relativa alla creazione di un criterio IAM per accedere alle risorse AWS Lambda e all'uso di criteri basati sulle risorse per Lambda.
  1. Creare una credenziale utilizzando la procedura DBMS_CLOUD.CREATE_CREDENTIAL. L'oggetto credenziale che si sta creando deve essere di tipo chiave segreta.
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'AWS_CRED',
        username        => 'access_key_ID',
        password        => 'secret_access_key'
      );
    END;
    /
    

    Viene creata la credenziale AWS_CRED.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedure.

  2. Crea catalogo.

    Un catalogo è una raccolta di funzioni wrapper che fanno riferimento e richiamano le rispettive funzioni cloud tramite gli endpoint API.

    Esempio di creazione di un catalogo per le funzioni 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.

    In questo modo viene creato il catalogo AWS_DEMO_CATALOG.

    Per ulteriori informazioni, vedere CREATE_CATALOG Procedure. È possibile eseguire una query sulle viste DBA_CLOUD_FUNCTION_CATALOG View e USER_CLOUD_FUNCTION_CATALOG View per recuperare la lista di tutti i cataloghi del database.

  3. È possibile elencare le funzioni in un catalogo.

    Di seguito è riportato l'esempio per elencare le funzioni 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/"
      }
    ]

    Per ulteriori informazioni, vedere LIST_FUNCTIONS Procedure.

  4. Eseguire DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS per creare funzioni SQL wrapper. È possibile utilizzare uno dei metodi seguenti per creare le funzioni SQL wrapper nel catalogo, che richiamano le rispettive funzioni cloud:
    • SYNC_FUNCTIONS: SYNC_FUNCTIONS è il metodo più rapido e semplice, che sincronizza automaticamente le funzioni wrapper (crea o elimina) nel catalogo con la lista completa delle funzioni cloud definite nell'area, nel compartimento e nella tenancy con cui è stato creato il catalogo. Ad esempio:

    
    BEGIN
     DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS (
            catalog_name => 'AWS_DEMO_CATALOG'
     );
    END;
    /
    PL/SQL procedure successfully completed.

    In questo modo viene creato un wrapper PL/SQL per l'aggiunta di nuove funzioni al catalogo e la rimozione di wrapper per le funzioni eliminate dal catalogo.

    Eseguire la seguente query per verificare la sincronizzazione.

    
    SELECT object_name FROM sys.all_objects WHERE owner='TEST_USER' AND object_type='FUNCTION';
    
    
    OBJECT_NAME
    --------------------------------------------------------------------------------
    TESTLAMBDA
    HELLP-PYTHON
    TESTLAM
    TEST3
    SUMOFNUMBERS
    
    Nota

    Per eseguire questo comando, tenere presente l'utente corrente.

    Per ulteriori informazioni, vedere SYNC_FUNCTIONS Procedure.

    • È possibile creare manualmente una funzione SQL nel catalogo che richiama la rispettiva funzione cloud utilizzando DBMS_CLOUD.CREATE_FUNCTION.

    Esempio di creazione di una funzione nel catalogo 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.

    In questo modo viene creata la funzione AWS_TESTLAMBDA nel catalogo AWS_DEMO_CATALOG.

    La funzione AWS_TESTLAMBDA nel catalogo è un riferimento alla rispettiva funzione cloud a cui il parametro FUNCTION_ID fa riferimento all'endpoint. Il richiamo della funzione nel catalogo insieme ai relativi argomenti esegue la funzione cloud corrispondente e fornisce l'output restituito dalla funzione cloud.

    È possibile eseguire una query sulle viste DBA_CLOUD_FUNCTION View e USER_CLOUD_FUNCTION View per recuperare la lista di tutte le funzioni del database.

    Per ulteriori informazioni, vedere CREATE_FUNCTION Procedure.

  5. Dopo aver creato la funzione, è possibile DESCRIBE e richiamarla.
    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!!"}

    Viene richiamata la funzione AWS_TESTLAMBDA richiamando il riferimento funzione arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python nel catalogo AWS_DEMO_CATALOG.

  6. È possibile eliminare una funzione esistente utilizzando la procedura DROP_FUNCTION. Ad esempio:
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AWS_DEMO_CATALOG', FUNCTION_NAME => 'AWS_TESTLAMBDA');
    
    PL/SQL procedure successfully completed.
    

    Questa operazione elimina la funzione AWS_TESTLAMBDA dal catalogo AWS_DEMO_CATALOG.

    Per ulteriori informazioni, vedere DROP_FUNCTION Procedure.

  7. È possibile eliminare un catalogo esistente utilizzando la procedura DROP_CATALOG. Ad esempio:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'AWS_DEMO_CATALOG'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.

    In questo modo AWS_DEMO_CATALOG viene eliminato dal database.

    Per ulteriori informazioni, vedere DROP_CATALOG Procedure.