Étapes pour appeler AWS Lambda en tant que fonctions SQL

Affiche les étapes permettant d'appeler des fonctions distantes AWS en tant que fonctions SQL dans votre base de données.

Pour appeler AWS Lambda en tant que fonctions SQL, nous allons créer un catalogue de fonctions de wrapper SQL qui référencent et appellent leur fonction cloud respective via leurs points d'extrémité d'API. Avant de créer ce catalogue, il est supposé que vous avez créé les fonctions en nuage nécessaires pour être référencées par ce catalogue.

Note

Pour accéder aux fonctions lambda AWS, vous devez configurer les politiques nécessaires. Pour plus d'informations, voir Création d'une politique IAM pour accéder aux ressources Lambda AWS et Utilisation de politiques basées sur des ressources pour Lambda.
  1. Créez des données d'identification à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL. L'objet de données d'identification que vous créez doit être de type clé secrète.
    SET DEFINE OFF
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'AWS_CRED',
        username        => 'access_key_ID',
        password        => 'secret_access_key'
      );
    END;
    /
    

    Cela crée les données d'identification AWS_CRED.

    Pour plus d'informations, voir ProcédureCREATE_CREDENTIAL.

  2. création d'un catalogue;

    Un catalogue est une collection de fonctions d'encapsuleur qui référencent et appellent leurs fonctions en nuage respectives au moyen de leurs points d'extrémité d'API.

    Exemple de création d'un catalogue pour les fonctions 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.

    Cela crée le catalogue AWS_DEMO_CATALOG.

    Pour plus d'informations, voir ProcédureCREATE_CATALOG. Vous pouvez interroger les vues Vue DBA_CLOUD_FUNCTION_CATALOG et Vue USER_CLOUD_FUNCTION_CATALOG pour extraire la liste de tous les catalogues de votre base de données.

  3. Vous pouvez répertorier les fonctions dans un catalogue.

    Voici l'exemple de liste des fonctions 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/"
      }
    ]

    Pour plus d'informations, voir ProcédureLIST_FUNCTIONS.

  4. Exécutez DBMS_CLOUD_FUNCTION.SYNC_FUNCTIONS pour créer des fonctions SQL d'encapsuleur. Vous pouvez utiliser l'une des méthodes suivantes pour créer les fonctions SQL du wrapper dans le catalogue, qui appellent leurs fonctions cloud respectives :
    • SYNC_FUNCTIONS : SYNC_FUNCTIONS est la méthode la plus rapide et la plus simple qui synchronise automatiquement (crée ou supprime) les fonctions d'encapsuleur dans le catalogue avec la liste complète des fonctions en nuage définies dans la région, le compartiment et la location avec lesquels le catalogue a été créé. Exemple :

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

    Cela crée un wrapper PL/SQL permettant d'ajouter de nouvelles fonctions au catalogue et de supprimer des wrappers pour les fonctions qui ont été supprimées du catalogue.

    Exécutez l'interrogation suivante pour vérifier la synchronisation.

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

    Conservez une note de l'utilisateur courant pour exécuter cette commande.

    Pour plus d'informations, voir ProcédureSYNC_FUNCTIONS.

    • Vous pouvez créer manuellement une fonction SQL dans votre catalogue qui appelle sa fonction en nuage respective à l'aide de DBMS_CLOUD.CREATE_FUNCTION.

    Exemple pour créer une fonction dans le catalogue 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.

    Cela crée la fonction AWS_TESTLAMBDA dans le catalogue AWS_DEMO_CATALOG.

    La fonction AWS_TESTLAMBDA dans le catalogue est une référence à la fonction en nuage respective dont le point d'extrémité est référencé par le paramètre FUNCTION_ID. L'appel de la fonction dans le catalogue avec ses arguments exécute la fonction cloud correspondante et fournit la sortie retournée par la fonction cloud.

    Vous pouvez interroger les vues Vue DBA_CLOUD_FUNCTION et Vue USER_CLOUD_FUNCTION pour extraire la liste de toutes les fonctions de votre base de données.

    Pour plus d'informations, voir ProcédureCREATE_FUNCTION.

  5. Une fois la fonction créée, vous pouvez DESCRIBE et l'appeler.
    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!!"}

    Cela appelle la fonction AWS_TESTLAMBDA en appelant la référence de fonction arn:aws:lambda:ap-northeast-1:378079562280:function:hellp-python dans le catalogue AWS_DEMO_CATALOG.

  6. Vous pouvez supprimer une fonction existante à l'aide de la procédure DROP_FUNCTION. Exemple :
    EXEC DBMS_CLOUD_FUNCTION.DROP_FUNCTION (CATALOG_NAME => 'AWS_DEMO_CATALOG', FUNCTION_NAME => 'AWS_TESTLAMBDA');
    
    PL/SQL procedure successfully completed.
    

    Cette action supprime la fonction AWS_TESTLAMBDA du catalogue AWS_DEMO_CATALOG.

    Pour plus d'informations, voir ProcédureDROP_FUNCTION.

  7. Vous pouvez supprimer un catalogue existant à l'aide de la procédure DROP_CATALOG. Exemple :
    BEGIN
        DBMS_CLOUD_FUNCTION.DROP_CATALOG (
          catalog_name     => 'AWS_DEMO_CATALOG'
      );
    END;
    /
    
    PL/SQL procedure successfully completed.

    Cette action supprime AWS_DEMO_CATALOG de la base de données.

    Pour plus d'informations, voir ProcédureDROP_CATALOG.