Etapas para Chamar o AWS Lambda como Funções SQL

Mostra as etapas para chamar funções remotas da AWS como funções SQL em seu banco de dados.

Para chamar o AWS Lambda como funções SQL, criaremos um catálogo de funções de encapsulador SQL que fazem referência e chamam sua respectiva função de nuvem por meio de seus pontos finais de API. Antes de criar este catálogo, presume-se aqui que você criou as funções de nuvem necessárias para serem referenciadas por este catálogo.

Observação

Para acessar as funções AWS lambda, você precisa configurar as políticas necessárias. Consulte Criando uma política do serviço IAM para acessar recursos do AWS Lambda e Usando políticas baseadas em recursos para o Lambda para obter mais informações.
  1. Crie uma credencial usando o procedimento DBMS_CLOUD.CREATE_CREDENTIAL. O objeto de credencial que você está criando deve ser do tipo chave secreta.
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'AWS_CRED',
        username        => 'access_key_ID',
        password        => 'secret_access_key'
      );
    END;
    /
    

    Isso cria a credencial AWS_CRED.

    Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.

  2. Criar um catálogo.

    Um catálogo é uma coleção de funções wrapper que fazem referência e chamam suas respectivas funções de nuvem por meio de seus pontos finais de API.

    Exemplo para criar um catálogo para funções da 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.

    Isso cria o catálogo AWS_DEMO_CATALOG.

    Consulte CREATE_CATALOG Procedures para obter mais informações. Você pode consultar as exibições DBA_CLOUD_FUNCTION_CATALOG View e USER_CLOUD_FUNCTION_CATALOG View para recuperar a lista de todos os catálogos do seu banco de dados.

  3. Você pode listar as funções em um catálogo.

    Veja a seguir o exemplo para listar as funções do 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 LIST_FUNCTIONS Procedimento para obter mais informações.

  4. Execute DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS para criar funções SQL wrapper. Você pode usar um dos seguintes métodos para criar as funções SQL wrapper no catálogo, que chamam suas respectivas funções de nuvem:
    • SYNC_FUNCTIONS: SYNC_FUNCTIONS é o método mais rápido e simples, que sincroniza automaticamente (cria ou exclui) funções wrapper no catálogo com a lista completa de funções de nuvem definidas na região, compartimento e tenancy com a qual o catálogo foi criado. Por exemplo:

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

    Isso cria um wrapper PL/SQL para adicionar novas funções ao catálogo e remover wrappers para funções que foram excluídas do catálogo.

    Execute a seguinte consulta para verificar a sincronização.

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

    Anote o usuário atual para executar esse comando.

    Consulte SYNC_FUNCTIONS Procedimento para obter mais informações.

    • Você pode criar manualmente uma Função SQL em seu catálogo que chame sua respectiva função de nuvem usando DBMS_CLOUD.CREATE_FUNCTION.

    Exemplo para criar uma função no 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.

    Isso cria a função AWS_TESTLAMBDA no catálogo AWS_DEMO_CATALOG.

    A função AWS_TESTLAMBDA no catálogo é uma referência à respectiva função de nuvem cujo ponto final é referenciado pelo parâmetro FUNCTION_ID. Chamar a função no catálogo junto com seus argumentos executa a função de nuvem correspondente e fornece a saída retornada pela função de nuvem.

    Você pode consultar as exibições DBA_CLOUD_FUNCTION View e USER_CLOUD_FUNCTION View para recuperar a lista de todas as funções do seu banco de dados.

    Consulte CREATE_FUNCTION Procedimento para obter mais informações.

  5. Depois que a função for criada, você poderá DESCRIBE e chamá-la.
    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!!"}

    Isso chama a função AWS_TESTLAMBDA chamando a referência de função arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python no catálogo AWS_DEMO_CATALOG.

  6. Você pode eliminar uma função existente usando o procedimento DROP_FUNCTION. Por exemplo:
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AWS_DEMO_CATALOG', FUNCTION_NAME => 'AWS_TESTLAMBDA');
    
    PL/SQL procedure successfully completed.
    

    Isso elimina a função AWS_TESTLAMBDA do catálogo AWS_DEMO_CATALOG.

    Consulte DROP_FUNCTION Procedimento para obter mais informações.

  7. Você pode eliminar um catálogo existente usando o procedimento DROP_CATALOG. Por exemplo:
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'AWS_DEMO_CATALOG'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.

    Isso elimina o AWS_DEMO_CATALOG do seu banco de dados.

    Consulte DROP_CATALOG Procedimento para obter mais informações.