Remarque :

Utiliser Oracle Functions pour charger des fichiers dans une base de données autonome

Introduction

Dans ce tutoriel, vous allez créer des buckets Object Storage, une fonction Oracle, Oracle Autonomous Data Warehouse et déclencher la fonction dès qu'un fichier est téléchargé vers Object Storage. La fonction prend le fichier et l'écrit dans la base de données.

Objectifs

Prérequis pour Functions

Créer un compartiment

Ignorez cette étape si vous utilisez une location gratuite fournie par Oracle.

Si vous souhaitez utiliser un compartiment existant, passez à l'étape suivante. Sinon, cliquez sur Compartiments, puis sur Créer un compartiment pour créer un compartiment.

Créer un VCN et des sous-réseaux

Si un VCN approprié dans lequel créer des ressources réseau n'existe pas déjà, connectez-vous à la console en tant qu'administrateur de location et sous Infrastructure de base, accédez à Fonctions de réseau, puis :

  1. Cliquez sur Réseaux cloud virtuels et choisissez un compartiment à l'étape précédente.
  2. Cliquez sur Démarrer l'assistant VCN, VCN avec connectivité Internet, puis Démarrer l'assistant VCN.
  3. Saisissez le nom du nouveau VCN (par exemple : fn-vcn), cliquez sur Suivant, puis sur Créer pour créer le VCN avec les ressources réseau associées.

Création d'une stratégie pour Oracle Functions

Connectez-vous à la console en tant qu'administrateur de location. Sous Gouvernance et administration, accédez à Identité, cliquez sur Stratégies, puis procédez comme suit :

  1. Sélectionner le compartiment racine de la location

  2. Cliquez sur Créer une stratégie.

  3. Pour le nom, entrez faas-policy.

  4. Pour la description, entrez Policy for Functions.

  5. Cliquez sur le lien Personnaliser (Avancé) et collez les instructions de stratégie dans le champ Générateur de stratégies :

    Allow group <group-name> to read metrics in tenancy
    Allow group <group-name> to read objectstorage-namespaces in tenancy
    Allow group <group-name> to use virtual-network-family in tenancy
    Allow group <group-name> to manage functions-family in tenancy
    Allow group <group-name> to use cloud-shell in tenancy
    
  6. Cliquez sur Créer.

    Créer une stratégie

    Assurez-vous que l'utilisateur fait partie du groupe référencé dans les instructions de stratégie ci-dessus. Pour créer des groupes et ajouter des utilisateurs aux groupes, reportez-vous à Création d'un groupe.

Création d'une application

Cette étape consiste à créer une application et à configurer l'interface de ligne de commande Fn sur Cloud Shell.

  1. Sous Solutions et plate-forme, sélectionnez Services de développeur et cliquez sur Fonctions.

  2. Sélectionnez le compartiment de développement dans la liste Compartiment.

  3. Cliquez sur Créer une application.

  4. Entrez le nom etl-app.

  5. Sélectionnez le VNC créé précédemment (e.g. fn-vcn).

  6. Sélectionnez le sous-réseau public.

  7. Cliquez sur Créer.

  8. Cliquez sur l'application créée pour ouvrir ses détails.

  9. Cliquez sur le lien Mise en route et suivez les sections Début de la session Cloud Shell et Configuration de l'interface de ligne de commande Fn sur Cloud Shell dans Configuration de Cloud Shell.

    Créer une application

    Cela implique de lancer Cloud Shell, de mettre à jour le contexte Fn, de générer un jeton d'authentification pour le registre et de se connecter à Oracle Cloud Infrastructure Registry.

Créer un groupe dynamique

Pour utiliser d'autres services OCI, votre fonction doit faire partie d'un groupe dynamique. Pour plus d'informations sur la création de groupes dynamiques, reportez-vous à la documentation.

Avant de créer un groupe dynamique, vous devez obtenir l'OCID de compartiment de développement. Vous utiliserez l'OCID de compartiment dans la règle de mise en correspondance de groupe dynamique.

  1. Ouvrez le menu de navigation, sélectionnez Identité, puis Compartiments.
  2. Recherchez votre compartiment de développement dans la liste, placez le curseur de la souris sur la cellule dans la colonne OCID, puis cliquez sur Copier pour copier l'OCID de compartiment dans le presse-papiers.
  3. Stockez l'OCID de compartiment tel que vous l'utiliserez prochainement.

