Nota:

Traslado de logs de Oracle Cloud Infrastructure a Amazon S3 con funciones de OCI

Introducción

El servicio de registro de Oracle Cloud Infrastructure (OCI) proporciona una vista unificada de todos los logs generados por los servicios y recursos de OCI, así como los logs personalizados creados por los usuarios.

OCI Functions es una plataforma informática sin servidor que permite a los desarrolladores crear y desplegar aplicaciones ligeras basadas en eventos en la nube.

Amazon S3 es un servicio de almacenamiento en la nube altamente ampliable y fiable que proporciona Amazon que permite a los usuarios almacenar y recuperar cualquier cantidad de datos de cualquier parte del mundo.

El proceso de alto nivel incluye el uso de un conector de servicio para recopilar logs del servicio OCI Logging y el envío a la función de destino que, a continuación, transfiere los datos a Amazon S3.

Diagrama de Arquitectura

Objetivo

Guía detallada para migrar los logs de OCI a Amazon S3 con OCI Functions.

Requisitos

  1. Los usuarios de Amazon Web Services (AWS) deben tener las políticas necesarias para crear el cubo y poder leer y escribir objetos en él. Para obtener más información sobre las políticas de cubo, siga esta página.

  2. Los usuarios de OCI deben tener las políticas necesarias para los servicios Functions, Service Connector Hub y Logging para gestionar los recursos. La referencia de política para todos los servicios está aquí.

Tarea 1: Configurar valores de AWS

  1. Cree un cubo de Amazon S3.

    Crear cubo de AWS

  2. Cree una clave de acceso y una clave secreta de AWS para el usuario en IAM.

    1. Navegue hasta IAM, Usuarios, Credenciales de seguridad, Crear clave de acceso y Servicio de terceros.

    2. Copie la clave de acceso y la clave secreta de AWS generadas en un archivo del bloc de notas.

      Crear acceso de AWS y clave secreta

Tarea 2. Configurar los valores de Oracle Cloud Infrastructure

Almacene la clave de acceso y la clave secreta de AWS en OCI Vault

Crear grupo dinámico

Crear una política para el grupo dinámico

Cree una función de OCI en Python o en cualquier lenguaje soportado para enviar logs de OCI a Amazon S3

  1. En el menú Consola de Oracle Cloud, vaya a Servicios para desarrolladores y seleccione Funciones.

  2. Seleccione una aplicación existente o haga clic en Crear aplicación. Crear una función dentro de su aplicación.

  3. En este tutorial, estamos utilizando OCI Cloud Shell para crear la función.

    Nota: Cloud Shell es una opción recomendada porque no necesita ningún requisito de configuración. Si es nuevo en OCI Functions, siga las secciones A, B y C en Inicio rápido de funciones en Cloud Shell..

  4. Se recomienda crear primero una función Python de ejemplo. El siguiente comando genera una carpeta ociToaws con tres archivos: func.py, func.yaml y requirements.txt.

    fn init --runtime python pushlogs
    
  5. Cambie func.py con el siguiente código. Sustituya secret_key_id, access_key_id en el código por los respectivos ocids secretos de OCI Vault creados anteriormente.

    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. Actualice func.yaml con el siguiente código.

    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. Cambie requirements.txt con el siguiente código.

    fdk>=0.1.56
    boto3
    oci
    
  8. Despliegue la función con el siguiente comando.

    fn -v deploy --app ociToaws
    

Creación de un conector de servicio para enviar logs de OCI desde el registro a funciones

  1. En el menú Consola, seleccione Análisis e IA, Mensajería y, a continuación, Service Connector Hub.

  2. Seleccione el compartimento en el que desea crear el conector de servicio.

  3. Haga clic en Crear conector de servicio y proporcione los valores correspondientes. En Configurar conector de servicio, seleccione Streaming como origen y Logging Analytics como destino.

  4. En Configurar origen, seleccione los logs que desea transferir a Functions

  5. En Configurar destino, seleccione la aplicación de función que hemos creado en el paso 4.

  6. Cree las políticas por defecto que aparecen en la pantalla y haga clic en Crear.

    crear un conector de servicio

    crear un conector de servicio

    crear un conector de servicio

Tarea 3: Verifique si los logs se transfieren a Amazon S3

Pasos Siguientes

En este tutorial se mostraba cómo los logs de Oracle Cloud Infrastructure se pueden transferir a Amazon S3 mediante Service Connector Hub y Functions. Los datos de log de OCI se pueden utilizar para varias estrategias de almacenamiento para la redundancia y la conformidad, así como para un análisis detallado con sus conectores existentes en AWS.

Acuses de recibo

Autores: Vishak Chittuvalapil (ingeniero sénior de la nube), Lasya Vadavalli (ingeniero de la nube-IaaS)

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre los productos, visite Oracle Help Center.