En savoir plus sur les machines à états dans Step Functions - AWS Step Functions

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.

En savoir plus sur les machines à états dans Step Functions

Step Functions est basé sur des machines à états, également appelées flux de travail. Les flux de travail sont composés d'une série d'étapes pilotées par des événements.

Vous définissez un flux de travail à l'aide du langage Amazon States, également connu sous le nom deASL. Vous pouvez éventuellement utiliser Workflow Studio, un concepteur visuel de flux de travail, pour créer et modifier vos flux de travail.

Chaque étape d'un flux de travail est appelée un état. Il existe deux types d'états : les états de flux et les états de tâche :

États de flux

Les états de flux contrôlent le flux d'exécution des étapes. Par exemple, les états Choice fournissent une logique conditionnelle ; les états Wait interrompent l'exécution du flux de travail ; les états Map exécutent des flux de travail secondaires pour chaque élément d'un jeu de données ; et les états parallèles créent des branches distinctes dans vos flux de travail.

États des tâches

Les états des tâches représentent une unité de travail exécutée par un autre AWS service, par exemple en appelant un autre Service AWS ouAPI. Les états des tâches sont également appelés actions. Vous pouvez choisir des centaines d'actions pour effectuer des travaux dans AWS des services internes et externes. (Remarque : vous pouvez également utiliser des travailleurs qui s'exécutent en dehors de Step Functions pour effectuer des tâches. Pour plus d'informations, voirActivités.)

Exemple illustratif des composants d'un flux de travail Step Functions.

Exécutions et gestion des erreurs

Lorsque vous exécutez vos flux de travail, Step Functions crée une instance de flux de travail appelée exécution. Vous pouvez surveiller le statut des exécutions de vos flux de travail. Si une exécution rencontre une erreur, le flux de travail peut détecter l'erreur. En fonction de votre cas d'utilisation, vous pouvez relancer l'exécution ultérieurement pour reprendre le flux de travail.

Transmission de données

Vous pouvez éventuellement fournir des données d'entrée sous forme de JSON texte à vos flux de travail. Chaque étape peut transmettre des données aux étapes suivantes à l'aide de variables et de sorties d'état. Les données stockées dans des variables peuvent être utilisées ultérieurement. La sortie d'état devient l'entrée de l'étape suivante. Pour en savoir plus sur la transmission de données, consultezTransmission de données entre états à l'aide de variables.

À la fin des flux de travail, votre machine à états peut éventuellement produire une sortie, également sous la forme deJSON.

Transformation des données

Les états et les machines à états peuvent transformer les données à l'aide d'un langage de requête. Le langage de requête recommandé est JSONatatoutefois les machines à états créées avant l'utilisation de re:Invent 2024. JSONPath Pour des raisons de rétrocompatibilité, vos machines à états ou états individuels doivent accepter d'utiliser leur langage JSONata de requête.

Vous pouvez reconnaître les machines à JSONata états et les états individuels grâce au QueryLanguage champ défini sur « JSONata ». Les machines d'État et les États qui JSONPath les utilisent n'ont pas de QueryLanguage terrain.

Les États utilisés JSONPath auront des champs d'état tels que Paramètres InputPath ResultSelector, ResultPath, et OutputPath. Dans les définitions des machines à JSONPath états, vous verrez également des noms de champs se terminant par .$ et des valeurs préfixées par $. et$$., qui représentent tous deux des chemins. Dans les chemins, vous pouvez voir diverses fonctions intrinsèques, telles queStates.MathAdd. Les fonctions intrinsèques ne sont utilisées que dansJSONPath.

JSONatales états utilisent les champs Arguments et Output. Dans ces champs facultatifs, vous pouvez voir JSONata des expressions qui ressemblent à ce qui suit :"{% $type = 'local' %}". AvecJSONata, vous pouvez utiliser des expressions, des opérateurs et des fonctions. Pour en savoir plus, consultez Transformer les données avec JSONata in Step Functions.

Note

Vous ne pouvez utiliser qu'un seul langage de requête par État. Vous ne pouvez pas mélanger JSONPath et JSONata ce en une seule étape.

Concepts clés

Vous trouverez ci-dessous un aperçu des principaux termes contextuels de Step Functions.

Terme Description
Flux de travail Séquence d'étapes qui reflète souvent un processus métier.
States

Des étapes individuelles de votre machine à états qui peuvent prendre des décisions en fonction de leurs entrées, effectuer des actions à partir de ces entrées et transmettre les sorties à d'autres états.

Pour de plus amples informations, veuillez consulter Découverte des états de flux de travail à utiliser dans Step Functions.

Studio de flux de travail

Un concepteur visuel de flux de travail qui vous aide à prototyper et à créer des flux de travail plus rapidement.

Pour de plus amples informations, veuillez consulter Développement de flux de travail dans Step Functions Workflow Studio.

Machine d'état

Un flux de travail défini à l'aide d'un JSON texte représentant les différents états ou étapes du flux de travail ainsi que de champs tels que StartAtTimeoutSeconds, etVersion.

Pour de plus amples informations, veuillez consulter Structure des machines à états dans Amazon States Language pour les flux de travail Step Functions.

