Orchestration de fonctions Lambda avec Step Functions - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Orchestration de fonctions Lambda avec Step Functions

Les fonctions Lambda qui gèrent plusieurs tâches, implémentent une logique de nouvelle tentative ou contiennent une logique de branchement sont des anti-modèles. Nous vous recommandons plutôt d’écrire des fonctions Lambda qui exécutent des tâches uniques et d’utiliser AWS Step Functions pour orchestrer les flux de travail de vos applications.

Par exemple, le traitement d’une commande peut nécessiter la validation des détails de la commande, la vérification des niveaux de stock, le traitement du paiement et la génération d’une facture. Écrivez des fonctions Lambda distinctes pour chaque tâche et utilisez Step Functions pour gérer le flux de travail. Step Functions coordonne le flux de données entre vos fonctions et gère les erreurs à chaque étape. Cette séparation facilite la visualisation, la modification et la maintenance de vos flux de travail à mesure qu’ils se complexifient.

Quand utiliser Step Functions avec Lambda

Les scénarios suivants sont de bons exemples d’utilisation de Step Functions pour orchestrer des applications basées sur Lambda.

Traitement séquentiel

Le traitement séquentiel se produit lorsqu’une tâche doit être terminée avant que la suivante puisse commencer. Par exemple, dans un système de traitement des commandes, le traitement des paiements ne peut pas commencer tant que la validation de la commande n’est pas terminée, et la génération des factures doit attendre la confirmation du paiement. Écrivez des fonctions Lambda distinctes pour chaque tâche et utilisez Step Functions pour gérer la séquence et le flux de données entre les fonctions.

Une seule fonction Lambda gère l’ensemble du processus de traitement des commandes en :

  • Invoquant d’autres fonctions Lambda en séquence

  • Analysant et validant les réponses de chaque fonction

  • Implémentant la gestion des erreurs et la logique de récupération

  • Gérant le flux de données entre les fonctions

Utilisez deux fonctions Lambda : l’une pour valider la commande et l’autre pour traiter le paiement. Step Functions coordonne ces fonctions en :

  • Exécutant les tâches dans le bon ordre

  • Transmettant les données entre les fonctions

  • Implémentant la gestion des erreurs à chaque étape

  • Utilisant les états Choice pour s’assurer que seules les commandes valides sont réglées

Exemple graphique de flux de travail
Graphique de flux de travail Step Functions montrant la validation des commandes, un état Choice et le traitement des paiements avec les chemins de réussite et d’échec

Gestion des erreurs complexes

Bien que Lambda propose des fonctionnalités de nouvelle tentative pour les invocations asynchrones et les mappages des sources d’événements, Step Functions fournit une gestion des erreurs plus sophistiquée pour les flux de travail complexes. Vous pouvez configurer des nouvelles tentatives automatiques avec un backoff exponentiel et définir différentes politiques de tentatives pour différents types d’erreurs. Lorsque les tentatives sont épuisées, utilisez Catch pour rediriger les erreurs vers un état de secours. Cela est particulièrement utile lorsque vous avez besoin d’une gestion des erreurs au niveau du flux de travail qui coordonne plusieurs fonctions et services.

Pour en savoir plus sur la gestion des erreurs de fonction Lambda dans une machine à états, consultez Gestion des erreurs dans l’Atelier AWS Step Functions.

Une seule fonction Lambda gère tout ce qui suit :

  • Tentatives d’appel à un service de traitement des paiements

  • Si le service de paiement n’est pas disponible, la fonction attend et essaie à nouveau ultérieurement.

  • Implémente un backoff exponentiel personnalisé du temps d’attente

  • Quand toutes les tentatives échouent, détecte l’erreur et choisit un autre flux

Utilisez une seule fonction Lambda dédiée uniquement au traitement des paiements. Step Functions gère la gestion des erreurs en :

Exemple graphique de flux de travail
Graphique de flux de travail Step Functions pour le traitement des paiements avec trois résultats : paiement réussi, paiement non valide et échec du paiement

Flux de travail conditionnels et approbations humaines

Utilisez l’état Choice Step Functions pour acheminer les flux de travail en fonction du résultat de la fonction et le suffixe waitForTaskToken pour suspendre les flux de travail en fonction de décisions humaines. Par exemple, pour traiter une demande d’augmentation de limite de crédit, utilisez une fonction Lambda pour évaluer les facteurs de risque. Utilisez ensuite Step Functions pour acheminer les demandes à haut risque vers une approbation manuelle et les demandes à faible risque vers une approbation automatique.

Pour déployer un exemple de flux de travail utilisant un modèle d’intégration de jeton de tâche de rappel, consultez Rappel avec jeton de tâche dans l’Atelier AWS Step Functions.

Une fonction Lambda unique gère un flux de travail d’approbation complexe en :

  • Implémentant une logique conditionnelle imbriquée pour évaluer les demandes de crédit

  • Invoquant différentes fonctions d’approbation en fonction du montant des demandes

  • Gérant plusieurs voies d’approbation et points de décision

  • Suivant l’état des approbations en attente

  • Implémentant une logique de délai d’expiration et de notification pour les approbations

