Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Scrivi eventi in un flusso privato OCI utilizzando OCI Events Service e OCI Functions
Introduzione
Le regole di Oracle Cloud Infrastructure (OCI) Events Service tengono traccia delle modifiche alle risorse in OCI utilizzando eventi conformi allo standard Cloud Native Computing Foundation (CNCF) CloudEvents. Ciò consente agli sviluppatori di rispondere alle modifiche in tempo reale attivando il codice con OCI Functions, scrivendo dati in OCI Streaming o inviando avvisi utilizzando OCI Notifications.
Sebbene l'invio di eventi ai flussi pubblici sia supportato in modo nativo, la scrittura in un flusso privato richiede un approccio personalizzato che utilizza OCI Functions o codice personalizzato. Questa esercitazione descrive l'uso di OCI Functions per acquisire i payload degli eventi da una regola OCI Events Service e scriverli in un flusso privato.
Obiettivo
- Automatizza l'impostazione per elaborare gli eventi OCI e inviarli a un flusso privato OCI in modo scalabile per un'elaborazione sicura e personalizzata.
Prerequisiti
-
Accesso a una tenancy OCI.
-
Privilegi per gestire le regole del servizio OCI Events, le applicazioni Oracle e i servizi di streaming OCI.
Task 1: impostare i criteri richiesti e le autorizzazioni Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)
Ogni componente di questa soluzione deve avere accesso alle risorse OCI con cui interagisce. Per seguire questa esercitazione, lo sviluppatore deve disporre dei seguenti permessi.
-
Policy utente: gestisci le regole del servizio OCI Events, le notifiche OCI, le funzioni OCI, i flussi OCI e l'uso di OCI Vault (facoltativo) e della famiglia di rete.
-
Criterio servizio: concedere l'autorizzazione della funzione per scrivere i messaggi nel flusso privato OCI.
Le politiche dettagliate possono essere trovate qui:
Task 2: Creare un flusso privato
OCI Streaming è un servizio OCI completamente gestito in cui i dati vengono cifrati in archivio e in transito, garantendo l'integrità e la sicurezza dei messaggi. Per una maggiore sicurezza, puoi utilizzare il servizio OCI Vault per memorizzare e gestire le tue chiavi di cifratura, soddisfacendo requisiti specifici di conformità o sicurezza. Gli endpoint privati possono essere configurati all'interno di una rete cloud virtuale (VCN) per proteggere ulteriormente i flussi, associando un indirizzo IP privato al pool di flussi. Ciò garantisce che il traffico di streaming OCI rimanga all'interno della VCN, evitando completamente Internet. Tuttavia, si noti che i flussi che utilizzano endpoint privati non sono accessibili da Internet, il che limita anche la possibilità di visualizzare i messaggi più recenti tramite la console. Per utilizzare i messaggi da un flusso privato, il consumatore deve disporre sia dell'instradamento che dell'accesso alla rete in cui è ospitato il flusso privato.
Creare un flusso e un pool di flussi. Immettere Nome flusso e selezionare Crea nuovo pool di flussi per creare il pool di flussi. Nella sezione Configura pool di flussi, immettere Nome pool di streaming, selezionare Endpoint privato e immettere di conseguenza la VCN e la subnet e i dettagli di rete. Sebbene sia facoltativo, si consiglia di fornire un gruppo di sicurezza di rete con una regola di entrata per tutto il traffico all'interno di tale gruppo NSG. Per ulteriori informazioni, vedere Crea flusso e Crea pool di flussi.
Puoi utilizzare le tue chiavi di cifratura, ottenendo un maggiore controllo sul ciclo di vita della chiave. È possibile regolare la conservazione dei messaggi all'interno del flusso. L'impostazione predefinita è 1 giorno e il massimo è 7 giorni.
Prendere nota dell'OCID del flusso e dell'endpoint dei messaggi. Dobbiamo trasmettere queste informazioni alla funzione.
Task 3: Crea argomento notifiche OCI e regola servizio eventi OCI
Come aggiornamento, ecco come funziona un evento. I servizi OCI emettono eventi per risorse o dati. Vengono create regole che includono un filtro per specificare gli eventi di interesse. Le regole devono attivare un'azione quando il filtro trova un evento corrispondente. L'azione potrebbe essere un argomento di OCI Notifications, un servizio di streaming OCI o OCI Functions.
-
Approssimativo 1: se il requisito prevede l'invio del payload degli eventi a un flusso pubblico, non è necessaria alcuna funzione, poiché il flusso può essere configurato in modo nativo.
-
Approssimativo 2: se il requisito prevede l'invio di un solo payload evento specifico a un flusso privato, la funzione può essere fornita direttamente come azione.
-
Accordo 3: se il requisito prevede l'invio di più payload di eventi a un flusso privato, il modo ideale è inviare il payload di eventi a un argomento Notifiche OCI ed eseguire la sottoscrizione delle funzioni OCI all'argomento Notifiche OCI.
In questo tutorial esploreremo l'approccio 3, che è il più complesso.
-
Creare un argomento di OCI Notifications. Per ulteriori informazioni, vedere Creazione di un argomento.
-
Creare una regola evento. Per giustificare l'approccio, creeremo due regole di evento. Per ulteriori informazioni, vedere Creazione di una regola di eventi.
Task 4: Sviluppare e distribuire la funzione
Questa funzione codifica il payload dell'evento e lo pubblica nell'endpoint e nel flusso dei messaggi forniti. Per ulteriori informazioni, vedere Creazione di funzioni.
-
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
L'ultimo passo è dire alla funzione dove si trova il flusso privato. Questa funzione utilizza i parametri di configurazione, rendendola riutilizzabile se si desidera eseguire la distribuzione in un'altra tenancy.
Task 5: sottoscrizione della funzione all'argomento delle notifiche
In questo task, eseguire la sottoscrizione della funzione distribuita all'argomento Notifiche OCI. Ogni volta che l'argomento OCI Notifications riceve un messaggio, la funzione viene attivata e la funzione scrive il payload degli eventi per un flusso privato.
È possibile eliminare o migliorare determinati campi modificando il codice funzione per soddisfare i requisiti. La conferma non è obbligatoria per le sottoscrizioni alle funzioni. Per ulteriori informazioni, vedere Creazione di una sottoscrizione a una funzione.
Verifica
Esistono più punti in cui è possibile verificare il flusso di dati.
-
Verificare la pagina delle metriche degli eventi per verificare se gli eventi corrispondono alla regola fornita. Il grafico degli errori deve essere vuoto.
-
Controllare le metriche degli argomenti di OCI Notifications. Assicurarsi che tutti i messaggi vengano consegnati; non vi sono dati nei grafici dei messaggi con errori.
-
Controllare le metriche di richiamo della funzione. Assicurarsi che non vi siano errori e che la funzione non sia in fase di limitazione.
-
Controllare che i dati vengano inclusi nel flusso privato.
Se i dati sono assenti in uno dei grafici riportati di seguito, fermarsi e abilitare i log per tale servizio. I log spiegano perché una risorsa specifica non riesce a eseguire l'attività.
Passi successivi
In questa esercitazione è stato descritto come integrare OCI Events Service, OCI Notifications, OCI Functions e OCI Streaming per elaborare e pubblicare in modo sicuro i payload degli eventi nei flussi privati. È stata esplorata l'impostazione di endpoint sicuri, la gestione delle chiavi di cifratura e l'utilizzo di IAM OCI per il controllo dell'accesso con filtro per garantire che solo gli utenti e i servizi autorizzati possano interagire con i dati di streaming.
Questa soluzione consente ai team di acquisire le modifiche alle risorse in tempo reale mantenendo solidi standard di sicurezza. Le organizzazioni possono utilizzare flussi privati per proteggere i dati sensibili, rispettare le normative di settore e garantire che i flussi di lavoro operativi siano allineati agli obiettivi di sicurezza e conformità dell'organizzazione. Questo approccio rafforza il tuo livello di sicurezza e consente al tuo team di ottenere un'automazione basata sugli eventi trasparente e sicura.
Per ulteriori informazioni sull'uso di OCI Functions e delle funzionalità di flusso privato OCI, contatta il tuo rappresentante Oracle o consulta Soluzioni di sicurezza cloud.
Conferme
- Autore - Aneel Kanuri (architetto cloud distinto)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Write Events to an OCI Private Stream using OCI Events Service and OCI Functions
G23238-01
December 2024