Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modernisez votre architecture grâce au serverless et l'orienté événement

Modernisez votre architecture grâce au serverless et l'orienté événement

Les architectures sans serveurs orientées événements offrent une flexibilité et une agilité inégalées pour répondre aux besoins métiers en constante évolution. Dans cette session, vous découvrirez les éléments clés qui constituent une architecture orientée événements, ainsi que les principaux patterns d'intégrations et de découplage de vos applications. La session traitera d'aspects difficiles tel que la transformation et l'enrichissement de messages ou l'intégration avec des services non-AWS. Vous découvrirez notamment comment Sézane, première marque de mode française née en ligne, utilise ces technologies pour s'intégrer avec des systèmes historiques.

Jérôme Van Der Linden

April 25, 2024
Tweet

More Decks by Jérôme Van Der Linden

Other Decks in Technology

Transcript

  1. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. P A R I S , 3 A V R I L 2 0 2 4
  2. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Modernisez votre architecture grâce au serverless et l'orienté événement Jerome Van Der Linden D O P 3 0 4 - F R Sr Solutions Architect Builder AWS Nicolas Benoist CTO Sézane
  3. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Agenda • Que sont les architectures orientées événements ? • Patterns d’architectures orientées événements • Retour d’expérience Sézane • Architecture orientée événements avec des applications tierces • Personnalisation et transformation des événements • Conclusion
  4. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Que sont les architectures orientées événements ?
  5. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. L’architecture orienté événements (EDA) est un concept qui utilise des événements pour communiquer entre des applications découplées de manière asynchrone. © 2023, Amazon Web Services, Inc. or its affiliates. All rights reserved.
  6. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Les éléments d’une architecture orienté événements Service Compte client Service Facturation Service clients Bus de messages compte créé compte créé compte créé • Producteur d’événements • Consommateur d’événements • Bus de messages • Evénements compte supprimé compte supprimé
  7. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Événements • Un événement correspond à une action passée • Différent d’une « commande » ou « requête » (futur) • Il existe différentes catégories d’événements • Métier • Opérationnel • AWS • Les événements sont au format JSON et contiennent • Des metadatas (date, source, …) • La donnée elle-même { "version": "0", "id": "6a7e8feb-b491-4cf7", "detail-type": "order-submission", "source": "checkout", "account": "123456789012", "time": "2023-10-29T12:10:21Z", "region": "eu-central-1", "resources": ["arn:your-event-bus"], "detail": { "order_number": "123-456x", "total": 29.99, "currency": "EUR", "customer_id": "cu-101", "items": [] } }
  8. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Producteur d’événements Service Compte client Service Facturation Service clients Bus de messages compte créé compte créé compte créé • Agnostique des consommateurs • Ajoute l’identité du producteur • Respecte un schéma/contrat • Identifiant de l’événement unique • Ajoute seulement les données requises compte supprimé compte supprimé
  9. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Consommateur d’événements Service Compte client Service Facturation Service clients Bus de messages compte créé compte créé compte créé • Idempotence • Ordre non garanti • Stocke les événements et les traite compte supprimé compte supprimé
  10. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Bus de messages Service Compte client Service Facturation Service clients Bus de messages compte créé compte créé compte créé • Prend en charge plusieurs producteurs et consommateurs • Dirige les événements vers différentes cibles • Transformation des événements • Référentiel et recherche de schémas compte supprimé compte supprimé
  11. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Patterns d’architectures orientées événements
  12. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Service traitement commandes B C A Traitement au même débit Que se passe-t-il si le service échoue ? Le service en sait trop sur le consommateur ? Cas d’usage – Intégration entre des services
  13. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Service traitement commandes B C A File Traitement à un débit désiré Défaillances isolées Service decouplé Pattern – Intégration en utilisant une file d’attente
  14. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Communication asynchrone avec SQS Producteur Consommateur M1 Consommateur M2 M1 Ack M2 Ack Ack • File de messages • Couplage faible • Persistence des messages • Le consommateur pull les messages • Le consommateur contrôle la vitesse de consommation • Possibilité d’augmenter le nombre de consommateurs File Amazon SQS
  15. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Service facturation Service traitement commandes Service de livraison Le service en sait trop sur le consommateur ? Echecs ? Duplication d’effort Cas d’usage – Notification entre services
  16. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Service facturation Service traitement commandes Service de livraison Bus d’événements CommandeCréée Pattern – Notification d’événements
  17. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Producteur Consommateur M1 Consommateur M2 Bleu Violet Bus M1 M2 Ack Bleu Violet Bleu? Violet? • Bus d’événements • Niveau élevé de découplage • Filtrage / Routage des événements • Publication à des nombreux consommateurs (« fan-out ») • Diffuser des événements (même sans consommateur) Publish/subscribe N O T I F I E R L E S C O N S O M M A T E U R S E N A V A L Amazon EventBridge
  18. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Chorégraphie Produits Fidélité Promotions Produit enregistré App Garantie produit Client Amazon EventBridge Produit enregistré Produit enregistré Produit enregistré Produit enregistré Promotion accordée Code réduction généré Amazon SES Application tierce Entrepot Enregistrement EventBridge rule Appel API
  19. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Retour d’expérience Sézane
  20. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Présentation de Sézane Fondée en 2013 Octobre-Editions pour les hommes Nombreux partenaires logistiques Livre dans 70 pays Programme solidaire DEMAIN Equipe Technology intégrée
  21. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Organisation Sézane Équipe de 30 personnes Architecture Macro-services Développement custom E-commerce 5 Millions de visiteurs / mois Bascule sur AWS en 2020
  22. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Cas d’usage 100 000 fichiers échangés / jour Envoi toutes les minutes par Batch 20 partenaires 5 protocoles différents Exemple : 1 commande passée = 1 ligne d’un CSV Partenaires logistiques (FTP, sFTP, imap)
  23. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Problématiques rencontrées Equipe Sézane • Recherche fastidieuse dans les FTP des partenaires • Analyse impossible Infra Sézane • Aucune notification d’un nouveau fichier • Complexité à marquer un fichier comme traité • Gestion par l’équipe de devs des protocoles et des accès Partenaires • Complexité dans les échanges de fichier • Echange asynchrone • Sécurité non maitrisée
  24. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Solution retenue Amazon ECS Amazon S3 Amazon Athena “FTP Factory“ Amazon lambda Services métiers Amazon Redshift Data Partenaires logistiques (FTP, sFTP, imap) Amazon Redshift Clients Aucun changement côté partenaires
  25. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Zoom sur la FTP Factory Serveur FTP/SFTP/FTPS Amazon S3 Out Amazon EventBridge Scheduler Amazon S3 In AWS Lambda AWS Lambda FTP In AWS Lambda FTP Out Amazon SQS Amazon SQS Amazon DynamoDB Sézane Backend Partenaire Flux Entrée Flux Sortie Amazon Athena 1 3 2 1 2 3
  26. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Gains apportés Equipe Sézane • Recherche instantanée sur > 50To de fichiers • Traçabilité des commandes Infra Sézane • Passage au serverless • Création d’évenements à chaque nouveau fichier • Utilisation de DynamoDB • Sauvegarde dans Secret Manager des credentials Partenaires • Aucun changement chez les partenaires • Accès contrôlés et limités
  27. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Architecture orientée événements avec des applications tierces
  28. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Communication avec des applications tierces AWS Cloud SaaS … Applications Applications ? Webhook Autres On Premise
  29. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Communication asynchrone avec SQS AWS Cloud On Premise SaaS … Applications Applications Webhook Autres File SQS + SDK AWS Amazon Simple Queue Service (Amazon SQS) // Create SQS Client String queueUrl = "QUEUE_URL"; SqsClient sqsClient = SqsClient.builder() .region(Region.EU_WEST_3) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Receive messages ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder() .queueUrl(queueUrl) .waitTimeSeconds(10) .maxNumberOfMessages(10) .visibilityTimeout(10) .attributeNames(QueueAttributeName.ALL) .build(); List<Message> messages = sqsClient.receiveMessage(receiveMessageRequest) .messages(); // Delete messages after receipt for (Message message : messages) { DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder() .queueUrl(queueUrl) .receiptHandle(message.receiptHandle()) .build(); sqsClient.deleteMessage(deleteMessageRequest); } messages
  30. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Notifications avec EventBridge & API Destinations AWS Cloud SaaS … Applications Webhook Autres Amazon EventBridge Event Bus Règle Règle On Premise Applications Règle API events events events API Destinations • Points de terminaison HTTP configurable en tant que cible d’une règle EventBridge • Intégration simplifiée entre AWS et des applications tierces grâce à des API REST (GET/PUT/POST/DELETE) • Intégration native entre AWS et des applications SaaS partenaires cibles
  31. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – API Destinations Événement Filtre Connexion Règle Cible (API Destination)
  32. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – API Destinations Événement Filtre Connexion Règle Cible (API Destination) ****** Basic Auth Utilisateur / mot de pass Oauth Client ID Client secret Auth endpoint API Key Clé / valeur
  33. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – API Destinations Événement Filtre Connexion Point de terminaison HTTP Règle Cible (API Destination) Destination personnalisée URL Méthode HTTP Limite d’appels Destination partenaire Intégration native avec 12 partenaires
  34. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – API Destinations Événement Filtre Connexion Point de terminaison HTTP Règle Cible (API Destination) Entêtes HTTP + paramètres de requêtes Rejeu des événements (24h / 185 tentatives) + DLQ
  35. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Personnalisation et transformation des événements
  36. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Personnalisation / transformation des événements { "version": "0", "id": "6a7e8feb-b491-4cf7", "detail-type": "order-submission", "source": "checkout", "account": "123456789012", "time": "2023-10-29T12:10:21Z", "region": "eu-central-1", "resources": ["arn:your-event-bus"], "detail": { "metadata": { "version": "1", "domain": "retail", "subdomain": "checkout", "service": "order-submission", "category": "domain-event", "type": "data" }, "data": { "order_number": "123-456x", "total": 29.99, "currency": "EUR", "customer_id": "cu-101", "items": [] } } } Événement EventBridge { "datetime": "2023-10-29T12:10:21Z", "source": "retail/checkout/order-submission", "orderId": "123-456x", "amount": 29.99, "currency": "EUR", "customerId": "cu-101", ”products": [] } ? Données requises par le service tiers
  37. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – Transformateur d’entrée Événement Filtre Connexion Point de terminaison HTTP Règle Cible (API Destination) Transformateur Modèle + Chemin d’entrée
  38. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – Transformateur d’entrée { "datetime": "$.time", "domain": "$.detail.metadata.domain", "subdomain": "$.detail.metadata.subdomain", "service": "$.detail.metadata.service", "orderId": "$.detail.data.order_number", "amount": "$.detail.data.total", "currency": "$.detail.data.currency", "customerId": "$.detail.data.customer_id", "products": "$.detail.data.items" } Chemin d'entrée { "version": "0", "id": "6a7e8feb-b491-4cf7", "detail-type": "order-submission", "source": "checkout", "account": "123456789012", "time": "2023-10-29T12:10:21Z", "region": "eu-central-1", "resources": ["arn:your-event-bus"], "detail": { "metadata": { "version": "1", "domain": "retail", "subdomain": "checkout", "service": "order-submission", "category": "domain-event", "type": "data" }, "data": { "order_number": "123-456x", "total": 29.99, "currency": "EUR", "customer_id": "cu-101", "items": [] } } }
  39. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – Transformateur d’entrée { "datetime": "$.time", "domain": "$.detail.metadata.domain", "subdomain": "$.detail.metadata.subdomain", "service": "$.detail.metadata.service", "orderId": "$.detail.data.order_number", "amount": "$.detail.data.total", "currency": "$.detail.data.currency", "customerId": "$.detail.data.customer_id", "products": "$.detail.data.items" } Chemin d'entrée { "datetime": "<datetime>", "source": "<domain>/<subdomain>/<service>", "orderId": "<orderId>", "amount": <amount>, "currency": "<currency>", "customerId": "<customerId>", "products": <products> } Modèle
  40. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. EventBridge – Transformateur d’entrée { "datetime": "2023-10-29T12:10:21Z", "source": "retail/checkout/order-submission", "orderId": "123-456x", "amount": 29.99, "currency": "EUR", "customerId": "cu-101", ”products": [] } { "datetime": "$.time", "domain": "$.detail.metadata.domain", "subdomain": "$.detail.metadata.subdomain", "service": "$.detail.metadata.service", "orderId": "$.detail.data.order_number", "amount": "$.detail.data.total", "currency": "$.detail.data.currency", "customerId": "$.detail.data.customer_id", "products": "$.detail.data.items" } Chemin d'entrée { "datetime": "<datetime>", "source": "<domain>/<subdomain>/<service>", "orderId": "<orderId>", "amount": <amount>, "currency": "<currency>", "customerId": "<customerId>", "products": <products> } Modèle
  41. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Enrichissement des événements { "datetime": "2023-10-29T12:10:21Z", "source": "retail/checkout/order-submission", "orderId": "123-456x", "amount": 29.99, "currency": "EUR", "customerId": "cu-101", ”products": [ { "productid": "pr-324", "price": 29.99, ”quantity": 1 } ] } { "datetime": "2023-10-29T12:10:21Z", "source": "retail/checkout/order-submission", "orderId": "123-456x", "amount": 29.99, "currency": "EUR", "customer": { "customerId": "cu-101”, "firstName": "Bob", ”lastName": "Marley", "billingAddress": { ... }, "shippingAddress": { ... } }, ”products": [ { "productid": "pr-324", "price": 29.99, "quantity": 1, "referenceCode": "px43-4567-xdej", "name": "Waterproof Bluetooth speaker" } ] } ?
  42. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Enrichissement des événements - EventBridge Pipes Amazon SQS Amazon Kinesis Data Streams Amazon DynamoDB Amazon MSK Amazon MQ Source Événements provenant d’un service AWS supporté Amazon EventBridge Pipes Filtre, enrichi, et transforme les événements Filter Enrichissement et transformation Restructure, modifie ou ajoute des données à l’événement entrant Cible Envoi de l’événement à un des 15 services AWS supportés Amazon EventBridge + API Destination Amazon Kinesis Data Streams AWS Step Functions Amazon API Gateway Amazon SQS Amazon API Gateway AWS Step Functions AWS Lambda Amazon EventBridge API destinations
  43. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Ressources s12d.com/eda Serverlessland
  44. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Repousser les limites de la création skillbuilder.aws Profitez de votre essai gratuit de 7 jours d’AWS Skill Builder
  45. © 2024, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Merci ! Merci de répondre à l’enquête sur la session dans l’application mobile Jerome Van Der Linden linkedin.com/in/jeromevdl Nicolas Benoist