Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
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.
Objetivo
Guía detallada para migrar los logs de OCI a Amazon S3 con OCI Functions.
Requisitos
-
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.
-
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
-
Cree un cubo de Amazon S3.
-
Cree una clave de acceso y una clave secreta de AWS para el usuario en IAM.
-
Navegue hasta IAM, Usuarios, Credenciales de seguridad, Crear clave de acceso y Servicio de terceros.
-
Copie la clave de acceso y la clave secreta de AWS generadas en un archivo del bloc de notas.
-
Tarea 2. Configurar los valores de Oracle Cloud Infrastructure
Almacene la clave de acceso y la clave secreta de AWS en OCI Vault
-
Vaya a Identidad y seguridad, Valores. Cree un almacén, MEK si no se ha creado. Para obtener más información, siga este doc.
-
Cree 2 secretos en el almacén, uno para almacenar la clave de acceso de AWS y otro para la clave secreta de AWS. Las imágenes siguientes son para referencia.
Crear grupo dinámico
-
Vaya a Identidad y seguridad, Identidad, Grupos dinámicos.
-
Cree un grupo dinámico para todas las funciones del compartimento con la siguiente regla de coincidencia.
ALL {resource.type = 'fnfunc', resource.compartment.id = '<your_compartment_id>'}
Crear una política para el grupo dinámico
-
Vaya a Identidad y seguridad, Identidad, Políticas.
-
Cree una política para el grupo dinámico anterior para permitir que todas las funciones accedan a la familia de secretos para el compartimento correspondiente. La política también se puede reducir a un solo almacén.
allow dynamic-group <dynamic_group_name> to manage secret-family in compartment <compartment_name>
Cree una función de OCI en Python o en cualquier lenguaje soportado para enviar logs de OCI a Amazon S3
-
En el menú Consola de Oracle Cloud, vaya a Servicios para desarrolladores y seleccione Funciones.
-
Seleccione una aplicación existente o haga clic en Crear aplicación. Crear una función dentro de su aplicación.
-
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..
-
Se recomienda crear primero una función Python de ejemplo. El siguiente comando genera una carpeta
ociToaws
con tres archivos:func.py
,func.yaml
yrequirements.txt
.fn init --runtime python pushlogs
-
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')
-
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
-
Cambie
requirements.txt
con el siguiente código.fdk>=0.1.56 boto3 oci
-
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
-
En el menú Consola, seleccione Análisis e IA, Mensajería y, a continuación, Service Connector Hub.
-
Seleccione el compartimento en el que desea crear el conector de servicio.
-
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.
-
En Configurar origen, seleccione los logs que desea transferir a Functions
-
En Configurar destino, seleccione la aplicación de función que hemos creado en el paso 4.
-
Cree las políticas por defecto que aparecen en la pantalla y haga clic en Crear.
Tarea 3: Verifique si los logs se transfieren a Amazon S3
-
Navegue al cubo de Amazon S3 que ha creado anteriormente para verificar si los logs de OCI están disponibles.
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.
Push Oracle Cloud Infrastructure Logs to Amazon S3 with OCI Functions
F82371-01
June 2023
Copyright © 2023, Oracle and/or its affiliates.