Amazon States Language

Langage JSON basé et structuré utilisé pour définir vos machines d'état. AvecASL, vous définissez un ensemble d'états qui peuvent fonctionner (Taskétat), vous déterminez les états à passer au suivant (Choiceétat) et vous arrêtez une exécution en cas d'erreur (Failétat).

Pour de plus amples informations, veuillez consulter Utiliser Amazon States Language pour définir les flux de travail Step Functions.

Configuration d'entrée et de sortie

Les états d'un flux de travail reçoivent JSON des données en entrée et transmettent généralement JSON des données en sortie à l'état suivant. Step Functions fournit des filtres pour contrôler le flux de données entre les états.

Pour de plus amples informations, veuillez consulter Traitement des entrées et des sorties dans Step Functions.

Intégration de service

Vous pouvez appeler des API actions AWS de service depuis votre flux de travail.

Pour de plus amples informations, veuillez consulter Intégrer les services avec Step Functions.

Type d'intégration de services
  • AWS SDKintégrations — Méthode standard pour appeler l'une des plus de deux cent Services AWS et plus de neuf mille API actions directement depuis votre machine d'état.

  • Intégrations optimisées : intégrations personnalisées qui rationalisent les appels et l'échange de données avec certains services. Par exemple, Lambda Invoke convertira automatiquement le Payload champ de réponse d'une JSON chaîne échappée en un JSON objet.

Modèle d'intégration des services

Lorsque vous appelez un Service AWS, vous utilisez l'un des modèles d'intégration de services suivants :

Exécution

Les exécutions par State Machine sont des instances dans lesquelles vous exécutez votre flux de travail pour effectuer des tâches.

Pour de plus amples informations, veuillez consulter Démarrage des exécutions par machine à états dans Step Functions.

Données de la machine d'état

Les données de la machine d'état peuvent prendre les formes suivantes :

  • L'entrée initiale dans une machine d'état

  • Les données transmises entre les états

  • La sortie d'une machine d'état

Cette section décrit la façon dont les données de la machine d'état sont mises en forme et utilisées dans AWS Step Functions.

Format de données

Les données de la machine à états sont représentées par JSON du texte. Vous pouvez fournir des valeurs à une machine à états en utilisant n'importe quel type de données pris en charge parJSON.

Note
  • Les nombres au format JSON texte sont conformes à la JavaScript sémantique. Ces nombres correspondent généralement à des valeurs en double précision de IEEE-854.

  • Le JSON texte suivant est valide :

    • Chaînes autonomes séparées par des guillemets

    • Objets

    • Arrays (tableaux)

    • Nombres

    • Valeurs booléennes

    • null

  • La sortie d'un état devient l'entrée de l'état suivant. Cependant, vous pouvez restreindre les états pour qu'ils fonctionnent sur un sous-ensemble des données d'entrée en utilisant le traitement des entrées et des sorties.

Entrées/Sorties de la machine d'état

Vous pouvez transmettre vos données d'entrée initiales à une machine à AWS Step Functions états de deux manières. Vous pouvez transmettre les données à une StartExecution action lorsque vous lancez une exécution. Vous pouvez également transmettre les données à la machine d'état depuis la console Step Functions. Les données initiales sont transmises à l'état StartAt de la machine d'état. Si aucune entrée n'est fournie, la valeur par défaut est un objet vide ({}).

La sortie de l'exécution est renvoyée par le dernier état (terminal). Cette sortie apparaît sous forme de JSON texte dans le résultat de l'exécution.

Pour les flux de travail standard, vous pouvez récupérer les résultats d'exécution à partir de l'historique d'exécution à l'aide d'appelants externes, tels que l'DescribeExecutionaction. Vous pouvez consulter les résultats de l'exécution sur la console Step Functions.

Pour Express Workflows, si vous avez activé la journalisation, vous pouvez récupérer les résultats depuis CloudWatch les journaux ou consulter et déboguer les exécutions dans la console Step Functions. Pour plus d’informations, consultez Utiliser CloudWatch les journaux pour enregistrer l'historique des exécutions dans Step Functions et Afficher les détails de l'exécution dans la console Step Functions.

Vous devez également prendre en compte les quotas liés à votre machine d'État. Pour plus d’informations, consultez Quotas de service Step Functions.

Entrées/Sorties d'état

L'entrée de chaque état est constituée du JSON texte de l'état précédent ou, pour l'StartAtétat, de l'entrée dans l'exécution. Certains états de contrôle de flux ont une entrée et une sortie identiques.

