Skip to content
Learni
Voir tous les tutoriels
Cloud & DevOps

Comment orchestrer des workflows AWS Step Functions en 2026

Read in English

Introduction

AWS Step Functions permet d'orchestrer des workflows distribués complexes sans serveur. En 2026, les architectures event-driven exigent une gestion fine des états, des retries et du parallélisme. Ce tutoriel expert vous guide de la définition ASL jusqu'au déploiement avec CDK, en intégrant des patterns avancés comme les callbacks et la compensation. Chaque étape inclut du code fonctionnel prêt pour la production.

Prérequis

  • Compte AWS avec permissions IAM avancées
  • Node.js 20+ et AWS CDK v2
  • Connaissances solides de TypeScript et Python
  • AWS CLI configuré (v2)

Créer les fonctions Lambda

lambdas/validate_order.py
import json
def lambda_handler(event, context):
    order = event.get('order', {})
    if not order.get('id'):
        raise Exception('InvalidOrder')
    return {'status': 'validated', 'order': order}

Cette Lambda valide une commande et lance une exception nommée pour déclencher les états de retry et de catch dans Step Functions.

Définir la machine à états ASL

statemachine/workflow.asl.json
{
  "Comment": "Workflow e-commerce expert 2026",
  "StartAt": "ValidateOrder",
  "States": {
    "ValidateOrder": {
      "Type": "Task",
      "Resource": "${ValidateOrderLambdaArn}",
      "Catch": [{
        "ErrorEquals": ["InvalidOrder"],
        "Next": "NotifyFailure"
      }],
      "Next": "ProcessPayment"
    },
    "ProcessPayment": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "${PaymentLambdaArn}"
      },
      "End": true
    },
    "NotifyFailure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "${FailureTopicArn}",
        "Message": "Order failed"
      },
      "End": true
    }
  }
}

Définition ASL complète avec gestion d'erreurs nommées, intégration directe SNS et variables CDK pour l'injection des ARNs.

Stack CDK TypeScript

lib/stepfunctions-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';

export class StepFunctionsStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const validateFn = new lambda.Function(this, 'ValidateOrder', {
      runtime: lambda.Runtime.PYTHON_3_12,
      handler: 'validate_order.lambda_handler',
      code: lambda.Code.fromAsset('lambdas'),
    });
    const definition = sfn.DefinitionBody.fromFile('statemachine/workflow.asl.json');
    new sfn.StateMachine(this, 'OrderWorkflow', {
      definitionBody: definition,
      definitionSubstitutions: { ValidateOrderLambdaArn: validateFn.functionArn },
      stateMachineType: sfn.StateMachineType.STANDARD,
    });
  }
}

Stack CDK qui déploie la Lambda et la State Machine en remplaçant dynamiquement les ARNs dans le fichier ASL.

Déploiement via CDK

terminal
cdk bootstrap
cdk deploy StepFunctionsStack --require-approval never

Commandes de déploiement qui initialisent l'environnement et déploient la stack sans confirmation interactive.

Pattern Callback Token avancé

statemachine/callback.asl.json
{
  "StartAt": "WaitForApproval",
  "States": {
    "WaitForApproval": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
      "Parameters": {
        "FunctionName": "${ApprovalLambdaArn}",
        "Payload": {
          "taskToken.$": "$$.Task.Token"
        }
      },
      "TimeoutSeconds": 3600,
      "End": true
    }
  }
}

Implémentation du pattern callback avec token pour les approbations humaines, incluant un timeout explicite.

Bonnes pratiques

  • Utilisez toujours des noms d'erreurs personnalisés pour un debugging précis
  • Préférez les StateMachineType EXPRESS pour les workloads à fort débit
  • Activez le logging complet en mode DEBUG pendant le développement
  • Externalisez les configurations via Parameter Store
  • Testez systématiquement les états avec Step Functions Local

Erreurs courantes à éviter

  • Oublier les permissions IAM entre Step Functions et les services intégrés
  • Utiliser des timeouts trop courts sur les tâches de longue durée
  • Ne pas versionner les définitions ASL en production
  • Ignorer les limites de 25 000 événements par exécution

Pour aller plus loin

Approfondissez ces concepts avec nos formations avancées sur l'architecture serverless : https://learni-group.com/formations