Utilisez trois fonctions Lambda : une pour évaluer le risque de chaque demande, une pour approuver les demandes à faible risque et une pour acheminer les demandes à haut risque vers un responsable pour examen. Step Functions gère le flux de travail en :

  • Utilisant les états Choice pour acheminer les demandes en fonction du montant et du niveau de risque

  • Suspendant l’exécution en attendant l’approbation humaine

  • Gérant les délais d’expiration pour les approbations en attente

  • Fournissant une visibilité sur l’état actuel de chaque demande

Exemple graphique de flux de travail
Graphique du flux de travail Step Functions montrant l’évaluation des demandes de crédit, le passage à l’approbation automatique ou à l’approbation par un responsable en fonction du risque

Traitement parallèle

Step Functions propose trois méthodes pour gérer le traitement parallèle :

  • L’état Parallel exécute simultanément plusieurs ramifications de votre flux de travail. Utilisez-le lorsque vous devez exécuter différentes fonctions en parallèle, comme la génération de vignettes lors de l’extraction des métadonnées des images.

  • L’état Inline Map traite des tableaux de données avec jusqu’à 40 itérations simultanées. Utilisez-le pour les jeux de données de petite ou moyenne taille dans lesquels vous devez effectuer la même opération sur chaque élément.

  • L’état Distributed Map gère un traitement parallèle à grande échelle avec jusqu’à 10 000 exécutions simultanées, prenant en charge à la fois les tableaux JSON et les sources de données Amazon Simple Storage Service (Amazon S3). Utilisez-le lorsque vous traitez de grands jeux de données ou lorsque vous avez besoin d’une plus grande simultanéité.

Une seule fonction Lambda tente de gérer le traitement en parallèle en :

  • Invoquant simultanément plusieurs fonctions de traitement d’image

  • Implémentant une logique d’exécution parallèle personnalisée

  • Gérant les délais d’attente et les erreurs pour chaque tâche parallèle

  • Collectant et agrégeant les résultats de toutes les fonctions

Utilisez trois fonctions Lambda : une pour créer une vignette, une pour ajouter un filigrane et une pour extraire les métadonnées. Step Functions gère ces fonctions en :

  • Exécutant simultanément toutes les fonctions à l’aide de l’état Parallel

  • Collectant les résultats de chaque fonction dans un tableau ordonné

  • Gérant les délais d’expiration et les erreurs dans toutes les exécutions parallèles

  • Continuant uniquement lorsque toutes les ramifications parallèles sont terminées

Exemple graphique de flux de travail
Graphique de flux de travail Step Functions avec trois fonctions Lambda parallèles : création d’une vignette, ajout d’un filigrane et extraction de métadonnées

Quand ne pas utiliser Step Functions avec Lambda

Toutes les applications basées sur Lambda ne bénéficient pas de l’utilisation de Step Functions. Envisagez ces scénarios lorsque vous choisissez l’architecture de votre application.

Applications simples

Pour les applications qui ne nécessitent pas d’orchestration complexe, l’utilisation de Step Functions peut ajouter une complexité inutile. Par exemple, si vous traitez simplement des messages provenant d’une file d’attente Amazon SQS ou si vous répondez à des événements Amazon EventBridge, vous pouvez configurer ces services pour invoquer directement vos fonctions Lambda. De même, si votre application ne comprend qu’une ou deux fonctions Lambda avec une gestion simple des erreurs, l’invocation directe de Lambda ou les architectures pilotées par les événements peuvent être plus simples à déployer et gérer.

Traitement de données complexes

Vous pouvez utiliser l’état Distributed Map de Step Functions pour traiter simultanément de grands jeux de données Amazon S3 avec des fonctions Lambda. Cela est efficace pour de nombreuses charges de travail parallèles à grande échelle, notamment pour le traitement de données semi-structurées, comme des fichiers JSON ou CSV. Toutefois, pour des transformations de données plus complexes ou l’analytique avancée, envisagez les alternatives suivantes :

  • Pipelines de transformation des données : utilisez AWS Glue pour les tâches ETL qui traitent des données structurées ou semi-structurées provenant de sources multiples. AWS Glue est particulièrement utile lorsque vous avez besoin de fonctionnalités intégrées de gestion de schémas et de catalogues de données.

  • Analytique des données : utilisez Amazon EMR pour l’analytique des données à l’échelle du pétaoctet, en particulier lorsque vous avez besoin d’outils de l’écosystème Apache Hadoop ou pour des charges de travail de machine learning qui dépassent les limites de mémoire de Lambda.

Charges de travail intensives en UC

Bien que Step Functions puisse orchestrer des tâches gourmandes en ressources CPU, les fonctions Lambda peuvent ne pas être adaptées à ces charges de travail en raison de leurs ressources CPU limitées. Pour les opérations nécessitant des calculs intensifs au sein de vos flux de travail, envisagez les alternatives suivantes :

  • Orchestration de conteneurs : utilisez Step Functions pour gérer les tâches Amazon Elastic Container Service (Amazon ECS) afin d’obtenir des ressources de calcul plus cohérentes et faciles à mettre à l’échelle.

  • Traitement par lots : intégrez AWS Batch à Step Functions pour gérer les tâches par lots gourmandes en ressources de calcul qui nécessitent une utilisation soutenue du processeur.