Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Ecrire des événements dans un flux privé OCI à l'aide du service OCI Events et d'OCI Functions
Introduction
Les règles du service d'événements Oracle Cloud Infrastructure (OCI) suivent les modifications apportées aux ressources dans OCI à l'aide d'événements qui sont conformes à la norme CloudEvents de la CNCF. Cela permet aux développeurs de répondre aux modifications en temps réel en déclenchant du code avec OCI Functions, en écrivant des données vers OCI Streaming ou en envoyant des alertes à l'aide de notifications OCI.
Bien que l'envoi d'événements à des flux publics soit pris en charge de manière native, l'écriture dans un flux privé nécessite une approche personnalisée à l'aide d'OCI Functions ou d'un code personnalisé. Ce tutoriel explique comment utiliser OCI Functions pour capturer les données traitées d'événement à partir d'une règle OCI Events Service et les écrire dans un flux privé.
Objectif
- Automatisez la configuration pour le traitement des événements OCI et envoyez-les à un flux privé OCI de manière évolutive pour un traitement sécurisé et personnalisé.
Prérequis
-
Accès à une location OCI.
-
Privilèges permettant de gérer les règles du service OCI Events, les applications Oracle et les services OCI Streaming.
Tâche 1 : configuration des stratégies requises et des droits d'accès Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)
Chaque composant de cette solution doit avoir accès aux ressources OCI avec lesquelles il interagit. Pour suivre ce tutoriel, le développeur doit disposer des autorisations suivantes.
-
Stratégies utilisateur : gérez les règles du service OCI Events, les notifications OCI, OCI Functions, les flux OCI et l'utilisation d'OCI Vault (facultatif) et de la famille de réseaux.
-
Stratégie de service : autorisez la fonction à écrire des messages dans le flux privé OCI.
Des politiques détaillées peuvent être trouvées ici :
Tâche 2 : créer un flux privé
OCI Streaming est un service OCI entièrement géré dans lequel les données sont cryptées au repos et en transit, garantissant ainsi l'intégrité et la sécurité des messages. Pour améliorer la sécurité, vous pouvez utiliser le service OCI Vault pour stocker et gérer vos propres clés de cryptage, en respectant des exigences de conformité ou de sécurité spécifiques. Les adresses privées peuvent être configurées au sein d'un réseau cloud virtuel (VCN) pour sécuriser davantage vos flux de données, en associant une adresse IP privée au pool de flux de données. Cela garantit que le trafic OCI Streaming reste dans le VCN, évitant ainsi entièrement Internet. Toutefois, les flux utilisant des adresses privées ne sont pas accessibles à partir d'Internet, ce qui limite également la possibilité d'afficher leurs derniers messages via la console. Pour utiliser les messages d'un flux privé, le destinataire doit disposer à la fois d'un routage et d'un accès au réseau sur lequel le flux privé est hébergé.
Créez un flux de données et un pool de flux de données. Entrez le nom du flux de données et sélectionnez Créer un pool de flux de données pour créer un pool de flux de données. Dans la section Configurer le pool de flux de données, entrez le nom du pool de flux de données, sélectionnez Adresse privée et entrez le VCN et le sous-réseau, ainsi que les détails du réseau en conséquence. Bien que facultatif, nous vous recommandons de fournir à un groupe de sécurité réseau une règle entrante pour tout le trafic au sein de ce groupe de sécurité réseau. Pour plus d'informations, reportez-vous à Création d'un flux et à Création d'un pool de flux de données.
Vous pouvez utiliser vos propres clés de cryptage, ce qui vous permet de mieux contrôler le cycle de vie de la clé. Vous avez la possibilité d'ajuster la conservation des messages dans le flux. La valeur par défaut est 1 jour et la valeur maximale est 7 jours.
Notez l'OCID de flux de données et l'adresse de messages. Nous devons transmettre ces informations à la fonction.
Tâche 3 : création d'un sujet OCI Notifications et d'une règle de service OCI Events
En guise de rappel, voici comment fonctionne un événement. Les services OCI émettent des événements pour les ressources ou les données. Nous créons des règles, qui incluent un filtre pour spécifier les événements qui vous intéressent. Les règles doivent déclencher une action lorsque le filtre trouve un événement correspondant. L'action peut être un sujet OCI Notifications, un service OCI Streaming ou OCI Functions.
-
Approche 1 : si l'exigence est d'envoyer la charge utile d'événement à un flux public, aucune fonction n'est nécessaire, car le flux peut être configuré de manière native.
-
Approche 2 : si l'exigence consiste à envoyer uniquement une charge utile d'événement spécifique à un flux de données privé, la fonction peut être fournie directement en tant qu'action.
-
Approche 3 : si l'exigence consiste à envoyer plusieurs données traitées d'événement vers un flux privé, le moyen idéal est d'envoyer la charge utile d'événement à un sujet OCI Notifications et d'abonner OCI Functions au sujet OCI Notifications.
Dans ce tutoriel, nous allons explorer l'approche 3, qui est la plus complexe.
-
Créez un sujet OCI Notifications. Pour plus d'informations, reportez-vous à Création d'une rubrique.
-
Créez une règle event. Pour justifier l'approche, nous allons créer deux règles d'événement. Pour plus d'informations, reportez-vous à Création d'une règle Events.
Tâche 4 : développer et déployer la fonction
Cette fonction code la charge utile d'événement et la publie dans l'adresse et le flux de messages fournis. Pour plus d'informations, reportez-vous à la section Création de fonctions.
-
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
La dernière étape consiste à indiquer à la fonction où se trouve le flux privé. Cette fonction utilise des paramètres de configuration, ce qui la rend réutilisable si vous souhaitez effectuer un déploiement dans une autre location.
Tâche 5 : abonner la fonction au sujet Notifications
Dans cette tâche, abonnez la fonction déployée à la rubrique Notifications OCI. Chaque fois que le sujet OCI Notifications reçoit un message, il déclenche la fonction et celle-ci écrit la charge utile d'événement pour un flux privé.
Vous pouvez éliminer ou améliorer certains champs en modifiant le code de la fonction pour répondre aux exigences. La confirmation n'est pas requise pour les abonnements de fonction. Pour plus d'informations, reportez-vous à Création d'un abonnement via une fonction.
Vérification
Il existe plusieurs endroits où le flux de données peut être vérifié.
-
Vérifiez la page de mesures d'événement pour vérifier si des événements correspondent à la règle fournie. Le graphique d'échec doit être vide.
-
Consultez les mesures du sujet OCI Notifications. Assurez-vous que tous les messages sont distribués ; il n'y a aucune donnée dans les graphiques de messages en échec.
-
Vérifiez les mesures d'appel de la fonction. Assurez-vous qu'il n'y a pas d'erreur et que la fonction ne ralentit pas.
-
Vérifiez que les données sont en cours d'inclusion dans le flux privé.
Si les données sont absentes dans l'un des graphiques suivants, arrêtez-vous là et activez les journaux pour ce service. Les journaux expliquent pourquoi une ressource spécifique ne parvient pas à effectuer la tâche.
Etapes suivantes
Dans ce tutoriel, vous avez appris à intégrer OCI Events Service, OCI Notifications, OCI Functions et OCI Streaming pour traiter et publier en toute sécurité les données traitées d'événement dans des flux de données privés. Vous avez exploré la configuration d'adresses sécurisées, la gestion des clés de cryptage et l'utilisation d'OCI IAM pour un contrôle d'accès affiné afin de vous assurer que seuls les utilisateurs et services autorisés peuvent interagir avec vos données de transmission en continu.
Cette solution permet aux équipes de capturer les changements de ressources en temps réel tout en maintenant des normes de sécurité robustes. Les entreprises peuvent utiliser des flux privés pour protéger les données sensibles, se conformer aux réglementations du secteur et s'assurer que les workflows opérationnels correspondent aux objectifs de sécurité et de conformité de l'entreprise. Cette approche renforce votre posture de sécurité et permet à votre équipe de réaliser une automatisation transparente et sécurisée basée sur les événements.
Pour plus d'informations sur l'utilisation d'OCI Functions et des fonctionnalités de flux privé OCI, contactez votre représentant Oracle ou consultez les solutions de sécurité cloud.
Remerciements
- Auteur - Aneel Kanuri (architecte cloud distingué)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation produit, consultez le site Oracle Help Center.
Write Events to an OCI Private Stream using OCI Events Service and OCI Functions
G23243-01
December 2024