Appeler des scripts génériques sur une instance Autonomous Database

Vous pouvez appeler des scripts génériques de type BASH, C ou Python sur votre base de données autonome d'IA.

À propos de l'exécution de scripts génériques sur une base de données d'intelligence artificielle autonome

Vous pouvez appeler des scripts génériques, y compris les scripts écrits en Bash, C ou Python, à partir d'une instance de base de données autonome d'IA.

Vous ne pouvez pas exécuter un script générique directement sur une instance de base de données d'IA autonome. À la place, le script est hébergé à distance sur une image de conteneur Extproc d'Oracle Autonomous AI Database s'exécutant dans un réseau en nuage virtuel (VCN) d'Oracle Cloud Infrastructure. Vous appelez des scripts génériques à partir de votre base de données d'intelligence artificielle autonome à l'aide des travaux Oracle Scheduler. Le travail Oracle Scheduler que vous créez doit être un travail exécutable. Les travaux exécutables peuvent exécuter des scripts shell ou d'autres exécutables.

Les scripts génériques de votre base de données d'intelligence artificielle autonome ne sont pris en charge que lorsque votre base de données se trouve sur un point d'extrémité privé. Pour exécuter des scripts génériques, vous devez obtenir, installer et configurer l'image de conteneur Oracle Autonomous AI Database avec l'agent EXTPROC installé. L'image de conteneur Autonomous AI Database EXTPROC vous permet d'appeler des procédures et des scripts externes écrits en BASH, C ou Python à partir de votre base de données Autonomous AI Database. L'instance d'agent EXTPROC est hébergée dans un sous-réseau privé et la base de données IA autonome accède à l'agent EXTPROC au moyen d'un point d'extrémité de connexion inverse.

Les scripts génériques sont déployés à l'aide des éléments suivants :

  • Une image de conteneur de base de données d'intelligence artificielle autonome fournie par Oracle avec l'agent EXTPROC installé. Oracle fournit l'image de conteneur sur les ensembles GitHub.

    Voir GitHub README pour obtenir et configurer l'image de conteneur EXTPROC :

    L'instance d'agent EXTPROC est hébergée à distance sur une image de conteneur s'exécutant dans un réseau en nuage virtuel (VCN) Oracle Cloud Infrastructure. La communication sécurisée entre votre base de données d'IA autonome et l'instance d'agent EXTPROC est sécurisée en définissant des règles de groupe de sécurité de réseau de sorte que le trafic soit autorisé entre votre instance de base de données d'IA autonome s'exécutant sur un point d'extrémité privé et l'instance d'agent EXTPROC. L'image de l'agent EXTPROC est préconfigurée pour héberger et exécuter des procédures externes sur le port 16000.

  • Procédures PL/SQL permettant d'enregistrer des environnements de point d'extrémité et de gérer les privilèges sur les points d'extrémité enregistrés. Pour plus d'informations, voir Ensemble DBMS_CLOUD_FUNCTION_ADMIN.

  • Procédures PL/SQL permettant de créer et de gérer des travaux et des programmes du planificateur pour appeler des scripts génériques.

    Pour plus d'informations, voir DBMS_SCHEDULER.

Suivez ces étapes pour exécuter un script générique à partir d'une instance de base de données du service d'intelligence artificielle autonome :

Charger le portefeuille pour créer une connexion sécurisée à l'instance d'agent EXTPROC

Un portefeuille auto-signé est créé dans le cadre de la création de l'application d'agent EXTPROC. Ce portefeuille vous permet d'accéder à l'instance d'agent EXTPROC à partir d'une instance de base de données du service d'intelligence artificielle autonome.

Pour exécuter des scripts génériques sur l'instance d'agent EXTPROC, la base de données d'intelligence artificielle autonome et l'agent EXTPROC se connectent à l'aide du protocole mTLS (mutual Transport Layer Security). Lorsque vous êtes connecté à l'agent EXTPROC avec mTLS, vous utilisez une connexion de base de données TCPS (Secure TCP) à l'aide de la norme TLS 1.2 avec un certificat d'autorité de certification de client (CA) approuvé. Pour plus d'informations, voir À propos de la connexion à une instance de base de données du service d'intelligence artificielle autonome.

Note

Vous pouvez également obtenir et utiliser un certificat public émis par une autorité de certification.

Comme préalable, vous devez exporter le portefeuille vers le stockage d'objets à partir du répertoire /u01/app/oracle/wallets/extproc_wallet/ sur la machine virtuelle où EXTPROC s'exécute. Cela permet à la base de données autonome d'IA d'utiliser le portefeuille pour accéder en toute sécurité à EXTPROC.