Vous êtes maintenant prêt à créer un groupe dynamique.

  1. Pour créer un groupe dynamique, ouvrez le menu de navigation, sélectionnez Identité, puis Groupes dynamiques.

  2. Cliquez sur Créer un groupe dynamique.

  3. Entrez le nom functions-dynamic-group.

  4. Pour la description, entrez Group with all functions in a compartment.

  5. Pour sélectionner les fonctions appartenant au groupe dynamique, [écrivez les règles de mise en correspondance] (https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Tasks/managingdynamicgroups.htm#Writing). Ecrivez la règle de mise en correspondance suivante qui inclut toutes les fonctions d'un compartiment dans lequel vous avez créé l'application :

    All {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..example'}
    

    Remarque : veillez à remplacer la valeur ci-dessus par l'OCID de compartiment stocké précédemment.

Créer un bucket Object Storage

Vous avez besoin d'un bucket input-bucket dans Object Storage. Vous allez utiliser input-bucket pour déposer les fichiers CSV. La fonction traite le fichier et l'importe dans Oracle Autonomous Data Warehouse.

Créons d'abord le fichier input-bucket :

  1. Ouvrez le menu de navigation, sélectionnez Object Storage, puis Object Storage.

  2. Sélectionnez le compartiment de développement dans la liste Compartiment.

  3. Cliquez sur Créer un bucket.

  4. Nommez le bucket input-bucket.

  5. Sélectionnez le niveau de stockage Standard.

  6. Cochez la case Emettre des événements d'objet.

  7. Cliquez sur Créer un bucket.

    Créer un bucket d'entrée

Création de stratégies IAM

Créez une stratégie qui permet au groupe dynamique (functions-dynamic-group) de gérer les objets dans le bucket.

  1. Ouvrez le menu de navigation, sélectionnez Identité, puis Stratégies.

  2. Cliquez sur Créer une stratégie.

  3. Entrez le nom functions-buckets-policy.

  4. Pour la description, entrez Policy that allows functions dynamic group to manage objects in the bucket.

  5. Cliquez sur le lien Personnaliser (Avancé) et collez les instructions de stratégie dans le champ Générateur de stratégies :

    Allow dynamic-group functions-dynamic-group to manage objects in compartment [compartment-name] where target.bucket.name='input-bucket'
    

    Remarque : remplacez compartment-name par le nom de votre compartiment de développement (celui dans lequel vous avez créé le VCN et l'application de fonction).

  6. Cliquez sur Créer.

    Créer des fonctions-buckets-policy

Créer une instance Autonomous Database

La fonction accède à la base de données autonome à l'aide de SODA (Simple Oracle Document Access) pour plus de simplicité. Vous pouvez utiliser l'autre type d'accès en modifiant la fonction.

  1. Ouvrez le menu de navigation et sélectionnez Autonomous Data Warehouse.

  2. Cliquez sur Créer une base de données autonome.

  3. Dans la liste, sélectionnez le compartiment de développement.

  4. Pour le nom d'affichage et le nom de la base de données, entrez funcdb.

  5. Pour le type de charge globale, sélectionnez Traitement des transactions.

  6. Pour le type de déploiement, sélectionnez Infrastructure partagée.

  7. Entrez le mot de passe d'administrateur.

  8. Cliquez sur Créer une base de données autonome.

    Créer une instance Autonomous Database

Attendez qu'OCI provisionne la base de données autonome, puis cliquez sur le bouton Console de service.

  1. Dans la barre latérale, cliquez sur Développement.

  2. Sous Services RESTful et SODA, cliquez sur Copier l'URL.

  3. A partir de votre terminal (ou Cloud Shell), créez la collection nommée regionsnumbers en exécutant la commande ci-dessous. Veillez à remplacer <ORDS_BASE_URL> par la valeur que vous avez copiée à l'étape précédente et <DB-PASSWORD> par le mot de passe d'administrateur que vous avez défini lors de la création de la base de données autonome.

    export ORDS_BASE_URL=<ORDS_BASE_URL>
    curl -X PUT -u 'ADMIN:<DB-PASSWORD>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/regionsnumbers
    
  4. Pour créer une collection de chèques doubles, vous pouvez répertorier toutes les collections. La sortie doit ressembler à ce qui suit :

    	bash
    $ curl -u 'ADMIN:<DB-password>' -H "Content-Type: application/json" $ORDS_BASE_URL/admin/soda/latest/
       
    {"items":[{"name":"regionsnumbers","properties":{"schemaName":"ADMIN","tableName":"REGIONSNUMBERS","keyColumn":{"name":"ID","sqlType":"VARCHAR2","maxLength":255,"assignmentMethod":"UUID"},"contentColumn":{"name":"JSON_DOCUMENT","sqlType":"BLOB","jsonFormat":"OSON"},"versionColumn":{"name":"VERSION","type":"String","method":"UUID"},"lastModifiedColumn":{"name":"LAST_MODIFIED"},"creationTimeColumn":{"name":"CREATED_ON"},"readOnly":false},"links":[{"rel":"canonical","href":"https://.../ords/admin/soda/latest/regionsnumbers"}]}],"hasMore":false}
    

Déployer la fonction

Cette étape consiste à cloner le référentiel de code source des fonctions et à utiliser la commande fn deploy pour créer l'image Docker, la propager vers OCIR et la déployer vers Oracle Functions dans votre application.

  1. Dans l'interface utilisateur de la console, ouvrez Cloud Shell.

  2. Clonez le référentiel de code source Functions :

    git clone https://github.com/oracle/oracle-functions-samples.git
    
  3. Accédez au dossier samples/oci-load-file-into-adw-python :

    cd oracle-functions-samples/samples/oci-load-file-into-adw-python
    
  4. Déployez la fonction vers etl-app :

    fn -v deploy --app etl-app
    

    Après avoir déployé la fonction, vous devez définir des valeurs de configuration de fonction afin que la fonction sache comment se connecter à Autonomous Database.

  5. A l'aide de la CLI Fn, définissez les valeurs de configuration suivantes. Veillez à remplacer [ORDS_BASE_URL] et [DB_PASSWORD] par les valeurs suivantes :

    fn config function etl-app oci-load-file-into-adw-python ords-base-url [ORDS_BASE_URL]
    fn config function etl-app oci-load-file-into-adw-python db-schema admin
    fn config function etl-app oci-load-file-into-adw-python db-user admin
    fn config function etl-app oci-load-file-into-adw-python dbpwd-cipher [DB-PASSWORD]
    fn config function etl-app oci-load-file-into-adw-python input-bucket input-bucket
    fn config function etl-app oci-load-file-into-adw-python processed-bucket processed-bucket
    

Créer une règle d'événement

Cette étape consiste à configurer un événement cloud pour déclencher la fonction lorsque vous déposez les fichiers dans input-bucket.

  1. Dans l'interface utilisateur de la console, ouvrez la navigation, sélectionnez Intégration d'application, puis cliquez sur Service d'événements.

  2. Sélectionnez le compartiment de développement dans la liste Compartiment.

  3. Cliquez sur Créer une règle.

  4. Pour le nom d'affichage, entrez load_CSV_into_ADW.

  5. Pour la description, entrez Load CSV file into ADW.

  6. Créez trois règles. Vous pouvez cliquer sur Autre condition pour ajouter d'autres conditions :

    Condition Nom d'attribut/de service Valeurs d'attribut/de type d'événement
    Type d'événement Stockage d'objet Objet - Création
    Attribut compartmentName
    Attribut bucketName bucket d'entrée
  7. Sous Actions, sélectionnez Fonctions :

    • Pour le compartiment de fonction, sélectionnez votre compartiment de développement.
    • Pour l'application de fonction, sélectionnez etl-app.
    • Pour la fonction, sélectionnez oci-load-file-into-adw-python.
  8. Cliquez sur Créer une règle.

    Règle

Tester la fonction

Pour tester la fonction, vous pouvez télécharger un fichier .csv vers input-bucket. Pour ce faire, accédez à l'interface utilisateur de la console ou à Cloud Shell à l'aide de l'interface de ligne de commande OCI.

  1. Ouvrez Cloud Shell.

  2. Accédez au dossier Functions (Fonctions) :

    cd ~/oracle-functions-samples/samples/oci-load-file-into-adw-python
    
  3. Utilisez l'interface de ligne de commande OCI pour télécharger file1.csv vers input-bucket :

    $ oci os object put  --bucket-name input-bucket --file file1.csv
    Uploading object  [####################################]  100%
    {
      "etag": "607fd72d-a041-484c-9ee0-93b9f5488084",
      "last-modified": "Tue, 20 Oct 2020 18:03:50 GMT",
      "opc-content-md5": "O8mZv0X2gLagQGT5CutWsQ=="
    }
    

    Pour afficher les données de la base, procédez comme suit :

    1. A partir de la console OCI, accédez à Autonomous Data Warehouse.

    2. Sélectionnez le compartiment de développement dans la liste Compartiment.

    3. Sélectionnez Transaction Processing dans la liste Workload Type.

    4. Cliquez sur le nom de la base de données (funcdb).

    5. Cliquez sur Console de service.

    6. Cliquez sur le lien Développement dans la barre latérale.

    7. Cliquez sur SQL Developer Web.

    8. Utilisez ADMIN et le mot de passe administrateur pour vous authentifier.

    9. Dans la feuille de calcul, entrez l'interrogation suivante :

      select UTL_RAW.CAST_TO_VARCHAR2( DBMS_LOB.SUBSTR( JSON_DOCUMENT, 4000, 1 )) AS json from regionsnumbers
      
    10. Cliquez sur le bouton vert pour exécuter la requête.

    11. Les données du fichier CSV se trouvent dans l'onglet Résultat de la requête.

Bravo ! Vous avez terminé le tutoriel.

Remerciements

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuite sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation du produit, visitez le site Oracle Help Center.