Remarque :

Transmission de journaux Oracle Cloud Infrastructure à Amazon S3 à l'aide des fonctions OCI

Introduction

Le service Oracle Cloud Infrastructure (OCI) Logging fournit une vue unifiée de tous les journaux générés par les services et ressources OCI, ainsi que des journaux personnalisés créés par les utilisateurs.

OCI Functions est une plate-forme de calcul sans serveur qui permet aux développeurs de créer et de déployer des applications légères orientées événements dans le cloud.

Amazon S3 est un service de stockage cloud hautement évolutif et fiable fourni par Amazon qui permet aux utilisateurs de stocker et d'extraire n'importe quelle quantité de données de n'importe où dans le monde.

Le processus de haut niveau inclut l'utilisation d'un connecteur de service pour collecter les journaux à partir du service OCI Logging et l'envoi à la fonction cible, qui transmet ensuite les données à Amazon S3.

Diagramme d'architecture

Objectif

Guide pas à pas sur la façon de propager les journaux OCI vers Amazon S3 avec OCI Functions.

Prérequis

  1. Les utilisateurs d'Amazon Web Services (AWS) doivent disposer des stratégies requises pour créer le bucket, et être en mesure de lire et d'écrire des objets dans ce bucket. Pour plus d'informations sur les stratégies de bucket, suivez cette page.

  2. Les utilisateurs dans OCI doivent disposer des stratégies requises pour les services Functions, Service Connector Hub et Logging afin de gérer les ressources. Les références de stratégie pour tous les services sont ici.

Tâche 1 : configuration des paramètres AWS

  1. Créez un bucket Amazon S3.

    Créer un bucket AWS

  2. Créez une clé d'accès et une clé secrète AWS pour l'utilisateur sous IAM.

    1. Accédez à IAM, Utilisateurs, Informations d'identification de sécurité, Créer une clé d'accès, Service tiers.

    2. Copiez la clé d'accès et la clé secrète AWS générées dans un fichier Bloc-notes.

      Créer un accès AWS et une clé secrète

Tâche 2 : configuration des paramètres Oracle Cloud Infrastructure

Stocker la clé d'accès et la clé secrète AWS dans OCI Vault

Créer un groupe dynamique

Créer une stratégie pour le groupe dynamique

Créer une fonction OCI dans Python ou tout langage pris en charge pour envoyer des journaux OCI à Amazon S3

  1. Dans le menu de la console Oracle Cloud, accédez à Services de développeur et sélectionnez Fonctions.

  2. Sélectionnez une application existante ou cliquez sur Créer une application. créer une fonction au sein de l'application,

  3. Dans ce tutoriel, nous utilisons OCI Cloud Shell pour créer la fonction.

    Remarque : Cloud Shell est une option recommandée car elle ne nécessite aucun prérequis de configuration. Si vous ne connaissez pas encore les fonctions OCI, suivez les sections A, B et C du démarrage rapide des fonctions sur Cloud Shell.

  4. Nous vous recommandons d'abord de créer un exemple de fonction Python. La commande suivante génère un dossier ociToaws avec trois fichiers : func.py, func.yaml et requirements.txt.

    fn init --runtime python pushlogs
    
  5. Remplacez func.py par le code suivant. Remplacez secret_key_id, access_key_id dans le code par les OCID de clé secrète respectifs d'OCI Vault créés précédemment.

    import io
    import json
    import logging
    import boto3
    import oci
    import base64
    import os
    from fdk import response
    
    # The below method receives the list of log entries from OCI as input in the form of bytestream and is defined in func.yaml
    def handler(ctx, data: io.BytesIO = None):
        funDataStr = data.read().decode('utf-8')
    
        # Convert the log data to json
        funData =  json.loads(funDataStr)
    
        # The Secret Retrieval API is used here to retrieve AWS access keys and secret key from vault. These keys are required to connect to Amazon S3.
        # Replace secret_key_id, access_key_id with respective secret ocids.
        secret_key_id = "<vault_secret_ocid>"
        access_key_id = "<vault_secret_ocid>"
    
        signer = oci.auth.signers.get_resource_principals_signer()
        secret_client = oci.secrets.SecretsClient({},signer=signer)
    
        def read_secret_value(secret_client, secret_id):
            response = secret_client.get_secret_bundle(secret_id)
            base64_Secret_content = response.data.secret_bundle_content.content
            base64_secret_bytes = base64_Secret_content.encode('ascii')
            base64_message_bytes = base64.b64decode(base64_secret_bytes)
            secret_content = base64_message_bytes.decode('ascii')
            return secret_content
    
    
        awsaccesskey = read_secret_value(secret_client, access_key_id)
        awssecretkey = read_secret_value(secret_client, secret_key_id)
    
        for i in range(0,len(funData)):
            filename = funData[i]['time']
            logging.getLogger().info(filename)
    
            # Send the log data to a temporary json file. /tmp is the supported writable directory for OCI Functions
            with open('/tmp/'+filename+".json", 'w', encoding='utf-8') as f:
                json.dump(funData[i], f, ensure_ascii=False, indent=4)
    
            # Send the log file to Amazon S3 target bucket
            session = boto3.Session(aws_access_key_id= awsaccesskey, aws_secret_access_key= awssecretkey)
            s3 = session.resource('s3')
            s3.meta.client.upload_file(Filename='/tmp/'+filename+'.json', Bucket='lasya-bucket', Key=filename+'.json')
    
            os.remove('/tmp/'+filename+'.json')
    
  6. Mettez à jour func.yaml avec le code suivant.

    schema_version: 20180708
    name: pushlogs
    version: 0.0.1
    runtime: python
    build_image: fnproject/python:3.9-dev
    run_image: fnproject/python:3.9
    entrypoint: /python/bin/fdk /function/func.py handler
    memory: 256
    
  7. Remplacez requirements.txt par le code suivant.

    fdk>=0.1.56
    boto3
    oci
    
  8. Déployez la fonction à l'aide de la commande suivante.

    fn -v deploy --app ociToaws
    

Créer un connecteur de service pour envoyer les journaux OCI de Logging vers Functions

  1. Dans le menu Console, sélectionnez Analytics & AI, Messaging, puis Service Connector Hub.

  2. Sélectionnez le compartiment dans lequel créer le connecteur de service.

  3. Cliquez sur Créer un connecteur de service et indiquez les valeurs correspondantes. Sous Configure Service Connector, sélectionnez Streaming en tant que source et Logging Analytics en tant que cible.

  4. Sous Configurer la source, sélectionnez les journaux à propager vers Functions

  5. Sous Configure Destination, sélectionnez l'application de fonction que nous avons créée à l'étape 4.

  6. Créez les stratégies par défaut qui apparaissent à l'écran et cliquez sur Créer.

    créer un connecteur de service

    créer un connecteur de service

    créer un connecteur de service

Tâche 3 : vérifiez si les journaux sont propagés vers Amazon S3

Etapes suivantes

Ce tutoriel a expliqué comment les journaux Oracle Cloud Infrastructure peuvent être propagés vers Amazon S3 à l'aide de Service Connector Hub et de Functions. Les données de journal OCI peuvent être utilisées pour plusieurs stratégies de stockage en matière de redondance et de conformité, ainsi que pour une analyse détaillée de vos connecteurs existants dans AWS.

Remerciements

Auteurs - Vishak Chittuvalapil (ingénieur cloud senior), Lasya Vadavalli (ingénieur cloud-IaaS)

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.