Step Functions pour runbooks SRE

À la fin de ce tutoriel, vous saurez concevoir des runbooks SRE avec AWS Step Functions : Standard vs Express, Choice / Parallel / Map / Wait, Retry/Catch, pattern EventBridge → Step Functions → Lambda/SSM → SNS, IAM least privilege, observabilité, et un lab CLI en ca-central-1. Angle orchestration remédiation DevOps Elastic Hayway (DEH).

Niveau : Intermédiaire · Temps estimé : 60–80 min · Versions cibles : AWS CLI v2 · Step Functions ASL · Lambda · SNS · EventBridge · Dernière vérification : 2026-09-11 · Region : ca-central-1

Slug : wow-step-functions-sre · Série : WOW (22/50) · Mot-clé SEO : step functions sre · Publish : HOLD

← Précédent : Lambda Powertools · → Suivant : EventBridge Patterns · Aussi : Lambda + API Gateway · SNS & SQS · CloudWatch alarmes · SSM Session Manager

Prérequis

Coût estimé : 0–quelques € (executions Standard rares + Lambda mock). Cleanup obligatoire.

export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
aws sts get-caller-identity

Ce que nous allons construire

Step Functions runbooks SRE (WOW 22/50) — ca-central-1
  ├── Pourquoi automatiser les runbooks (vs scripts / SSM seul)
  ├── Standard vs Express + états ASL clés
  ├── Pattern DEH : EventBridge → SFN → Lambda/SSM → SNS
  ├── IAM least privilege (role states + Lambda)
  ├── Lab : state machine remédiation (Retry/Catch + SNS)
  ├── Observabilité : Logs / X-Ray / Execution history
  └── Anti-patterns + checklist + quiz + FAQ

(Schéma — alt : « Alarme CloudWatch via EventBridge déclenche Step Functions : Choice, Lambda remédiation, Catch vers SNS, région ca-central-1 ».)

Étape 1 — Pourquoi des runbooks automatisés avec Step Functions

Un runbook SRE dit « si alarme X, vérifier Y, remédier Z, notifier ». Sous stress, le manuel augmente le MTTR. Script ou SSM seul : OK en linéaire ; pour branches, retries, compensation et audit, Step Functions orchestre.

Approche Forces Limites
Script / SSM Run Command Rapide Peu d’état ni d’audit riche
SSM Automation Bon pour EC2/OS Graphe Choice/Map/Parallel limité
Step Functions + Lambda/SSM État, Retry/Catch, historique, IAM fin Courbe ASL + design roles

DEH : SFN orchestre, Lambda/SSM exécutent, SNS signale. Remédiation idempotente et bornée.

Étape 2 — Standard vs Express ; états ASL utiles

2.1 — Standard vs Express

Critère Standard Express
Durée Jusqu’à 1 an Minutes
Sémantique Exactly-once (démarrage) At-least-once
Historique Exécution détaillée Via CloudWatch Logs
Prix Par transition Durée + requêtes
Runbooks SRE DEH Défaut (audit) Haute fréquence

Remédiation alarme → action → notify : Standard.

2.2 — États clés

  • Task : Lambda, SSM, intégrations AWS.
  • Choice : sévérité, type d’alarme, résultat check.
  • Parallel / Map : checks simultanés ou N cibles.
  • Wait : laisser remonter avant re-check.
  • Retry / Catch : backoff transitoire ; Catch → notify + fail contrôlé.
{
  "Retry": [{
    "ErrorEquals": ["States.TaskFailed", "Lambda.ServiceException"],
    "IntervalSeconds": 5,
    "MaxAttempts": 3,
    "BackoffRate": 2.0
  }],
  "Catch": [{
    "ErrorEquals": ["States.ALL"],
    "ResultPath": "$.error",
    "Next": "NotifyFailure"
  }]
}

Étape 3 — Pattern DEH : EventBridge → SFN → Lambda/SSM → SNS

[ CloudWatch Alarm ALARM ]
         │
         ▼
[ EventBridge rule ]
         │
         ▼
[ Step Functions Standard — deh-wow22-remediate ]
  ├── Choice (sévérité / service)
  ├── Task Lambda mock (ou SSM Automation)
  ├── Wait + re-check (optionnel)
  ├── Catch → SNS alerte on-call
  └── Succeed / Fail explicite

Alarme → EventBridge (states:StartExecution) → SFN (Choice + Task) → SNS succès ou Catch escalade. Lab = Lambda mock ; prod = SSM Automation ciblé. Voir CloudWatch alarmes, SNS & SQS, SSM.

Étape 4 — IAM least privilege

Rôle Trust Permissions minimales
deh-wow22-sfn-role states.amazonaws.com lambda:InvokeFunction + sns:Publish scopés
deh-wow22-lambda-role lambda.amazonaws.com BasicExecution ; en prod SSM/EC2 ciblés

Pas de * SNS/SSM. EventBridge : states:StartExecution sur l’ARN machine. Tags Owner/Service/Env.

