Scénario : Envoi de données de journal à une base de données Autonomous Database
Envoyer les données de journal du service de journalisation à une base de données Autonomous Database à l'aide d'une fonction (service de fonctions).
Ce scénario consiste à créer une fonction, puis à référencer cette fonction dans un connecteur (Connector Hub) pour traiter et déplacer les données de journal de la journalisation vers une base de données Autonomous Database.
Politique GIA requise
Si vous êtes membre du groupe Administrateurs, vous avez déjà l'accès requis pour exécuter ce scénario. Sinon, vous devez accéder au service de fonctions .
Le flux de travail de création du connecteur inclut une politique par défaut, si nécessaire, afin de fournir l'autorisation d'écriture sur le service cible. Pour en savoir plus sur les politiques, voir Aperçu des politiques IAM.
Configuration pour ce scénario
Ce scénario consiste à créer un connecteur (Connector Hub) pour envoyer les données de journal du service de journalisation à une base de données Autonomous Database (JSON).
Avant de créer le connecteur, vous devez configurer une base de données JSON autonome qui reçoit les données de journal et configurer la fonction pour copier ces données.
Détails de configuration de la base de données JSON autonome :
- Provisionner Autonomous Database
- Dupliquez l'onglet de navigateur.
- Dans l'onglet dupliqué, copiez l'URL de base ORDS : Dans la page des détails pour Autonomous Database, sélectionnez Console de service, sélectionnez Développement, puis Copier sous RESTful Services et SODA."
- Créez une collection "logs" pour stocker les données de journal qui seront déplacées par la fonction et le connecteur :
-
Retournez à la page de détails d'Autonomous Database (onglet du navigateur d'origine).
-
Sélectionnez Database Actions.
-
Connectez-vous à l'aide de l'utilisateur
admin
et du mot de passe que vous avez défini lors de la création de la base de données.La fenêtre Database Actions | Lancement s'affiche.
-
Sélectionnez SQL.
La fenêtre Database Actions | SQL s'affiche.
-
Entrez la commande suivante :
soda create logs
-
Sélectionnez
(Exécuter l'énoncé).
Pour effectuer une interrogation sur les documents de la collection après la copie des données de journal par le connecteur, entrez la commande suivante :
soda get logs -f {}
-
Détails de configuration de la fonction :
- Créer la fonction
- Déployer la fonction
- Définissez les valeurs de configuration de la façon suivante :
-
ordsbaseurl
Utilisez l'URL de base ORDS que vous avez copiée lors de la configuration de la base de données.
-
dbschema
-
dbuser
-
dbpwd
-
collection
Pour plus d'informations, voir Transmission de paramètres de configuration personnalisés aux fonctions.
-
- (Facultatif) Appelez la fonction
Après configuration de la base de données et de la fonction, vous êtes prêt à créer le connecteur. La création du connecteur est facile dans la console. Vous pouvez également utiliser l'interface de ligne de commande ou l'API Oracle Cloud Infrastructure, qui vous permettent d'exécuter vous-même les opérations individuelles.
L'exemple de code suivant concerne une fonction qui envoie des données de journal depuis le service de journalisation vers une base de données autonome. Pour obtenir des instructions sur la création et le déploiement de fonctions, voir Création et déploiement de fonctions.
L'échantillon de code suivant n'est pas destiné aux charges de travail de production. Mettez-le à jour pour votre environnement de production.
import io
import json
import logging
import requests
from fdk import response
# soda_insert uses the Autonomous Database REST API to insert JSON documents
def soda_insert(ordsbaseurl, dbschema, dbuser, dbpwd, collection, logentries):
auth=(dbuser, dbpwd)
sodaurl = ordsbaseurl + dbschema + '/soda/latest/'
bulkinserturl = sodaurl + 'custom-actions/insert/' + collection + "/"
headers = {'Content-Type': 'application/json'}
resp = requests.post(bulkinserturl, auth=auth, headers=headers, data=json.dumps(logentries))
return resp.json()
def handler(ctx, data: io.BytesIO=None):
logger = logging.getLogger()
logger.info("function start")
# Retrieving the Function configuration values
try:
cfg = dict(ctx.Config())
ordsbaseurl = cfg["ordsbaseurl"]
dbschema = cfg["dbschema"]
dbuser = cfg["dbuser"]
dbpwd = cfg["dbpwd"]
collection = cfg["collection"]
except:
logger.error('Missing configuration keys: ordsbaseurl, dbschema, dbuser, dbpwd and collection')
raise
# Retrieving the log entries from Connector Hub as part of the Function payload
try:
logentries = json.loads(data.getvalue())
if not isinstance(logentries, list):
raise ValueError
except:
logger.error('Invalid payload')
raise
# The log entries are in a list of dictionaries. We can iterate over the the list of entries and process them.
# For example, we are going to put the Id of the log entries in the function execution log
logger.info("Processing the following LogIds:")
for logentry in logentries:
logger.info(logentry["oracle"]["logid"])
# Now, we are inserting the log entries in the JSON Database
resp = soda_insert(ordsbaseurl, dbschema, dbuser, dbpwd, collection, logentries)
logger.info(resp)
if "items" in resp:
logger.info("Logs are successfully inserted")
logger.info(json.dumps(resp))
else:
raise Exception("Error while inserting logs into the database: " + json.dumps(resp))
# The function is done. Return empty response.
logger.info("function end")
return response.Response(
ctx,
response_data="",
headers={"Content-Type": "application/json"}
)
Utilisation de la console
Cette section décrit la création d'un connecteur à l'aide de la console. Votre fonction doit être déployée.
Pour obtenir de l'aide concernant le dépannage, voir Dépannage des connecteurs.
Cet exemple montre comment utiliser la console pour créer un connecteur. Dans cet exemple, le connecteur déplace les données de journal du service de journalisation vers une base de données Autonomous Database à l'aide de la fonction que vous avez créée à l'aide de l'exemple de code de fonction.
- Ouvrez le menu de navigation et sélectionnez Analyse et intelligence artificielle. Sous Messagerie, sélectionnez Centre de connecteurs.
- Sélectionnez le compartiment dans lequel vous souhaitez créer le connecteur de service.
- Sélectionnez Créer un connecteur.
-
Dans la page Créer un connecteur :
- Entrez un nom de connecteur, par exemple "Envoyer des journaux à ma base de données Autonomous Database". Évitez d'entrer des informations confidentielles.
- Sélectionnez le compartiment de la ressource dans lequel vous voulez stocker le nouveau connecteur.
- Sous Configurer le connecteur, sélectionnez les services source et cible pour le déplacement des données de journal vers une mesure :
- Source : Journalisation
- Cible : Fonctions
- Sous Configurer la connexion source, sélectionnez un nom de compartiment, un groupe de journaux et un journal.
- Sous Configurer la connexion cible, sélectionnez l'application de fonction et la fonction correspondant à la fonction que vous avez créée à partir de l'exemple de code de fonction.
- Si vous êtes invité à créer une politique (obligatoire pour créer ou mettre à jour un connecteur de service), sélectionnez Créer.
- Sélectionnez Créer.
Utilisation de l'interface de ligne de commande
Cette section explique comment créer un connecteur à l'aide de l'interface de ligne de commande qui déplace les données de journal vers votre fonction (qui les déplace ensuite vers une base de données Autonomous Database).
Pour plus d'informations sur l'utilisation de l'API et sur les demandes de signature, voir la documentation de l'API REST et Données d'identification de sécurité. Pour plus d'informations sur les trousses SDK, voir Trousses SDK et interface de ligne de commande.
-
Créez un connecteur : Ouvrez une invite de commande et exécutez la commande
oci sch service-connector create
:oci sch service-connector create --display-name "<display_name>" --compartment-id <compartment_OCID> --source [<source_in_JSON>] --tasks [<tasks_in_JSON>] --target [<targets_in_JSON>]
Pour obtenir de l'aide concernant le dépannage, voir Dépannage des connecteurs.
Utilisation de l'API
Cette section décrit la création du connecteur à l'aide de l'API.
Pour plus d'informations sur l'utilisation de l'API et sur les demandes de signature, voir la documentation de l'API REST et Données d'identification de sécurité. Pour plus d'informations sur les trousses SDK, voir Trousses SDK et interface de ligne de commande.
Utilisez les opérations suivantes :
-
CreateServiceConnector : Créez un connecteur qui déplace les données de journal vers votre fonction (qui les déplace ensuite vers une base de données Autonomous Database).
Exemple de demande CreateServiceConnectorPOST /20200909/serviceConnectors Host: service-connector-hub.us-phoenix-1.oraclecloud.com <authorization and other headers> { "compartmentId": "<compartment_OCID>", "description": "My connector description", "displayName": "My Connector", "source": { "kind": "logging", "logSources": [ { "compartmentId": "<compartment_OCID>", "logGroupId": "<log_group_OCID>", "logId": "<log_OCID>" } ] }, "target": { "compartmentId": "<compartment_OCID>", "kind": "functions", "functionId": "<function_OCID>" }, "tasks": [] } }
Pour obtenir de l'aide concernant le dépannage, voir Dépannage des connecteurs.