Dans l'exemple suivant, la machine d'état ajoute deux nombres l'un à l'autre.

  1. Définissez la AWS Lambda fonction.

    function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total }); }
  2. Définissez la machine d'état .

    { "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } } }
  3. Démarrez une exécution avec le JSON texte suivant.

    { "numbers": [3, 4] }

    L'Addétat reçoit le JSON texte et le transmet à la fonction Lambda.

    La fonction Lambda renvoie le résultat du calcul à l'état.

    L'état renvoie la valeur suivante dans sa sortie.

    { "result": 7 }

    Dans la mesure où Add est également l'état final dans la machine d'état, cette valeur est retournée comme sortie de la machine d'état.

    Si l'état final ne retourne aucune sortie, cela signifie que la machine d'état renvoie un objet vide ({}).

Pour de plus amples informations, veuillez consulter Traitement des entrées et des sorties dans Step Functions.

Invoquer AWS Step Functions depuis d'autres services

Vous pouvez configurer plusieurs autres services pour appeler des machines d'état. En fonction du type de flux de travail de la machine à états, vous pouvez appeler des machines à états de manière asynchrone ou synchrone. Pour appeler des machines d'état de manière synchrone, utilisez l'StartSyncExecutionAPIappel ou l'intégration d'Amazon API Gateway avec Express Workflows. Avec l'invocation asynchrone, Step Functions suspend l'exécution du flux de travail jusqu'à ce qu'un jeton de tâche soit renvoyé. Cependant, l'attente d'un jeton de tâche rend le flux de travail synchrone.

Les services que vous pouvez configurer pour appeler Step Functions incluent :

Les invocations de Step Functions sont régies par le StartExecution quota. Pour plus d’informations, consultez :

Transitions dans les machines à états

Lorsque vous lancez une nouvelle exécution de votre machine à états, le système commence par l'état référencé dans le StartAt champ de niveau supérieur. Ce champ, fourni sous forme de chaîne, doit correspondre exactement, majuscules et minuscules, au nom d'un état dans le flux de travail.

Après l'exécution d'un état, AWS Step Functions utilise la valeur du Next champ pour déterminer l'état suivant vers lequel passer.

Nextles champs spécifient également les noms d'état sous forme de chaînes. Cette chaîne distingue les majuscules et minuscules et doit correspondre exactement au nom d'un état spécifié dans la description de la machine à états

Par exemple, l'état suivant comprend une transition vers NextState.

"SomeState" : { ..., "Next" : "NextState" }

La plupart des États n'autorisent qu'une seule règle de transition avec Next ce champ. Cependant, certains états de contrôle de flux, tels qu'un Choice état, vous permettent de définir plusieurs règles de transition, chacune avec son propre champ. Next Le Langage des états d'Amazon fournit des détails sur chaque type d'état que vous pouvez spécifier, notamment les informations relatives à la spécification des transitions.

Les états peuvent avoir plusieurs transitions entrantes issues d'autres états.

Le processus se répète jusqu'à ce qu'il atteigne un état terminal (un état avec "Type": Succeed"Type": Fail, ou"End": true) ou qu'une erreur d'exécution se produise.

Lorsque vous redriveune exécution, elle est considérée comme une transition d'état. En outre, tous les états réexécutés dans un redrive sont également considérées comme des transitions entre États.

Les règles suivantes s'appliquent aux états au sein d'une machine d'état :

  • Les états peuvent apparaître dans n'importe quel ordre au sein du bloc englobant. Toutefois, l'ordre dans lequel ils sont listés n'a aucune incidence sur l'ordre dans lequel ils sont exécutés. Cet ordre est déterminé par le contenu des états.

  • Dans une machine à états, il ne peut y avoir qu'un seul état désigné comme start état. L'startétat est défini par la valeur du StartAt champ dans la structure de niveau supérieur.

  • Selon la logique de votre machine à états (par exemple, si votre machine à états possède plusieurs branches logiques), vous pouvez avoir plusieurs end états.

  • Si votre machine à états ne comprend qu'un seul état, il peut s'agir à la fois de l'état de début et de fin.

Transitions dans l'état d'une carte distribuée

Lorsque vous utilisez l'Mapétat en mode distribué, une transition d'état vous est facturée pour chaque exécution de flux de travail enfant lancée par l'état de carte distribuée. Lorsque vous utilisez l'Mapétat en mode Inline, aucune transition d'état ne vous est facturée pour chaque itération de l'état Inline Map.

Vous pouvez optimiser les coûts en utilisant l'Mapétat en mode distribué et en incluant un flux de travail imbriqué dans la définition de l'Mapétat. L'état de la carte distribuée ajoute également de la valeur lorsque vous lancez des exécutions de flux de travail enfants de type Express. Step Functions enregistre la réponse et le statut des exécutions du flux de travail Express Child, ce qui réduit le besoin de stocker les données d'exécution dans CloudWatch les journaux. Vous pouvez également accéder aux contrôles de flux disponibles avec un état de carte distribuée, tels que la définition de seuils d'erreur ou le traitement par lots d'un groupe d'éléments. Pour plus d'informations sur la tarification de Step Functions, consultez la section AWS Step Functions tarification.

Lisez Cohérence dans Step Functions

Les mises à jour de State Machine AWS Step Functions sont finalement cohérentes. Dans les secondes qui suivent, tous les StartExecution appels utiliseront la définition mise à jour et roleArn (le nom de ressource Amazon pour le IAM rôle). Les exécutions démarrées immédiatement après UpdateStateMachine peuvent utiliser la définition de machine d'état précédente et roleArn.

Pour plus d’informations, consultez les ressources suivantes :