Étape 5 — Lab ca-central-1 : remédiation CLI

5.1 — SNS + Lambda mock

export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1

TOPIC_ARN=$(aws sns create-topic --name deh-wow22-sre-alerts 
  --query TopicArn --output text)

ROLE_LAMBDA_ARN=$(aws iam create-role --role-name deh-wow22-lambda-role 
  --assume-role-policy-document '{
    "Version":"2012-10-17",
    "Statement":[{"Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"},
      "Action":"sts:AssumeRole"}]
  }' --query Role.Arn --output text)

aws iam attach-role-policy --role-name deh-wow22-lambda-role 
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

mkdir -p /tmp/deh-wow22 && cat > /tmp/deh-wow22/lambda_function.py << 'PY'
def handler(event, context):
    return {"ok": True, "action": "restart_mock",
            "service": event.get("service", "unknown")}
PY
(cd /tmp/deh-wow22 && zip -q function.zip lambda_function.py)
sleep 8
LAMBDA_ARN=$(aws lambda create-function 
  --function-name deh-wow22-remediate --runtime python3.12 
  --role "$ROLE_LAMBDA_ARN" --handler lambda_function.handler 
  --zip-file fileb:///tmp/deh-wow22/function.zip --timeout 30 
  --query FunctionArn --output text)

5.2 — Rôle SFN + ASL

ROLE_SFN_ARN=$(aws iam create-role --role-name deh-wow22-sfn-role 
  --assume-role-policy-document '{
    "Version":"2012-10-17",
    "Statement":[{"Effect":"Allow","Principal":{"Service":"states.amazonaws.com"},
      "Action":"sts:AssumeRole"}]
  }' --query Role.Arn --output text)

cat > /tmp/deh-wow22/sfn-policy.json << EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {"Effect":"Allow","Action":["lambda:InvokeFunction"],"Resource":"${LAMBDA_ARN}"},
    {"Effect":"Allow","Action":["sns:Publish"],"Resource":"${TOPIC_ARN}"}
  ]
}
EOF
aws iam put-role-policy --role-name deh-wow22-sfn-role 
  --policy-name deh-wow22-sfn-inline 
  --policy-document file:///tmp/deh-wow22/sfn-policy.json

cat > /tmp/deh-wow22/remediate.asl.json << EOF
{
  "Comment": "DEH WOW22 remédiation mock ca-central-1",
  "StartAt": "Remediate",
  "States": {
    "Remediate": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "${LAMBDA_ARN}",
        "Payload": {"service.$": "$.service", "alarm.$": "$.alarm"}
      },
      "ResultPath": "$.remediation",
      "Retry": [{
        "ErrorEquals": ["Lambda.ServiceException","Lambda.AWSLambdaException",
          "Lambda.SdkClientException"],
        "IntervalSeconds": 3, "MaxAttempts": 3, "BackoffRate": 2.0
      }],
      "Catch": [{"ErrorEquals": ["States.ALL"], "ResultPath": "$.error",
        "Next": "NotifyFailure"}],
      "Next": "NotifySuccess"
    },
    "NotifySuccess": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "${TOPIC_ARN}",
        "Subject": "deh-wow22 remédiation OK",
        "Message.$": "States.Format('Remédié service {}', $.service)"
      },
      "End": true
    },
    "NotifyFailure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "${TOPIC_ARN}",
        "Subject": "deh-wow22 remédiation ÉCHEC",
        "Message.$": "States.JsonToString($.error)"
      },
      "Next": "FailRunbook"
    },
    "FailRunbook": {
      "Type": "Fail", "Error": "RemediationFailed",
      "Cause": "Catch — intervention humaine"
    }
  }
}
EOF

sleep 8
SM_ARN=$(aws stepfunctions create-state-machine 
  --name deh-wow22-remediate 
  --definition file:///tmp/deh-wow22/remediate.asl.json 
  --role-arn "$ROLE_SFN_ARN" --type STANDARD 
  --query stateMachineArn --output text)

5.3 — Exécution + historique

EXEC_ARN=$(aws stepfunctions start-execution 
  --state-machine-arn "$SM_ARN" 
  --name "deh-wow22-lab-$(date +%s)" 
  --input '{"service":"nginx","alarm":"HighCPU"}' 
  --query executionArn --output text)
aws stepfunctions describe-execution --execution-arn "$EXEC_ARN"
aws stepfunctions get-execution-history --execution-arn "$EXEC_ARN" 
  --max-results 20 --query 'events[].{id:id,type:type}' --output table

5.4 — Cleanup lab obligatoire

aws stepfunctions delete-state-machine --state-machine-arn "$SM_ARN"
aws lambda delete-function --function-name deh-wow22-remediate
aws sns delete-topic --topic-arn "$TOPIC_ARN"
aws iam delete-role-policy --role-name deh-wow22-sfn-role 
  --policy-name deh-wow22-sfn-inline
aws iam detach-role-policy --role-name deh-wow22-lambda-role 
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
aws iam delete-role --role-name deh-wow22-sfn-role
aws iam delete-role --role-name deh-wow22-lambda-role

