Vous devriez plus utiliser les Step Functions ! (AWS)
Introduction
Il y a quelque temps, j’ai fait la découverte du service AWS Step Functions et après seulement quelques heures d’exploration, j’ai été totalement captivé par son potentiel. En effet, il s’agit d’un service qui se rapproche du concept “No Code”. Au départ, j’avais déjà entendu parler de Step Functions, mais j’avais l’impression que ce service se limitait à l’enchaînement de fonctions AWS Lambda (serverless). Cependant, après avoir passé du temps à l’utiliser, je me suis rendu compte que c’était bien plus que cela.
Aujourd’hui, je souhaite partager cette découverte avec vous et vous expliquer pourquoi vous devriez envisager d’utiliser plus fréquemment ce service. Je vais éviter de vous donner des détails spécifiques sur son utilisation, car mon intention est plutôt de vous faire part de mon retour d’expérience (REX) à son sujet.
Présentation du service
AWS Step Functions est un service de gestion de workflow proposé par Amazon Web Services (AWS) qui permet aux développeurs (mais pas que) de coordonner et d’automatiser facilement les applications à plusieurs étapes. Il facilite la création de workflows orchestrant différentes tâches et services sans nécessiter une gestion complexe de l’infrastructure sous-jacente.
Pour mieux comprendre ce que sont les workflows, imaginez une série d’étapes à suivre pour accomplir une tâche donnée. Chaque étape peut impliquer des traitements, des vérifications, des appels à des services externes, etc. Les workflows sont couramment utilisés pour coordonner des opérations distribuées, déclencher des traitements conditionnels et réagir à des événements.
Comme « Un bon croquis vaut mieux qu’un long discours », voici à quoi cela peut ressembler :
AWS Step Functions fournit une interface graphique pour concevoir et visualiser ses workflows. Vous pouvez créer des machines à états finis avec différentes étapes, décisions conditionnelles et branches parallèle. Cela permet d’orchestrer des services AWS (comme AWS Lambda, AWS Glue, AWS Batch, etc.) et des actions personnalisées dans un ordre précis, en fonction des conditions spécifiées.
Déclenchement
Une step function peut être lancée par :
- aws cli => déclenchement manuel
- event bridge => déclenchement depuis un évènement
- code build => déclenchement CICD
- api gateway => déclenchement call API
Maintenant que les présentations sont faites, voici quelques exemples.
Exemples de cas
Exemple de cas d’utilisation :
- Cas d’utilisation : Traitement d’images dans un pipeline de traitement médical
Supposons que vous travaillez pour une entreprise qui développe des solutions de traitement d’images médicales. Vous avez une application qui prend en charge le traitement des images de rayons X pour détecter les anomalies et les maladies. Le processus de traitement de chaque image comprend plusieurs étapes, telles que la préparation des données, l’analyse par un modèle d’apprentissage automatique, la génération de rapports, et le stockage des résultats.
Pour réaliser ce processus de manière efficace et évolutive, vous pouvez utiliser AWS Step Functions. Voici comment cela pourrait fonctionner :
a. Upload de l’image : L’utilisateur télécharge l’image de rayons X sur un service de stockage, comme Amazon S3.
b. Déclencheur du workflow : Une fois que l’image est téléchargée, un déclencheur (par exemple, un événement S3) notifie AWS Step Functions pour démarrer le workflow de traitement de l’image.
c. Préparation des données (État 1) : Dans cette étape, l’image est préparée pour le traitement. Cela peut inclure la validation de l’image, le redimensionnement ou tout autre prétraitement nécessaire avant de la soumettre au modèle d’apprentissage automatique.
d. Analyse de l’image (État 2) : Une fois l’image préparée, AWS Step Functions appelle une fonction Lambda qui exécute le modèle d’apprentissage automatique pour analyser l’image et détecter les éventuelles anomalies ou maladies.
e. Génération du rapport (État 3) : Après l’analyse de l’image, AWS Step Functions peut appeler une autre fonction Lambda pour générer un rapport contenant les résultats de l’analyse et des informations pertinentes sur l’image.
f. Stockage des résultats (État 4) : Enfin, les résultats de l’analyse et le rapport généré peuvent être stockés dans une base de données ou un autre service de stockage, comme Amazon DynamoDB ou Amazon RDS.
L’utilisation d’AWS Step Functions permet de gérer facilement la coordination et la gestion du flux de travail, tout en garantissant la scalabilité et la fiabilité du processus de traitement d’images médicales. En cas d’erreur ou d’échec dans l’une des étapes, Step Functions offre également la possibilité de gérer les retries ou les stratégies de gestion des erreurs, garantissant ainsi la robustesse de l’application.
- Cas d’utilisation : Un extracteur de données
Supposons que vous avez besoin d’extraire des données de plusieurs tables d’une base de données, de les transformer et de les envoyer à une équipe via Slack ou par e-mail. Vous utiliserez AWS Step Functions pour orchestrer ce processus, en exploitant AWS Athena pour exécuter des requêtes SQL, S3 pour stocker les résultats, Lambda pour transformer les données, et SNS ou SES pour envoyer des notifications.
a. Déclanchement du workflow Le flux de travail commence par un déclencheur. Ce déclencheur peut-être manuel, par exemple.
b. Exécution en parallèle de plusieurs requêtes SQL via Athena Une fois déclenché, le flux de travail exécute plusieurs requêtes SQL en parallèle à l’aide d’AWS Athena. Ceci est réalisé en utilisant l’état “Parrallèle” de Step Functions pour lancer plusieurs tâches simultanément.
c. Renommage des fichiers d’outputs Après l’exécution des requêtes, les fichiers de sortie stockés dans S3 doivent être renommés. Une fonction Lambda peut être utilisée pour cette tâche.
d. Génération d’un zip avec les fichiers précédemment renommés et envoi du résultat vers un service tiers comme Slack ou un e-mail Une fois les fichiers renommés, ils sont compressés en un seul fichier zip et envoyés via un service tiers comme Slack ou un e-mail. Une autre fonction Lambda peut être utilisée pour cette tâche.
Astuces
A la main
Pour élaborer votre POC ou votre v0, je vous conseille de le faire à ma main au lieu d’essayer de créer votre worfklow en json, car cela n’est vraiment pas pratique et pas toujours très clair, mais la configuration en mode json est toutefois très utile 😉
Terraform with json
Le json est indispensable, car il vous permettra de réformer notre travail et de respecter le IAC (Infrastructure As Code)
Si vous souhaitez en savoir plus, je vous conseille d’aller lire cette documentation.
Avantages
Dans cette section, vous retrouverez une liste des avantages à utiliser ce service :
-
Simplicité de conception : vous pouvez concevoir des workflows à l’aide de modèles visuels plutôt qu’en écrivant du code pour gérer les étapes du processus.
-
Gestion des erreurs : Step Functions gère les erreurs de manière transparente, permettant ainsi de gérer les défaillances éventuelles de manière robuste et de faciliter la reprise en cas de problème.
-
Fiabilité : Les workflows créés avec Step Functions sont durables, sans risque de perte d’état ou de dédoublement des actions.
-
Intégration native avec les services AWS : Step Functions s’intègre parfaitement avec une grande variété de services AWS, ce qui vous permet de combiner facilement différentes fonctionnalités et services pour construire des applications flexibles et puissantes.
-
Évolutivité : Le service gère automatiquement l’évolutivité, de sorte que vous n’avez pas à vous soucier des contraintes de capacité.
-
Suivi et surveillance : Step Functions fournit des métriques et des journaux détaillés pour chaque étape du workflow, ce qui facilite le suivi et la surveillance des performances et de l’exécution.
-
Aucune maintenance à réaliser, car aucune dépendance (sauf si vous utilisez des lambdas bien entendu).
Inconvénients
À Contratrio, voici quelques points négatifs de ce service.
-
Review compliqué : le json représentant votre step function peut être lourd à reviewer dans une Pull Request, il faudra presque systématiquement se connecter à la console AWS pour étudier la step function.
-
Coûts: Tarification basée sur l’utilisation : AWS Step Functions suit un modèle de tarification basé sur la consommation, ce qui signifie que vous paierez en fonction du nombre de transitions d’état, du temps d’exécution et des événements déclenchés par vos workflows. Si vos workflows sont très complexes et exécutent de nombreuses transitions ou traitent un grand nombre d’événements, cela peut entraîner des coûts substantiels.
Complexité des coûts : avec Step Functions, il peut être difficile de prédire précisément les coûts avant de l’utiliser, car ils dépendent de nombreux facteurs, tels que la fréquence d’utilisation, la taille des données traitées et la durée d’exécution des workflows. Cette complexité peut rendre la gestion budgétaire plus délicate, surtout si vos workflows connaissent des variations imprévues dans la charge de travail.
-
Dépendances AWS: avec un service tel que Step Functions, il est vrai que vous pourriez devenir encore plus dépendant d’AWS. Cependant, je considère que c’est un faux argument, car si vous envisagez d’utiliser Step Functions, c’est probablement parce que votre infrastructure est déjà étroitement intégrée à AWS. L’idée ici n’est pas de promouvoir une dépendance supplémentaire, mais plutôt de tirer parti des avantages d’AWS pour faciliter la gestion et l’orchestration de vos workflows. En effet, une fois que vous êtes dans l’écosystème AWS, il est logique d’explorer des services tels que Step Functions, qui peuvent améliorer l’efficacité opérationnelle, faciliter le développement et permettre une meilleure gestion des flux de travail complexes.
-
Les services non pleinement intégrés. Tant que l’on utilise les services principaux d’AWS tout se passe bien, mais dès que l’on commence à se servir de services plus nichés comme AWS Transfert, on se retrouve avec des actions mal intégrées. Avec le service cité ci-dessus, je me suis trouvé dans le cas où l’action me renvoyait un succès dans tous les cas, même quand cela ne fonctionne pas. Pour les call HTTP au sein de step function, je me suis retrouvé avec des headers HTTP non gérés.
-
Le non chiffrement des données entre les step. Comme vu précédemment, les step communiquent entre-elles grâce à des inputs & outputs en json. Aucune de ces données n’est chiffrée, ce qui convient dans la majorité des besoins, mais quand on essaie de mettre en place une rotation d’access keys IAM avec step functions on se retrouve dans le cas où les AK sont exposées en clair et comme l’historique des exécutions est visuable, elles sont très simples à retrouver !
-
L’impossibilité de faire du cross-region
Conclusion
Cet article touche à sa fin, bien que ce service soit un de mes préférés et que je trouve qu’il soit trop peu utilisé encore. Je sais reconnaître qu’il n’est pas parfait. Il a encore besoin de quelques améliorations, comme vous avez pu le voir.
J’espère vous avoir donné des idées et que vous irez tester ce service !