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.
Exemples d'orchestration avec Step Functions
Tout le travail au sein de votre machine d'état Step Functions est effectué par des éléments Tasks
. Un élément Task
effectue le travail en utilisant une activité ou une fonction Lambda, ou en transmettant des paramètres aux actions d'API d'autres Intégrations de service AWS prises en charge pour Step Functions.
Sections
Configuration d'une fonction Lambda en tant que tâche
Step Functions peut invoquer des fonctions Lambda directement à partir d'un état Task
dans une définition de langage des états d'Amazon.
... "MyStateName":{ "Type":"Task", "Resource":"arn:aws:lambda:us-west-2:01234567890:function:my_lambda_function", "End":true ...
Vous créez un état Task
qui appelle votre fonction Lambda avec l'entrée sur la machine d'état ou un document JSON.
Exemple event.json – Entrée de la fonction d'erreur aléatoire
{ "max-depth": 10, "current-depth": 0, "error-rate": 0.05 }
Configuration d'une machine d'état en tant que source d'événement
Vous pouvez créer une machine d'état Step Functions qui appelle une fonction Lambda. L'exemple suivant montre un état Task
qui appelle la version 1
d'une fonction nommée my-function
avec une charge utile d'événement comportant trois clés. Lorsque la fonction renvoie une réponse réussie, la machine d'état passe à la tâche suivante.
Exemple de machine d'état
... "Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1", "Payload": { "max-depth": 10, "current-depth": 0, "error-rate": 0.05 } }, "Next": "NEXT_STATE", "TimeoutSeconds": 25 }
Autorisations
Votre machine d'état a besoin d'une autorisation pour appeler l'API Lambda afin d'appeler une fonction. Pour lui accorder une autorisation, ajoutez la stratégie AWS gérée AWSLambdaRole
Les paramètres FunctionName
et Payload
correspondent aux paramètres de l'opération d'API Invoke. Outre ceux-ci, vous pouvez également spécifier les paramètres InvocationType
et ClientContext
. Par exemple, pour appeler la fonction de manière asynchrone et passer à l'état suivant sans attendre un résultat, vous pouvez définir InvocationType
sur Event
:
"InvocationType": "Event"
Au lieu de coder en dur la charge utile de l'événement dans la définition de la machine d'état, vous pouvez utiliser l'entrée de l'exécution de la machine d'état. L'exemple suivant utilise l'entrée spécifiée lorsque vous exécutez la machine d'état comme charge utile d'événement :
"Payload.$": "$"
Vous pouvez également appeler une fonction de manière asynchrone et attendre qu'elle fasse un rappel avec le kit SDK AWS. Pour ce faire, définissez la ressource de l'état sur arn:aws:states:::lambda:invoke.waitForTaskToken
.
Pour plus d'informations, consultez Appeler Lambda avec Step Functions dans le Manuel du développeur AWS Step Functions.
Gestion des erreurs de fonction et de service
Quand votre fonction ou le service Lambda renvoie une erreur, vous pouvez réessayer l'appel ou passer à un état différent en fonction du type d'erreur.
L'exemple suivant montre une tâche d'appel qui effectue de nouvelles tentatives sur des exceptions d'API Lambda de série 5XX
(ServiceException
), des limitations (TooManyRequestsException
), des erreurs de runtime (Lambda.Unknown
) et une erreur définie par fonction nommée function.MaxDepthError
. Il attrape également une erreur nommée function.DoublesRolledError
et continue à un état nommé CaughtException
lorsqu'il se produit.
Exemple de modèle de repérage et de nouvelle tentative
... "Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke",
"Retry": [ { "ErrorEquals": [ "function.MaxDepthError", "Lambda.TooManyRequestsException", "Lambda.ServiceException", "Lambda.Unknown" ], "MaxAttempts": 5 } ], "Catch": [ { "ErrorEquals": [ "function.DoublesRolledError" ], "Next": "CaughtException" } ],
"Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1", ...
Pour repérer ou effectuer de nouvelles tentatives des erreurs de fonction, créez un type d'erreur personnalisé. Le nom du type d'erreur doit correspondre à errorType
dans la réponse d'erreur formatée que Lambda renvoie lorsque vous levez une erreur.
Pour plus d'informations sur la gestion des erreurs dans Step Functions State, consultez Gestion des conditions d'erreur à l'aide d'une machine d'état Step Functions dans le Manuel du développeur AWS Step Functions.
AWS CloudFormation et AWS SAM
Vous pouvez définir des machines d'état à l'aide d'un modèle AWS CloudFormation avec AWS Serverless Application Model (AWS SAM). Avec AWS SAM, vous pouvez définir la machine d'état en ligne dans le modèle ou dans un fichier séparé. L'exemple suivant montre une machine d'état qui appelle une fonction Lambda qui gère des erreurs. Il fait référence à une ressource de fonction définie dans le même modèle (non affiché).
Exemple de modèle de ramification dans template.yml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: An AWS Lambda application that uses AWS Step Functions. Resources: statemachine: Type: AWS::Serverless::StateMachine Properties: DefinitionSubstitutions: FunctionArn: !GetAtt function.Arn Payload: | { "max-depth": 5, "current-depth": 0, "error-rate": 0.2 } Definition: StartAt: Invoke States: Invoke: Type: Task Resource: arn:aws:states:::lambda:invoke Parameters: FunctionName: "${FunctionArn}" Payload: "${Payload}" InvocationType: Event Retry: - ErrorEquals: - function.MaxDepthError - function.MaxDepthError - Lambda.TooManyRequestsException - Lambda.ServiceException - Lambda.Unknown IntervalSeconds: 1 MaxAttempts: 5 Catch: - ErrorEquals: - function.DoublesRolledError Next: CaughtException - ErrorEquals: - States.ALL Next: UncaughtException Next: Success CaughtException: Type: Pass Result: The function returned an error. End: true UncaughtException: Type: Pass Result: Invocation failed. End: true Success: Type: Pass Result: Invocation succeeded! End: true Events: scheduled: Type: Schedule Properties: Description: Run every minute Schedule: rate(1 minute) Type: STANDARD Policies: - AWSLambdaRole ...
Cela crée une machine d'état avec la structure suivante :
Pour plus d’informations, consultez AWS::Serverless::StateMachine dans le Guide du développeur AWS Serverless Application Model.