Étape 6 — Observabilité

Signal Usage SRE
Execution history get-execution-history Audit Standard pas-à-pas
CloudWatch Logs Logging config SFN Express + diagnostics
X-Ray SFN + Lambda Latence Task / erreurs
Métriques ExecutionsFailed, TimedOut Alarmer le runbook lui-même

Logging ERROR/ALL + alarme ExecutionsFailed pour éviter un runbook silencieux.

Étape 7 — Anti-patterns + checklist prod DEH

Anti-patterns : logique métier dans ASL ; pas de Catch ; IAM * ; Express pour runbook rare audité ; remédiation non idempotente ; oublier cleanup ; us-east-1 par défaut.

Checklist : Standard audité ; Retry + Catch → SNS ; roles SFN/Lambda séparés ; EventBridge scoped ; Choice input ; timeouts ; alarme ExecutionsFailed ; tags deh-wow22 ; cleanup ; escalade humaine.

Erreurs fréquentes

Erreur Impact Correction
Role SFN sans InvokeFunction TaskFailed immédiat Policy scopée ARN Lambda
Oublier Catch Failed sans alerte Catch States.ALL → SNS
Express pour audit incident Pas d’historique console Standard + Logs
Remédiation non idempotente Double action Guard Lambda / Choice
SNS * Surface d’attaque Resource = ARN topic
Region us-east-1 Incohérence DEH Forcer ca-central-1
Oublier delete SM Coût / clutter Cleanup §5.4
Confondre SFN et EventBridge Mauvaise couche EB route ; SFN orchestre

Quiz (5 questions)

1. Pour un runbook SRE rare avec audit détaillé, DEH recommande :
– A. Express uniquement
– B. Standard Workflows
– C. Un cron EC2 sans état

2. Le pattern DEH de remédiation est :
– A. Lambda seule sans historique
– B. EventBridge → Step Functions → Lambda/SSM → SNS
– C. SSH manuel depuis un bastion

3. Retry/Catch servent surtout à :
– A. Remplacer CloudWatch
– B. Gérer erreurs transitoires et escalader proprement
– C. Facturer moins cher Express

4. Region lab de ce tuto :
– A. us-east-1
– B. ca-central-1
– C. eu-west-3

5. Le rôle de la state machine doit notamment pouvoir :
– A. iam:CreateUser
– B. lambda:InvokeFunction et sns:Publish scopés
– C. ec2:* global

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

FAQ

Pourquoi Step Functions plutôt qu’un script SSM seul ?

SSM Automation suffit pour des actions EC2 linéaires. SFN ajoute graphe, Retry/Catch, historique Standard et multi-services.

Standard ou Express pour un runbook alarme ?

Standard : audit, Wait + re-check, démarrages rares. Express si volume massif.

Comment brancher CloudWatch Alarm ?

Règle EventBridge sur CloudWatch Alarm State Change. Cible : ARN deh-wow22-remediate avec states:StartExecution.

Lambda mock ou SSM Automation en prod ?

Lab = Lambda mock. Prod = SSM Automation ou API via Lambda. Toujours Catch → SNS.

Faut-il X-Ray partout ?

Pour un runbook simple, history + Logs suffisent ; X-Ray si MTTR bloqué sur latence Task.

Comment éviter les boucles de remédiation ?

Idempotence, cooldown (Wait), Choice « déjà remédié », alarme ExecutionsFailed.

Quel préfixe de tags lab ?

deh-wow22- (topic, Lambda, state machine, roles) pour cleanup et FinOps.

Publish de ce tuto ?

HOLD — draft only, feu vert Maître requis avant mise en ligne.

Pour aller plus loin

Maillage série WOW

← Précédent Lambda Powertools
→ Suivant EventBridge Patterns
Aussi Lambda + API Gateway · SNS & SQS · CloudWatch alarmes · SSM Session Manager

Meta publication (SEO)

  • Title SEO : Step Functions pour runbooks SRE : remédiation auto (guide FR)
  • Meta description : Step Functions pour runbooks SRE : Standard vs Express, Retry/Catch, pattern EventBridge→SFN→Lambda/SSM→SNS, lab ca-central-1, FAQ, quiz et check-list DEH.
  • Focus keyword : step functions sre
  • Secondary : AWS Step Functions runbook, remédiation SRE, EventBridge Step Functions, ASL Retry Catch
  • Image : assets/web/devopelastichayway/cover-wow-step-functions-sre-1200x630.webp (à générer)
  • Catégorie : WOW / SRE · Niveau : Intermédiaire
  • URL cible : https://devopelastichayway.com/tutoriels/wow-step-functions-sre/
  • Post live : N/A (nouveau) · slug wow-step-functions-sre · Publish : HOLD (draft only — feu vert Maître requis)

← Catalogue Tutoriels

Pour aller plus loin — hubs live

Retour parcours Catalogue Tutoriels — hub de la série et leçons sœurs.