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
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
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 :
Réessayant automatiquement les tâches ayant échoué avec des périodes de backoff configurables
Appliquant différentes politiques de nouvelle tentative en fonction des types d’erreur
Acheminant différents types d’erreurs vers les états de secours appropriés
Maintenant l’état et l’historique de gestion des erreurs
Exemple graphique de flux de travail
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
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
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
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.