Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Écrire des événements dans un flux privé OCI à l'aide du service d'événements OCI et du service des fonctions pour OCI
Présentation
Les règles du service d'événements d'Oracle Cloud Infrastructure (OCI) suivent les modifications de ressource dans OCI à l'aide d'événements conformes à la norme CloudEvents de la Cloud Native Computing Foundation (CNCF) . Cela permet aux développeurs de répondre aux modifications en temps réel en déclenchant du code avec le service des fonctions pour OCI, en écrivant des données dans le service de diffusion en continu pour OCI ou en envoyant des alertes à l'aide du service d'avis pour 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 du service des fonctions pour OCI ou d'un code personnalisé. Ce tutoriel explique comment utiliser le service des fonctions pour OCI pour saisir les données utiles d'événement à partir d'une règle du service d'événements pour OCI et les écrire dans un flux privé.
Objectif
- Automatisez la configuration du traitement des événements OCI et envoyez-les à un flux privé OCI de manière évolutive pour un traitement personnalisé et sécurisé.
Préalables
-
Accès à une location OCI.
-
Privilèges pour gérer les règles du service d'événements pour OCI, les applications Oracle et les services de diffusion en continu pour OCI.
Tâche 1 : Configurer les politiques requises et les autorisations 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.
-
Politiques d'utilisateur : Gérer les règles du service d'événements pour OCI, les avis OCI, le service des fonctions pour OCI, les flux OCI et l'utilisation de la chambre forte OCI (facultatif) et de la famille de réseaux.
-
Politique de service : Accordez à la fonction l'autorisation d'écrire des messages dans le flux privé OCI.
Vous trouverez des politiques détaillées ici :
Tâche 2 : Créer un flux privé
Le service de diffusion en continu pour OCI est un service OCI entièrement géré dans lequel les données sont chiffrées au repos et en transit, ce qui assure l'intégrité et la sécurité des messages. Pour une sécurité améliorée, vous pouvez utiliser le service de chambre forte OCI pour stocker et gérer vos propres clés de chiffrement, en respectant des exigences de conformité ou de sécurité spécifiques. Des points d'extrémité privés peuvent être configurés dans un réseau en nuage virtuel (VCN) pour sécuriser davantage vos flux, en associant une adresse IP privée au groupe de flux. Cela garantit que le trafic du service de diffusion en continu pour OCI reste dans le VCN, évitant ainsi entièrement Internet. Toutefois, notez que les flux utilisant des points d'extrémité privés ne sont pas accessibles à partir d'Internet, ce qui limite également la possibilité de voir leurs derniers messages au moyen de la console. Pour consommer des messages à partir d'un flux privé, le consommateur doit avoir à la fois une route et un accès au réseau où le flux privé est hébergé.
Créez un flux et un groupe de flux. Entrez le nom du flux et sélectionnez Créer un nouveau groupe de flux pour créer un groupe de flux. Dans la section Configurer le groupe de flux, entrez Nom du groupe de flux, sélectionnez Point d'extrémité privé et entrez le VCN, le sous-réseau et les détails du réseau en conséquence. Bien que facultatif, nous vous recommandons de fournir un groupe de sécurité de réseau avec une règle de trafic entrant pour tout le trafic au sein de ce groupe de sécurité de réseau. Pour plus d'informations, voir Créer un flux et Créer un groupe de flux.
Vous pouvez utiliser vos propres clés de chiffrement, 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 du flux et le point d'extrémité des messages. Nous devons transmettre ces informations à la fonction.
Tâche 3 : Créer un sujet d'avis OCI et une règle du service d'événements OCI
Comme un 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 d'avis OCI, un service de diffusion en continu OCI ou le service des fonctions pour OCI.
-
Approche 1 : Si l'exigence est d'envoyer des données utiles d'événement à un flux public, il n'est pas nécessaire d'avoir une fonction, car le flux peut être configuré de manière native.
-
Approche 2 : Si l'exigence consiste à envoyer uniquement des données utiles d'événement spécifiques à un flux privé, la fonction peut être fournie en tant qu'action directement.
-
Approche 3 : Si l'exigence consiste à envoyer des données utiles d'événements multiples à un flux privé, le moyen idéal est d'envoyer les données utiles d'événement à un sujet du service d'avis pour OCI et d'abonner le service des fonctions pour OCI au sujet des avis pour OCI.
Dans ce tutoriel, nous allons explorer l'approche 3, qui est la plus complexe.
-
Créez un sujet d'avis OCI. Pour plus d'informations, voir Création d'un sujet.
-
Créer une règle d'événement. Pour justifier cette approche, nous allons créer deux règles d'événement. Pour plus d'informations, voir Création d'une règle d'événement.
Tâche 4 : Développer et déployer la fonction
Cette fonction encode les données utiles de l'événement et les publie dans le point d'extrémité et le flux de messages fournis. Pour plus d'informations, voir 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 d'avis
Dans cette tâche, abonnez la fonction déployée à la rubrique Avis OCI. Chaque fois que le sujet Avis OCI reçoit un message, il déclenche la fonction et celle-ci écrit les données utiles de l'événement pour un flux privé.
Vous pouvez supprimer ou améliorer certains champs en modifiant le code de fonction pour répondre aux exigences. Aucune confirmation n'est requise pour les abonnements de fonction. Pour plus d'informations, voir Création d'un abonnement à une fonction.
Vérification
Il existe plusieurs endroits où le flux de données peut être vérifié.
-
Vérifiez la page des mesures d'événement pour vérifier si des événements correspondent à la règle fournie. Le graphique d'échec doit être vide.
-
Vérifiez les mesures du sujet des avis OCI. Assurez-vous que tous les messages sont livrés; il n'y a aucune donnée dans les graphiques des messages en échec.
-
Vérifiez les mesures de la fonction Appel. Assurez-vous qu'il n'y a aucune erreur et que la fonction n'est pas ralentie.
-
Vérifiez que les données sont ingérées dans le flux privé.
Si les données sont absentes dans l'un des graphiques suivants, arrêtez-vous et activez les journaux pour ce service. Les journaux expliquent pourquoi une ressource spécifique ne parvient pas à effectuer la tâche.
Étapes suivantes
Dans ce tutoriel, vous avez appris à intégrer le service d'événements pour OCI, les avis pour OCI, le service des fonctions pour OCI et le service de diffusion en continu pour OCI afin de traiter et de publier des données utiles d'événement en toute sécurité dans des flux privés. Vous avez exploré la configuration de points d'extrémité sécurisés, la gestion de clés de chiffrement et l'utilisation d'OCI IAM pour un contrôle d'accès détaillé afin de vous assurer que seuls les utilisateurs et services autorisés peuvent interagir avec vos données de diffusion en continu.
Cette solution permet aux équipes de saisir les changements de ressources en temps réel tout en maintenant des normes de sécurité robustes. Les organisations peuvent utiliser des flux privés pour protéger les données sensibles, se conformer aux réglementations de l'industrie et s'assurer que les flux de travail opérationnels s'harmonisent avec les objectifs de sécurité et de conformité organisationnels. Cette approche renforce votre position en matière de sécurité et permet à votre équipe d'obtenir une automatisation transparente et sécurisée basée sur les événements.
Pour plus d'informations sur l'utilisation du service des fonctions pour OCI et des capacités de flux privé OCI, communiquez avec votre représentant Oracle ou consultez Solutions de sécurité en nuage.
Confirmation
- Auteur - Aneel Kanuri (architecte en nuage distinct)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Write Events to an OCI Private Stream using OCI Events Service and OCI Functions
G23234-01
December 2024