Exemples d'orchestration 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.

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.

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 AWSLambdaRoleou une politique en ligne limitée à une fonction à son rôle. Pour plus d'informations, consultez Fonctionnement d'AWS Step Functions avec IAM dans le Manuel du développeur AWS Step Functions.

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 :


        Machine d'état avec une logique de branchement.

Pour plus d’informations, consultez AWS::Serverless::StateMachine dans le Guide du développeur AWS Serverless Application Model.