Orchestration des 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 des 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 de les 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 :

  • Invocation d'autres fonctions Lambda en séquence

  • Analyse et validation des réponses de chaque fonction

  • Implémentation de la gestion des erreurs et de la logique

  • Gestion du flux de données entre les fonctions

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

  • Exécution des tâches dans le bon ordre

  • Transmission de données entre fonctions

  • Implémentation de la gestion des erreurs à chaque étape

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

Exemple graphique du flux de travail
Graphique du flux de travail Step Functions montrant la validation des commandes, un état choisi et le traitement des paiements avec les trajectoires de réussite et d'échec

Gestion complexe des erreurs

Alors que Lambda fournit des fonctionnalités de nouvelle tentative pour les invocations asynchrones et les mappages de sources d'événements, Step Functions propose une gestion des erreurs plus sophistiquée pour les flux de travail complexes. Vous pouvez configurer des tentatives automatiques avec un retard exponentiel et définir différentes politiques de tentatives pour différents types d'erreurs. Lorsque les tentatives sont épuisées, utilisez-le pour Catch 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 la section Gestion des erreurs dans The AWS Step Functions Workshop.

Une seule fonction Lambda gère tous les éléments suivants :

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

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

  • Implémente une réduction exponentielle personnalisée du temps d'attente

  • Une fois toutes les tentatives infructueuses, détectez l'erreur et choisissez 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 du flux de travail
Graphique de flux de travail Step Functions pour le traitement des paiements avec trois résultats : paiement réussi, paiement invalide et échec du paiement

Flux de travail conditionnels et approbations humaines

Utilisez l'état Step Functions Choice pour acheminer les flux de travail en fonction du résultat de la fonction et le suffixe waitForTask Token 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, voir Rappel avec jeton de tâche dans The AWS Step Functions Workshop.

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

  • Implémentation d'une logique conditionnelle imbriquée pour évaluer les demandes de crédit

  • Invocation de différentes fonctions d'approbation en fonction du montant des demandes

  • Gestion de plusieurs voies d'approbation et points de décision

  • Suivi de l'état des approbations en attente

  • Implémentation d'une logique de délai 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 :

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

  • Suspendre l'exécution en attendant l'approbation humaine

  • Gestion des délais pour les approbations en attente

  • Fournir une visibilité sur l'état actuel de chaque demande

Exemple graphique du 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 du responsable en fonction du risque

Traitement parallèle

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

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

  • L'état Inline Map traite des ensembles de données avec jusqu'à 40 itérations simultanées. Utilisez-le pour les ensembles 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 lors du traitement de grands ensembles de données ou lorsque vous avez besoin d'une plus grande simultanéité.

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

  • Invocation simultanée de plusieurs fonctions de traitement d'image

  • Implémentation d'une logique d'exécution parallèle personnalisée

  • Gestion des délais d'attente et gestion des erreurs pour chaque tâche parallèle

  • Collecte et agrégation des résultats de toutes les fonctions

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

  • Exécution simultanée de toutes les fonctions à l'aide de l'état parallèle

  • Collecte des résultats de chaque fonction dans un tableau ordonné

  • Gestion des délais d'attente et gestion des erreurs dans toutes les exécutions parallèles

  • Procéder uniquement lorsque toutes les branches parallèles sont terminées

Exemple graphique du flux de travail
Graphe de flux de travail Step Functions avec trois fonctions Lambda parallèles : créer une miniature, ajouter un filigrane et extraire des 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. Tenez compte de 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 à EventBridge des événements Amazon, vous pouvez configurer ces services pour appeler 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 complexe des données

Vous pouvez utiliser l'état de la carte distribuée Step Functions pour traiter simultanément de grands ensembles 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 telles que des fichiers JSON ou CSV. Toutefois, pour des transformations de données plus complexes ou des analyses avancées, envisagez les alternatives suivantes :

  • Pipelines de transformation des données : AWS Glue à utiliser 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.

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

Charges de travail gourmandes en ressources processeur

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 évolutives.

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