Comment appeler une fonction Lambda lorsqu'un état (événement d'exécution) change dans Step Functions ?

Dernière mise à jour : 30/08/2019

Je souhaite appeler une fonction AWS Lambda chaque fois qu'un état (événement d'exécution) change dans AWS Step Functions. Comment procéder ?

Brève description

Utilisez une règle Amazon CloudWatch Events pour déclencher une fonction Lambda lors d'un changement d'événement d'appel d'API à partir d'une machine d'état Step Functions.

Solution

Au cours de cette procédure, assurez-vous que :

  • Le changement d'événement utilisé en tant que déclencheur de la fonction est une action d'API prise en charge.
  • La machine d'état Step Functions, la fonction Lambda et la règle CloudWatch Events sont créées au sein de la même région AWS.

Créer des rôles IAM pour Step Functions et Lambda

1.    Créez un rôle AWS Identity and Access Management (IAM) pour Step Functions. Accordez à ce rôle IAM les autorisations nécessaires à votre cas d'utilisation. Pour que votre machine d'état appelle votre fonction Lambda, autorisez l'action lambda:InvokeFunction.

Remarque : la stratégie gérée AWSLambdaRole autorise l'appel de fonctions Lambda.

2.    Créez un rôle d'exécution Lambda. La stratégie gérée AWSLambdaBasicExecutionRole accorde à votre fonction les autorisations de base pour charger des journaux dans CloudWatch.

Créer une machine d'état Step Functions

Créez une machine d'état dans la console Step Functions. Dans IAM role for executions (Rôle IAM pour les exécutions), choisissez le rôle que vous avez créé pour Step Functions.

Créer et mettre à jour une fonction Lambda

1.    Créez une fonction dans la console Lambda. Dans Execution role (Rôle d’exécution), choisissez le rôle créé précédemment pour Lambda.

2.    Dans la console Lambda, modifiez la fonction à l'aide de l'éditeur de code pour que celle-ci n'affiche que l'événement qu'elle reçoit. Par exemple, si votre fonction Lambda utilise Python, vous pouvez utiliser ce code :

import json
def lambda_handler(event, context):
    print("Received event: " + json.dumps(event))

Créer une règle CloudWatch Events

La règle créée surveille le modèle d'événement Step Functions et appelle la fonction Lambda.

1.    Ouvrez la console CloudWatch.

2.    Dans le volet de navigation de gauche, sous Événements, sélectionnez Règles.

3.    Sélectionnez Create rule (Créer une règle).

4.    Dans Event Source (Source de l'événement), choisissez Event Pattern (Modèle de l'événement).

5.    Dans Service Name (Nom du service), choisissez Step Functions.

6.    Dans Event Type (Type d'événement), choisissez Step Functions Execution Status Change (Changement d'état d'exécution dans Step Functions).

Remarque : vous pouvez aussi choisir All Events (Tous les événements) en tant que déclencheur de la règle dans Step Functions. En outre, AWS API Call via CloudTrail (Appel d'API AWS via CloudTrail) permet de déclencher la règle pour certains événements d'appel d'API de Step Functions, tels que StartExecution. Pour plus d'informations, consultez la section Création d'une règle CloudWatch Events qui se déclenche sur un appel d'API AWS via AWS CloudTrail.

7.    Choisissez les statuts, les noms Amazon Resource Name (ARN) de machine d'état, ainsi que les ARN d'exécution souhaités pour déclencher l'événement. Vous pouvez choisir Any (Tout) pour chaque type de déclencheur, ou bien identifier des statuts ou des ARN Specific (Spécifiques) pour chacun d'entre eux.

8.    Sous Targets (Cibles), sélectionnez Add target (Ajouter une cible). Vérifiez que Lambda function (Fonction Lambda) correspond au type cible.

9.    Dans Function (Fonction), choisissez la fonction Lambda que vous avez créée.

10.    Choisissez Configure details (Configurer les détails).

11.    Nommez la règle dans Name (Nom).

12.    Dans State (État), vérifiez que Enabled (Activé) est sélectionné.

13.    Sélectionnez Create rule (Créer une règle).

Pour plus d'informations, consultez la section Création d'une règle CloudWatch Events qui se déclenche sur un événement.

Testez votre configuration

1.    Dans la console Step Functions, démarrez une nouvelle exécution de votre machine d'état.

2.    Dans le volet de navigation gauche de la console CloudWatch, choisissez Logs (Journaux).

3.    Choisissez le flux de journaux généré par votre fonction Lambda.

4.    Vérifiez les détails de l'événement dans le flux de journaux.

Remarque : après le début de l'exécution, quelques minutes peuvent s'écouler avant l'apparition du flux de journaux.