Planifier un flux de travail sans serveur
avec AWS Step Functions et Amazon CloudWatch
L’automatisation de votre réponse aux événements opérationnels des ressources de votre compte AWS peut vous aider à réduire les frais opérationnels liés à votre infrastructure du Cloud AWS. Pour vous donner un exemple concret, imaginez que vous êtes un ingénieur DevOps ou un responsable informatique, et que vous souhaitez automatiser la les tâches ETL, la synchronisation des données ou la sécurité.
Pour résoudre ce problème, vous pouvez exécuter un flux de travail sans serveur selon une planification temporelle. Amazon CloudWatch Events offre un flux d'événements de système quasiment en temps réel qui décrit les modifications et les notifications apportées à vos ressources AWS. À partir de ce flux, vous pouvez créer des règles afin d’acheminer des événements spécifiques vers AWS Step Functions et invoquer une machine d’état pour réaliser ultérieurement des opérations de traitement. AWS Step Functions vous permet de coordonner plusieurs services dans des flux de travail sans serveur afin de créer et mettre à jour rapidement des processus automatisés.
Dans ce didacticiel, vous utiliserez Step Functions pour orchestrer un flux de travail sans serveur en réponse à une événement CloudWatch. Tout d’abord, vous créerez une machine d’état très simple à l’aide d’AWS Step Functions. Ensuite, vous utiliserez Amazon CloudWatch Events pour configurer une règle qui exécute votre machine d’état toutes les minutes. Bien que ce didacticiel invoque un flux de travail respectant une planification temporelle, il peut être généralisé et intégré à d’autres services AWS qui génèrent des événements.
Dans ce didacticiel, vous utiliserez AWS Step Functions et Amazon CloudWatch. Ces deux services sont inclus dans l'offre gratuite AWS.
Ce didacticiel nécessite d'avoir un compte AWS.
Il n'y a aucun frais supplémentaire pour Step Functions ou CloudWatch. Les ressources que vous créez dans ce didacticiel sont éligibles à l'offre gratuite.
Étape 1. Créer un rôle AWS Identity and Access Management (IAM)
AWS Step Functions peut exécuter du code et accéder à d'autres ressources AWS (par exemple, des données stockées dans des compartiments Amazon S3). Pour maintenir la sécurité, vous devez accorder à Step Functions l'accès à ces ressources à l'aide d'AWS Identity and Access Management (IAM).
a. Ouvrez AWS Management Console dans une nouvelle fenêtre de navigateur afin de garder le guide ouvert. Lorsque cet écran se charge, saisissez votre nom d'utilisateur et votre mot de passe pour commencer. Saisissez ensuite IAM dans la barre de recherche, et sélectionnez IAM pour ouvrir la console de service.
Étape 2. Créer une machine d'état AWS Step Functions
Dans cette étape, vous créerez une machine d’état simple et s’exécutant indépendamment en utilisant un état Passe. Un état Passe transmet en toute simplicité ses entrées à ses sorties, sans effectuer aucun travail.
Dans un scénario réel, votre flux de travail sans serveur peut faire tout ce dont vous avez besoin. Vous pourriez coordonner plusieurs fonctions Lambda dans le but d’effectuer des tâches, de prendre des décisions, etc. Cependant, nous préférons conserver un flux de travail simple pour ne pas compliquer ce didacticiel.
a. Ouvrez la console AWS Step Functions. Step Functions donne accès à diverses machines d’état prédéfinies comme modèles. Pour ce didacticiel, vous créerez une machine d’état à l’aide du modèle Hello World. Sur la page Créer une machine d’état, sélectionnez Modèles puis Hello World.
c. Step Functions renseigne automatiquement le nom de votre machine d’état. De plus, Step Functions remplit le volet Définition de la machine d’état avec la description Amazon States Language de la machine d’état. Pour en savoir plus sur la manière de définir les machines d’état, consultez la page Structure des machines d’état.
Apportons quelques modifications simples à votre machine d’état :
Sur les lignes 2 et 5, remplacez « HelloWorld » par « Do Something »
Sur la ligne 7, remplacez « Hello World ! » par « Work complete ! »
Ensuite, cliquez sur le bouton d’actualisation situé à côté de votre flux de travail visuel pour mettre à jour le diagramme de la machine d’état et intégrer vos modifications.
Étape 3. Créer une règle Amazon CloudWatch Events
Maintenant que vous avez créé votre machine d’état, vous pouvez créer une règle Amazon CloudWatch Events qui exécute votre machine d’état selon une planification. Amazon CloudWatch Events délivre en temps quasi réel des flux d'événements système qui décrivent les modifications des ressources Amazon Web Services (AWS). À l’aide de simples règles configurables rapidement, vous pouvez faire correspondre les événements et les acheminer vers un(e) ou plusieurs flux/fonctions cibles.
d. Dans la section Cibles, choisissez Ajouter une cible. Choisissez Machine d’état Step Functions dans la liste, puis sélectionnez votre machine d’état ScheduledWorkflow.
Choisissez Configurer l’entrée, puis sélectionnez Événement correspondant. Cela permettra de transmettre les détails de CloudWatch Event en tant qu’entrée vers Step Functions à chaque fois qu’il exécute une instance de votre machine d’état.
Sélectionnez Créer un nouveau rôle pour cette ressource spécifique, puis cliquez sur Configurer les détails.
e. La page Étape 2 : Configurer les détails de la règle s’affiche. Entrez execute_state_machine en tant que Nom de votre règle, ne décochez pas la case Activé pour l’état, puis sélectionnez Créer une règle.
La règle est créée, et la pageRègles s’affiche et détaille l’ensemble de vos règles CloudWatch Events.
Une nouvelle exécution de votre machine d’état aura lieu toutes les minutes.
Étape 4. Personnaliser la façon dont la machine d’état gère les entrées et les sorties
Ensuite, vous personnaliserez la façon dont la machine d’état gère les entrées et les sorties. Comprendre comment les informations sont transférées d’un état à l’autre et apprendre à filtrer et à manipuler ces données vous aidera à concevoir et à implémenter efficacement des flux de travail dans AWS Step Functions.
b. Dans la fenêtre Définition de la machine d’état, reportez-vous à la ligne 7 de votre machine d’état. Le champ Résultat de l’état Passe indique la sortie qui doit être transmise à l’état suivant. Étant donné que votre machine d’état dispose uniquement d’un état, le message « Work complete ! » sera transmis à l’état final de votre flux de travail.
Vous pouvez vous rappeler que l’état Passe de Step Functions permet de transmettre son entrée à sa sortie. Vous pouvez utiliser le champ ResultPath pour modifier la sortie d’un état. Par exemple, vous pouvez remplacer l’entrée de l’état par le résultat produit (par exemple, la sortie de l’état d’une tâche de la fonction Lambda).
Pour associer l’entrée de l’état à son résultat, insérez une nouvelle ligne après la ligne 7 et saisissez :
"ResultPath": "$.taskresult",
Cela permettra d’associer les détails de l’événement CloudWatch qui a invoqué l’exécution de la machine d’état à la sortir de l’état Passe dans ce cas, « Work complete ! ». Pour en savoir plus, consultez la page Traitement des entrées et sorties dans Step Functions.
Étape 5. Confirmer que le flux de travail fonctionne normalement
Maintenant que vous avez activé la règle CloudWatch Events, CloudWatch déclenche toutes les minutes une exécution de votre machine d’état. Dans cette étape, vous observerez ces exécutions et vérifierez que les détails de CloudWatch Event sont capturés par Step Functions.
b. Sous Exécutions, vous pouvez observer les exécutions que déclenche CloudWatch Events. Cliquez sur le bouton d’actualisation pour mettre à jour la fenêtre et voir apparaître les nouvelles exécutions de votre machine d’état. Attendez quelques minutes pour qu’au moins deux instances de votre flux de travail soient déclenchées.
c. Faites un clic droit sur une des exécutions et ouvrez le lien dans un nouvel onglet de votre navigateur. Répétez l’opération pour une autre exécution de votre machine d’état.
Sur chaque onglet, cliquez sur l’état « Do Something » qui figure sur le volet de votre flux de travail visuel pour remplir le volet Détails de l’étape situé à droite.
En cliquant sur Entrées, vous pouvez voir les détails de l’événement correspondant dans CloudWatch. Remarquez les différences entre chaque événement, par exemple les champs « ID » et « durée ».
Étape 6. Résilier les ressources
Dans cette étape, vous allez résilier vos ressources associées à AWS Step Functions et à Amazon CloudWatch.
Important : il est conseillé de résilier les ressources qui ne sont pas utilisées de façon active, afin de réduire les coûts. Des ressources non résiliées peuvent entraîner des frais.
b. Dans la fenêtre Machines d’état, cliquez sur la machine d'état que vous avez créée lors de ce didacticiel, puis sélectionnez Supprimer. Confirmez l'action en sélectionnant Supprimer la machine d'état dans la boîte de dialogue. Votre machine d'état sera supprimée en l’espace d’une minute ou deux, une fois que Step Functions aura confirmé que toute exécution en cours était terminée.
Félicitations !
Vous venez de planifier avec succès un flux de travail sans serveur qui s’exécute toutes les minutes.
AWS Step Functions vous permet d’inspecter et de surveiller l’exécution des tâches récurrentes afin de confirmer qu’elles sont bien systématiquement exécutées. En associant AWS Step Functions à Amazon CloudWatch Events, vous pouvez automatiser les tâches quotidiennes, hebdomadaires et mensuelles, ou encore déclencher l’exécution de votre flux de travail Step Functions lorsque des conditions spécifiques sont remplies.