Chargez le portefeuille EXTPROC dans votre instance de base de données du service d'intelligence artificielle autonome :

  1. Importez le portefeuille, cwallet.sso, contenant les certificats de l'instance d'agent EXTPROC à partir du stockage d'objets dans votre base de données d'intelligence artificielle autonome. Notez ce qui suit pour le fichier de portefeuille :
    • Le fichier de portefeuille, ainsi que l'ID utilisateur et le mot de passe de la base de données, permettent d'accéder à l'instance d'agent EXTPROC. Stockez les fichiers de portefeuille dans un emplacement sécurisé et partagez-les uniquement avec les utilisateurs autorisés.

    • Ne renommez pas le fichier de portefeuille. Le fichier de portefeuille dans le stockage d'objets doit être nommé cwallet.sso.

  2. Créez des données d'identification pour accéder au stockage d'objets où vous stockez le fichier de portefeuille cwallet.sso. Voir Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres de nom d'utilisateur et de mot de passe pour différents services de stockage d'objets.
    La création de données d'identification pour accéder au magasin d'objets Oracle Cloud Infrastructure n'est pas requise si vous activez les données d'identification du principal de ressource. Pour plus d'informations, voir À propos de l'utilisation d'un principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.
  3. Créez un répertoire dans la base de données du service d'intelligence artificielle autonome pour le fichier de portefeuille cwallet.sso.
    CREATE DIRECTORY wallet_dir AS 'directory_location';

    Voir Créer un répertoire dans Autonomous AI Database pour plus d'informations sur la création de répertoires.

  4. Utilisez DBMS_CLOUD.GET_OBJECT pour télécharger le portefeuille à partir du stockage d'objets. Exemple :
    BEGIN
      DBMS_CLOUD.GET_OBJECT (
        credential_name     => 'DEF_CRED_NAME',
        object_uri          => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/cwallet.sso',
        directory_name      => 'WALLET_DIR'
    );
    END;
    /

    Dans cet exemple, namespace-string est l'espace de noms du service de stockage d'objets pour Oracle Cloud Infrastructure Object Storage et bucketname est le nom du seau. Pour plus d'informations, voir Espaces de noms du stockage d'objets.

    Le portefeuille est copié dans le répertoire créé à l'étape précédente, WALLET_DIR. Le portefeuille qui vous permet de vous connecter à l'instance d'agent EXTPROC est maintenant disponible dans votre instance de base de données du service d'intelligence artificielle autonome.

Etapes d'appel des scripts Python

Affiche les étapes permettant d'appeler des scripts Python sur une base de données autonome avec intelligence artificielle.

Après avoir configuré l'instance d'agent EXTPROC pour exécuter des scripts Python, vous enregistrez un point d'extrémité distant et créez des tâches du programmateur pour appeler les scripts.

Voici les conditions requises pour appeler des scripts Python sur une base de données autonome avec intelligence artificielle :

  • Les scripts génériques doivent être copiés dans l'instance d'agent EXTPROC. Pour plus d'informations, voir GitHub README.

  • Pour créer et gérer des travaux du planificateur afin d'appeler des scripts Python avec un utilisateur autre qu'ADMIN, vous devez disposer des privilèges suivants :

    • MANAGE SCHEDULER

    • CREATE JOB

    • Privilège sur le point d'extrémité distant enregistré

Rubriques

Enregistrer et gérer un point d'extrémité distant dans Autonomous Database

En tant qu'utilisateur ADMIN, effectuez les étapes suivantes pour enregistrer et gérer des points d'extrémité distants dans votre base de données du service d'intelligence artificielle autonome.

Enregistrer un point d'extrémité distant

Utilisez DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV pour enregistrer un point d'extrémité distant.

Exemple :

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.REGISTER_REMOTE_EXECUTION_ENV (
        remote_endpoint_name => 'rem_executable',
        remote_endpoint_url  => 'remote_extproc_hostname:16000',
        wallet_dir           => 'WALLET_DIR',
        remote_cert_dn       => 'CN=MACHINENAME'
);
END;
/

Cet exemple crée la bibliothèque rem_executable et enregistre l'instance d'agent EXTPROC spécifiée dans le paramètre remote_url de votre base de données d'intelligence artificielle autonome. L'instance d'agent EXTPROC est préconfigurée pour héberger des scripts génériques sur le port 16000.

Pour plus d'informations, voir ProcédureREGISTER_REMOTE_EXECUTION_ENV.

Gérer les privilèges sur un point d'extrémité enregistré

Cette étape est facultative et n'est requise que lorsqu'un utilisateur autre que l'administrateur doit appeler des scripts génériques à partir de la base de données du service d'intelligence artificielle autonome.

Utilisez DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV pour accorder le privilège sur le point d'extrémité enregistré à un utilisateur autre que l'administrateur.

Exemple :

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.GRANT_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE',
    user_name            => 'username');
END;
/

Cet exemple accorde le privilège sur REM_EXECUTABLE à l'utilisateur spécifié. Pour plus d'informations, voir ProcédureGRANT_REMOTE_EXECUTION_ENV.

