Orchestrer ses traitements avec Amazon Web Services

Amazon Web Services (AWS) fournit (à l’heure de rédaction de cet article) deux services d’orchestration :

Mais lequel des deux choisir, et pourquoi ?

D’abord historiquement, ces deux services ne sont pas apparus en même temps.
SWF a été déployé par AWS en février 2012, tandis que Step Functions a été annoncé lors du re:Invent 2016.
Mais pour évaluer ces deux services, il faut les comparer sur les points suivants :

  • Le type d’offre qu’ils proposent
  • Les ressources/entités utilisées
  • Le niveau de complexité
  • Le prix
  • Les cas d’usage

Type d’offre

Step Functions est un service complètement géré (Serverless), tandis que SWF ne l’est pas.
SWF est un produit plus mature (mis en service depuis février 2012), et est déployé dans toutes les régions AWS du monde entier. Ce n’est pas le cas de Step Functions, qui est arrivé fin 2016, et qui n’est pas encore déployé dans toutes les régions (même s’il on s’en rapproche (voir tableau des régions)).

Ressources utilisées

SWF a besoin d’une instance EC2 pour déployer et démarrer un workflow, alors que les Step Functions sont déployées en utilisant AWS Lambda, ce qui ne nécessite pas d’instance EC2 séparée.
Avec Step Functions, on est sur une base de solution 100% serverless.

Niveau de complexité

Management

SWF n’étant pas un service managé, une grande partie de la gestion est déléguée à l’utilisateur.
Un utilisateur de SWF aura plus de flexibilité, mais l’implémentation de la solution sera plus compliquée.

Design

Du côté de Step Functions, l’outil de conception est pourvu d’une partie graphique offrant une vue d’ensemble particulièrement claire sur le fonctionnement global du workflow :

L’outil graphique d’AWS Step Functions

Prix

SWF nécessite une instance EC2 (pour faire fonctionner le Decider), donc le prix va essentiellement dépendre du coût de cette EC2.
Step Functions est facturé sur le nombre de transitions d’état, c’est-à-dire au nombre de transitions d’une étape à une autre entre vos points Start et End de votre workflow applicatif.
Donc, si vos workflows ont tendance à être très longs (plusieurs mois/années), SWF vous reviendra peut-être moins cher. Mais si votre workflow est basé sur des traitements à courte durée d’exécution, alors Step Functions sera préférable.

Les cas d’usage

SWF

  • Automatiser des traitements longs nécessitant des interventions humaines (validation, revues, investigations, etc.)
  • Inclure des traitements « on-premise » ou des services cloud tiers

Step Functions

  • Consolider des données provenant de multiples bases de données en rapports unifiés
  • Construire des outils d’intégration et de déploiement continus dans une approche DevOps
  • Automatiser des processus critiques d’une plateforme de e-commerce, tels que des reçus de transactions ou des suivis d’inventaire

Que dit AWS à ce sujet ?

Voici deux extraits des FAQ des deux services. Certaines parties sont en gras, car jugées comme étant des critères potentiellement décisifs au choix final.
Extrait de la FAQ de SWF :

AWS Step Functions est un service entièrement géré qui permet de coordonner facilement les composants d’applications et de microservices distribués à l’aide de processus visuels. Au lieu d’écrire un programme décideur, vous définissez des automates finis dans JSON. Il est conseillé aux clients d’AWS d’avoir recours à Step Functions pour de nouvelles applications. Si Step Functions ne répond pas à vos besoins, optez plutôt pour Amazon Simple Workflow (SWF). Avec Amazon SWF, vous maîtrisez entièrement votre logique d’orchestration, cependant le développement des applications est plus complexe. Vous pouvez écrire des programmes décideurs dans le langage de programmation de votre choix ou vous appuyer sur le framework Flow pour utiliser des structures de programmation qui organisent les interactions asynchrones pour vous. AWS continuera à proposer le service Amazon SWF, le framework Flow et le support technique pour tous les clients Amazon SWF.

Extrait de la FAQ de Step Functions :

Vous devriez envisager d’utiliser AWS Step Functions pour toutes vos nouvelles applications. Ce service offre en effet une approche plus productive et plus agile pour la coordination des composants d’application à l’aide de flux de travail visuels. Si vous avez besoin que des signaux externes interviennent dans vos processus ou si vous souhaitez lancer des processus enfants qui renvoient un résultat à un parent, vous devriez plutôt envisager d’utiliser Amazon Simple Workflow Service (SWF). Avec Amazon SWF, au lieu d’écrire des machines à états en JSON déclaratif, vous écrivez un programme décideur pour séparer les étapes d’activité des étapes de décision. Vous maîtrisez ainsi entièrement votre logique d’orchestration, mais le développement des applications est plus complexe. Vous pouvez écrire des programmes décideurs dans le langage de programmation de votre choix ou vous appuyer sur le framework Flow pour utiliser des structures de programmation qui organisent les interactions asynchrones pour vous.

Un critère important est le point de départ de ce que l’on souhaite faire : nouvelle application ou orchestration d’un patrimoine applicatif existant ?
Si l’on part de zéro, Step Functions est le choix évident.
En conclusion, sauf pour des usages ou contraintes spécifiques, à l’avenir, les clients du Cloud s’orienteront de plus en plus vers les services complètement managés (Serverless), afin de se dédouaner toujours plus des problématiques de « bas niveau ».
De ce fait, AWS Step Functions sera à terme la solution la plus plébiscitée et la plus adéquate.