Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Escritura de eventos en un flujo privado de OCI mediante OCI Events Service y OCI Functions
Introducción
Las reglas del servicio Oracle Cloud Infrastructure (OCI) Events realizan un seguimiento de los cambios de recursos en OCI mediante eventos que cumplen con el estándar CloudEvents de Cloud Native Computing Foundation (CNCF). Esto permite a los desarrolladores responder a cambios en tiempo real mediante el disparo de código con OCI Functions, la escritura de datos en OCI Streaming o el envío de alertas mediante OCI Notifications.
Aunque el envío de eventos a flujos públicos está soportado de forma nativa, la escritura en un flujo privado requiere un enfoque personalizado mediante OCI Functions o código personalizado. En este tutorial se muestra el uso de OCI Functions para capturar cargas útiles de eventos de una regla de OCI Events Service y escribirlas en un flujo privado.
Objetivo
- Automatiza la configuración para procesar eventos de OCI y enviarlos a un flujo privado de OCI de una manera escalable para un procesamiento seguro y personalizado.
Requisitos
-
Acceso a un arrendamiento de OCI.
-
Privilegios para gestionar las reglas del servicio OCI Events, Oracle Applications y los servicios OCI Streaming.
Tarea 1: Configuración de las políticas necesarias y los permisos de Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)
Cada componente de esta solución debe tener acceso a los recursos de OCI con los que interactúa. Para seguir este tutorial, el desarrollador debe tener los siguientes permisos.
-
Políticas de usuario: gestiona las reglas de OCI Events Service, OCI Notifications, OCI Functions, flujos de OCI y el uso de OCI Vault (opcional) y la familia de redes.
-
Política de servicio: otorgue a la función permiso para escribir mensajes en el flujo privado de OCI.
Las políticas detalladas se pueden encontrar aquí:
Tarea 2: Creación de un flujo privado
OCI Streaming es un servicio OCI totalmente gestionado en el que los datos se cifran estáticos y en tránsito, lo que garantiza la integridad y seguridad de los mensajes. Para mejorar la seguridad, puede utilizar el servicio OCI Vault para almacenar y gestionar sus propias claves de cifrado, cumpliendo requisitos específicos de conformidad o seguridad. Los puntos finales privados se pueden configurar en una red virtual en la nube (VCN) para proteger aún más sus flujos, asociando una dirección IP privada al pool de flujos. Esto garantiza que el tráfico de OCI Streaming permanezca dentro de la VCN, evitando Internet por completo. Sin embargo, tenga en cuenta que no se puede acceder a los flujos que utilizan puntos finales privados desde Internet, lo que también limita la capacidad de ver sus últimos mensajes a través de la consola. Para consumir mensajes de un flujo privado, el consumidor debe tener acceso y ruta a la red donde se aloja el flujo privado.
Crear un flujo y un pool de flujos. Introduzca Stream Name y seleccione Create New Stream Pool para crear el pool de flujos. En la sección Configurar pool de flujos, introduzca Nombre de pool de flujos, seleccione Punto final privado e introduzca VCN y Subred y los detalles de red según corresponda. Aunque es opcional, recomendamos proporcionar a un grupo de seguridad de red una regla de entrada para todo el tráfico dentro de ese NSG. Para obtener más información, consulte Creación de flujo y Creación de pool de flujos.
Puede utilizar sus propias claves de cifrado para obtener un mayor control sobre el ciclo de vida de la clave. Tiene la opción de ajustar la retención de mensajes en el flujo. El valor por defecto es 1 día y el máximo es 7 días.
Anote el OCID de flujo y el punto final de mensajes. Necesitamos pasar esta información a la función.
Tarea 3: Crear tema de notificaciones de OCI y regla del servicio OCI Events
Como repaso, así es como funciona un evento. Los servicios de OCI emiten eventos para recursos o datos. Creamos reglas, que incluyen un filtro para especificar los eventos de interés. Las reglas deben disparar una acción cuando el filtro encuentra un evento coincidente. La acción puede ser un tema de OCI Notifications, un servicio OCI Streaming o OCI Functions.
-
Enfoque 1: si el requisito es enviar carga útil de evento a un flujo público, no hay necesidad de una función, ya que el flujo se puede configurar de forma nativa.
-
Enfoque 2: si el requisito es enviar solo una carga útil de evento específica a un flujo privado, la función se puede proporcionar como una acción directamente.
-
Enfoque 3: si el requisito es enviar varias cargas útiles de eventos a un flujo privado, la forma ideal es enviar la carga útil de eventos a un tema de OCI Notifications y suscribir OCI Functions al tema de OCI Notifications.
En este tutorial, exploraremos el enfoque 3, que es el más complejo.
-
Cree un tema de OCI Notifications. Para obtener más información, consulte Creación de un tema.
-
Cree una regla de evento. Para justificar el enfoque, crearemos dos reglas de eventos. Para obtener más información, consulte Creating an Events Rule.
Tarea 4: Desarrollo y despliegue de la función
Esta función codifica la carga útil del evento y la publica en el punto final y el flujo de mensajes proporcionados. Para obtener más información, consulte Creación de funciones.
-
func.py
:import json import logging import oci from base64 import b64encode def handler(ctx, data): try: # Parse the incoming event payload body = json.loads(data.getvalue()) cfg = ctx.Config() stream_ocid = cfg["stream_ocid"] stream_endpoint = cfg["stream_endpoint"] logging.getLogger().info(f'Function invoked for event: {body}') # Publish the event to the stream publish_to_stream(stream_ocid, stream_endpoint, body) return {"status": 200, "message": "Successfully processed event"} except (Exception, ValueError) as ex: logging.getLogger().error(f'Error processing event payload: {str(ex)}') return {"status": 500, "message": "Internal Server Error"} def publish_to_stream(stream_ocid, stream_endpoint, event_data): signer = oci.auth.signers.get_resource_principals_signer() stream_client = oci.streaming.StreamClient(config={}, signer=signer, service_endpoint=stream_endpoint) # Convert event data to JSON string and encode event_payload = json.dumps(event_data).encode('utf-8') # Build the message list message_list = [ oci.streaming.models.PutMessagesDetailsEntry( key=b64encode("partition-key-1".encode()).decode(), value=b64encode(event_payload).decode() ), ] try: logging.getLogger().info(f"Publishing {len(message_list)} messages to stream {stream_ocid}") put_message_details = oci.streaming.models.PutMessagesDetails(messages=message_list) put_message_result = stream_client.put_messages(stream_ocid, put_message_details) # Log publishing results for entry in put_message_result.data.entries: if entry.error: logging.getLogger().error(f"Error publishing message: {entry.error_message}") else: logging.getLogger().info(f"Published message to partition {entry.partition}, offset {entry.offset}") except Exception as ex: logging.getLogger().error(f"Failed to publish messages to stream: {str(ex)}") raise
-
func.yaml
:schema_version: 20180708 name: events-to-pvt-stream 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 config: stream_ocid: ocid1.stream.123445 stream_endpoint: https://xyz.us-ashburn-1.oci.oraclecloud.com
-
requirements.txt
:fdk oci
El paso final es indicar a la función dónde está el flujo privado. Esta función utiliza parámetros de configuración, por lo que es reutilizable si desea desplegar en otro arrendamiento.
Tarea 5: Suscripción de la función al tema de notificaciones
En esta tarea, suscriba la función desplegada al tema OCI Notifications. Cuando el tema OCI Notifications reciba un mensaje, disparará la función y la función escribirá la carga útil del evento para un flujo privado.
Puede eliminar o mejorar determinados campos modificando el código de función para cumplir los requisitos. La confirmación no es necesaria para las suscripciones de función. Para obtener más información, consulte Creación de una suscripción de función.
Verificación
Hay varios lugares donde se puede verificar el flujo de datos.
-
Verifique la página de métricas de eventos para comprobar si algún evento coincide con la regla proporcionada. El gráfico de fallos debe estar vacío.
-
Compruebe las métricas del tema OCI Notifications. Asegúrese de que se entregan todos los mensajes; no hay datos en los gráficos de mensajes con fallos.
-
Compruebe las métricas de la función Llamada. Asegúrese de que no hay errores y de que la función no está limitando.
-
Compruebe que los datos se están ingiriendo en el flujo privado.
Si los datos están ausentes en cualquiera de los siguientes gráficos, deténgase allí y active los logs para ese servicio. Los logs explicarán por qué un recurso específico no puede realizar la tarea.
Pasos Siguientes
En este tutorial, ha aprendido a integrar OCI Events Service, OCI Notifications, OCI Functions y OCI Streaming para procesar y publicar cargas útiles de eventos de forma segura en flujos privados. Ha explorado la configuración de puntos finales seguros, la gestión de claves de cifrado y el uso de OCI IAM para un control de acceso detallado a fin de garantizar que solo los usuarios y servicios autorizados puedan interactuar con los datos de flujo.
Esta solución permite a los equipos capturar los cambios de recursos en tiempo real y, al mismo tiempo, mantener estándares de seguridad sólidos. Las organizaciones pueden utilizar flujos privados para salvaguardar datos confidenciales, cumplir con las regulaciones del sector y garantizar que los flujos de trabajo operativos se alineen con los objetivos de seguridad y cumplimiento de la organización. Este enfoque fortalece su postura de seguridad y permite a su equipo lograr una automatización fluida y segura basada en eventos.
Para obtener más información sobre el uso de OCI Functions y las capacidades de flujos privados de OCI, póngase en contacto con su representante de Oracle o consulte Soluciones de seguridad en la nube.
Agradecimientos
- Autor: Aneel Kanuri (arquitecto de nube distinguido)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Write Events to an OCI Private Stream using OCI Events Service and OCI Functions
G23240-01
December 2024