Après avoir accordé le privilège sur le point d'extrémité enregistré, vous pouvez utiliser DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV pour révoquer le privilège sur le point d'extrémité enregistré d'un utilisateur.

Exemple :

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.REVOKE_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE',
    user_name            => 'username');
END;
/

Cet exemple révoque le privilège sur REM_EXECUTABLE de l'utilisateur spécifié. Pour plus d'informations, voir ProcédureREVOKE_REMOTE_EXECUTION_ENV.

Vous pouvez interroger DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANT pour lister les autorisations accordées pour tous les points d'extrémité distants. Pour plus d'informations, voir Vue DBA_CLOUD_FUNCTION_REMOTE_EXECUTION_GRANT.

Supprimer un point d'extrémité enregistré

Utilisez DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV pour supprimer un point d'extrémité distant enregistré.

Exemple :

BEGIN
 DBMS_CLOUD_FUNCTION_ADMIN.DEREGISTER_REMOTE_EXECUTION_ENV (   
    remote_endpoint_name => 'REM_EXECUTABLE');
END;
/

Cela supprime le point d'extrémité distant rem_executable de votre base de données d'intelligence artificielle autonome. Pour plus d'informations, voir ProcédureDEREGISTER_REMOTE_EXECUTION_ENV.

Créer et gérer des travaux du planificateur pour appeler des scripts génériques

Affiche les étapes de création et de gestion des tâches de programmateur pour appeler des scripts génériques à partir de la base de données d'intelligence artificielle autonome.

Pour exécuter les étapes suivantes en tant qu'utilisateur autre que ADMIN, vous devez disposer des privilèges requis. Pour plus d'informations, voir Étapes d'appel de scripts Python.
  1. Utilisez DBMS_SCHEDULER.CREATE_JOB pour créer une tâche de programmateur de type executable.

    Exemple :

    BEGIN
     DBMS_SCHEDULER.CREATE_JOB (
        job_name             => 'rem_exec_job',
        job_type             => 'executable',
        job_action           => 'script_location_in_remote_docker_image/name',
        number_of_arguments  => 1,
        enabled              => false,
        auto_drop            => true);
     END;
    /

    Cet exemple crée le travail du programmateur rem_exec_job de type exécutable.

    Le paramètre job_name spécifie le nom de la tâche.

    Le paramètre job_type spécifie le type d'action de tâche. Vous devez spécifier job_type comme exécutable pour appeler des scripts génériques sur votre base de données d'intelligence artificielle autonome.

    Le paramètre job_action spécifie l'action insérée de la tâche. Il s'agit de l'emplacement du script sur le point d'extrémité distant que vous devez appeler.

    Le paramètre number_of_arguments spécifie le nombre d'arguments de tâche.

    Le paramètre enabled indique si la tâche doit être activée immédiatement après sa création.

    Le paramètre auto_drop indique si la tâche doit être supprimée une fois terminée.

  2. Utilisez DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE pour définir la valeur de l'argument de tâche.

    Exemple :

    BEGIN
     DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
        job_name          => 'rem_exec_job',
        argument_position => 1,
        argument_value    => 'param1');
     END;
    /
  3. Utilisez DBMS_SCHEDULER.CREATE_JOB pour modifier l'attribut destination de la tâche rem_exec_job.

    Exemple :

    BEGIN
     DBMS_SCHEDULER.SET_ATTRIBUTE (
          name       => 'rem_exec_job',
          attribute  => 'destination',
          value      => 'REMOTE_EXTPROC:remote_endpoint_name');
     END;
    /

    Cet exemple modifie l'attribut destination de la tâche rem_exec_job pour spécifier le chemin d'accès à la bibliothèque distante.

    Le paramètre job_name spécifie le nom de la tâche.

    Le paramètre attribute spécifie l'attribut à modifier.

    Le paramètre value modifie l'attribut destination pour spécifier la destination du point d'extrémité distant.

    Le paramètre accepte une valeur de type chaîne au format REMOTE_EXTPROC:remote_endpoint_name, où remote_endpoint_name est le nom du point d'extrémité distant enregistré.

    Une erreur est survenue si vous ne disposez pas des privilèges sur le point d'extrémité spécifié.

    Pour plus d'informations, voir Sous-programmes DBMS_SCHEDULER.

  4. Exécutez DBMS_SCHEDULER.ENABLE le travail du programmateur.

    Exemple :

    BEGIN
     DBMS_SCHEDULER.ENABLE (
        name => 'rem_exec_job');
     END; 
    /

    Cet exemple active la tâche rem_exec_job. Pour plus d'informations, voir DBMS_SCHEDULER.

    Une fois le travail activé, le planificateur commence à l'exécuter.

    Interrogez la vue USER_CLOUD_FUNCTION_RUN_DETAILS et la vue DBA_CLOUD_FUNCTION_RUN_DETAILS pour voir le statut des tâches du programmateur.