Remarques :

Transmission de journaux vers un flux d'adresses privées via OCI Connector Hub à l'aide d'OCI Functions

Introduction

Oracle Cloud Infrastructure (OCI) Functions est une plate-forme Functions-as-a-Service entièrement gérée, colocative, hautement évolutive, à la demande. Utilisez OCI Functions lorsque vous voulez écrire du code pour répondre aux besoins de votre entreprise.

OCI Connector Hub permet de transférer des données entre les services dans OCI. OCI Connector Hub ne prend pas en charge le flux d'adresse privée en tant que cible.

Le service OCI Streaming offre une solution complète, évolutive et durable pour l'inclusion et l'utilisation de flux de données volumineux en temps réel. Utilisez OCI Streaming pour tout cas d'emploi dans lequel des données sont produites et traitées de manière continue et séquentielle selon un modèle d'échange de messages de publication-abonnement.

Dans ce tutoriel, la source et la cible pour OCI Connector Hub seront respectivement OCI Logging et OCI Functions. OCI Connector Hub recherche les nouveaux journaux. Une fois qu'il est détecté, il transfère les journaux vers OCI Functions et déclenche la fonction. OCI Functions propage ces journaux vers le flux d'adresse privée.

Architecture

Objectifs

Prérequis

Tâche 1 : créer une fonction à l'aide d'OCI Functions

Créez une fonction dans le sous-réseau privé dans lequel le flux privé est créé à l'aide du code suivant. Le code ci-dessous est un exemple pour les journaux OCI Object Storage. Dans le code, vous devez remplacer stream-ocid par un OCID (identificateur Oracle Cloud) de flux d'adresse privée et message-endpoint par une URL d'adresse de message de flux de données privé. Nous extrayons uniquement quelques paramètres à partir de journaux tels que bucketName, message et clientIpAddress. Pour plus d'informations, reportez-vous à Création et déploiement de fonctions.

Remarque : ce code de fonction est un exemple de propagation des journaux OCI Object Storage vers un flux d'adresse privée. Vous devez personnaliser le script Python en fonction de l'exigence avec différents journaux.

#!/bin/bash
# Copyright (c) 2016, 2021, Oracle and/or its affiliates.  All rights reserved.
# This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.

import io
import oci
import logging
import json
import os
from fdk import response
from base64 import b64encode, b64decode

def handler(ctx, data: io.BytesIO = None):
    signer_auth = oci.auth.signers.get_resource_principals_signer()
    streaming_client = oci.streaming.StreamClient(config = {}, service_endpoint = "<message-endpoint>", signer=signer_auth)

    logger = logging.getLogger()
    logger.info("function start")

    try:
      logentries = json.loads(data.getvalue()) # deserialize the bytesstream input as JSON array
      if not isinstance(logentries, list):
          logger.error('Invalid connector payload. No log queries detected')
          raise
      logger.info("json input from SCH")
      logger.info(data.getvalue())

      for logEntry in logentries:
          logger.info("Extracting/Parse log details from the log entry json")
          bucketName = logEntry["data"]["bucketName"]
          message = logEntry["data"]["message"]
          clientIpAddress = logEntry["data"]["clientIpAddress"]
          log_line = bucketName + '\t' + message + '\t' + clientIpAddress
          encoded_message = b64encode(log_line.encode()).decode()
          put_messages_response = streaming_client.put_messages(
            stream_id="<stream-ocid>",
            put_messages_details=oci.streaming.models.PutMessagesDetails(
                messages=[
                    oci.streaming.models.PutMessagesDetailsEntry(value=encoded_message)]))

      logger.info("function end")
      return
    except Exception as e:
      logger.error("Failure in the function: {}".format(str(e)))
      raise

Tâche 2 : créer et configurer OCI Connector Hub

  1. Cliquez sur Créer un connecteur.

    Créer un connecteur

  2. Entrez le nom du compartiment et sélectionnez les journaux à propager en tant que source.

    Source

  3. Sélectionnez la fonction créée en tant que cible et cliquez sur Créer.

    Target

OCI Connector Hub va maintenant rechercher de nouveaux journaux dans la source. Lorsqu'un nouveau journal est détecté, OCI Connector Hub l'envoie à OCI Functions. La fonction sera déclenchée et propagera les journaux vers le flux d'adresse privée.

Remerciements

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.