Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Ajoutez une logique conditionnelle à votre flux de travail Step Functions
Dans la rubrique précédenteIntégrer un service, vous avez intégré une fonction Lambda. Dans cette rubrique, vous allez configurer les conditions if-else dans le. Choice state
Un état de choix détermine le chemin d'exécution du flux de travail en fonction de conditions spécifiques.
Vous allez ajouter une logique qui choisit un chemin en fonction du montant du crédit appliqué renvoyé par la fonction RandomNumberforCredit
Lambda. Si la valeur est inférieure à un seuil, la demande de crédit sera automatiquement approuvée et passera à l'étape suivante. Si la valeur dépasse le seuil limite, le flux de travail nécessitera une approbation humaine pour continuer le flux de travail.
Vous allez imiter une étape d'interaction humaine en interrompant l'exécution du flux de travail jusqu'à ce qu'un jeton de tâche soit renvoyé. Pour ce faire, vous allez transmettre un jeton de tâche au AWS SDKintégration avec Amazon Simple Notification Service. L'exécution du flux de travail sera suspendue jusqu'à ce qu'il reçoive le jeton de tâche en retour par un SendTaskSuccess
APIappel. Pour plus d'informations sur l'intégration à d'autres services à l'aide de jetons de tâches, consultez Attendre un rappel avec un jeton de tâche les modèles d'intégration intégrés aux services.
Lorsque vous avez créé le prototype de machine à états, vous avez défini les étapes d'approbation humaine et d'approbation automatique. À présent, vous devez créer un SNS sujet Amazon qui recevra le jeton de rappel. Ensuite, vous créez une fonction Lambda pour implémenter la fonctionnalité de rappel. Enfin, vous mettez à jour votre prototype de flux de travail en ajoutant les détails de ceux-ci Service AWS intégrations.
Étape 1 : créer un SNS sujet Amazon qui reçoit le jeton de rappel
Pour implémenter l'étape d'interaction humaine, vous allez publier sur une rubrique Amazon Simple Notification Service et transmettre le jeton de tâche de rappel à cette rubrique. La tâche de rappel interrompt l'exécution du flux de travail jusqu'à ce que le jeton de tâche soit renvoyé avec une charge utile.
-
Ouvrez la SNSconsole Amazon
et créez un type de sujet standard. Pour plus d'informations sur la création d'un sujet, consultez la section Créer un SNS sujet Amazon dans le manuel Amazon Simple Notification Service Developer Guide. -
Spécifiez le nom du sujet sous la forme
TaskTokenTopic
. -
Assurez-vous de copier le sujet ARN et de l'enregistrer dans un fichier texte. Vous aurez besoin de cette rubrique ARN pour spécifier l'intégration des services pour l'état Attendre l'approbation humaine. Voici un exemple de sujet ARN :
arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
-
Créez un abonnement par e-mail pour le sujet, puis confirmez votre abonnement. Pour plus d'informations sur l'abonnement à un sujet, consultez la section Créer un abonnement au sujet dans le manuel Amazon Simple Notification Service Developer Guide.
Étape 2 : créer une fonction Lambda pour gérer le rappel
Pour gérer la fonctionnalité de rappel, vous allez définir une fonction Lambda et ajouter le sujet SNS Amazon que vous avez créé à l'étape 1 comme déclencheur pour cette fonction. Lorsque vous publiez sur le SNS sujet Amazon avec un jeton de tâche, la fonction Lambda est invoquée avec la charge utile du message publié.
Étape 2.1 : Création de la fonction Lambda pour gérer le rappel
Dans cette fonction, vous allez traiter la demande d'approbation de limite de crédit et renvoyer le résultat de la demande comme étant réussi avec l'SendTaskSuccess
APIappel. Cette fonction Lambda renverra également le jeton de tâche qu'elle a reçu de la rubrique AmazonSNS.
Pour des raisons de simplicité, la fonction Lambda utilisée pour l'étape d'interaction humaine approuve automatiquement toute tâche et renvoie le jeton de tâche avec un SendTaskSuccess
API appel. Vous pouvez nommer la fonction Lambda comme suit. callback-human-approval
-
Dans un nouvel onglet ou une nouvelle fenêtre, ouvrez la console Lambda
et créez une fonction Lambda Node.js intitulée. callback-human-approval
Pour plus d'informations sur la création d'une fonction Lambda à l'aide de la console, voir Créer une fonction Lambda dans la console dans le AWS Lambda Guide du développeur. -
Sur la callback-human-approvalpage, remplacez le code existant dans la zone Source du code par le code suivant.
// Lambda function that will automatically approve any task // in a message published to an Amazon SNS topic console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; export const handler = async (event) => { const stepfunctions = new AWS.StepFunctions(); let message = JSON.parse(event.Records[0].Sns.Message); let taskToken = message.TaskToken; console.log('Message received from SNS:', message); console.log('Task token: ', taskToken); // Return task token to Step Functions let params = { output: JSON.stringify(resultMessage), taskToken: taskToken }; console.log('JSON Returned to Step Functions: ', params); let myResult = await stepfunctions.sendTaskSuccess(params).promise(); console.log('State machine - callback completed..'); return myResult; };
-
Gardez cette fenêtre ouverte et suivez les étapes de la section suivante pour effectuer d'autres actions.
Étape 2.2 : Ajouter la SNS rubrique Amazon comme déclencheur pour la fonction Lambda
Lorsque vous publiez sur le SNS sujet Amazon avec un jeton de tâche, la fonction Lambda est invoquée avec la charge utile du message publié. Pour plus d'informations sur la configuration des déclencheurs pour les fonctions Lambda, consultez la section Configuration des déclencheurs dans le AWS Lambda Guide du développeur.
-
Dans la section Vue d'ensemble des fonctions de la fonction
callback-human-approval
Lambda, choisissez Ajouter un déclencheur. -
Dans la liste déroulante des déclencheurs, choisissez-en un SNScomme déclencheur.
-
Pour le SNSsujet, commencez à saisir le nom du SNS sujet Amazon que vous avez créé à l'étape 1 de ce didacticiel, puis choisissez-le dans la liste déroulante qui apparaît.
-
Choisissez Ajouter.
-
Gardez cette fenêtre ouverte et suivez les étapes de la section suivante pour effectuer d'autres actions.
Étape 2.3 : Fournir les autorisations nécessaires au rôle de fonction Lambda IAM
Vous devez fournir à la fonction callback-human-approval
Lambda les autorisations nécessaires pour accéder à Step Functions afin de renvoyer le jeton de tâche avec l'SendTaskSucess
APIappel.
-
Sur la callback-human-approvalpage, choisissez l'onglet Configuration, puis sélectionnez Autorisations.
-
Sous Rôle d'exécution, choisissez le nom du rôle pour accéder au AWS Identity and Access Management page Rôles de la console.
-
Pour ajouter l'autorisation requise, choisissez Ajouter des autorisations, puis choisissez Joindre des politiques.
-
Dans le champ de recherche, tapez
AWSStepFunctions
puis appuyez sur Entrée. -
Choisissez AWSStepFunctionsFullAccesspuis faites défiler l'écran vers le bas pour sélectionner Joindre des politiques. Cela ajoute la politique contenant les autorisations nécessaires pour le rôle de fonction
callback-human-approval
Lambda.
Étape 3 : Mettre à jour le flux de travail — ajouter la logique de condition if-else dans l'état Choice
Dans la console Step Functions, définissez une logique conditionnelle pour votre flux de travail à l'aide de l'Choice
état. Si le résultat renvoyé par la fonction RandomNumberforCredit
Lambda est inférieur à 5000, le crédit demandé est automatiquement approuvé. Si le résultat renvoyé est supérieur ou égal à 5 000, l'exécution du flux de travail passe à l'étape d'interaction humaine pour l'approbation de la limite de crédit.
Dans l'Choice
état, vous utilisez un opérateur de comparaison pour comparer une variable d'entrée à une valeur spécifique. Vous pouvez spécifier la variable d'entrée comme entrée d'exécution lors du démarrage d'une exécution par machine à états ou utiliser la sortie d'une étape précédente comme entrée pour l'étape en cours. Par défaut, le résultat d'une étape est stocké dans une variable appeléePayload
. Pour utiliser la valeur de la Payload
variable à des fins de comparaison dans l'Choice
état, utilisez la $
syntaxe indiquée dans la procédure suivante.
Pour plus d'informations sur la manière dont les informations circulent d'un état à un autre et sur la spécification des entrées et des sorties dans vos flux de travail, reportez-vous Configuration de l'entrée et de la sortie aux sections etTraitement des entrées et des sorties.
Note
Si l'Choice
état utilise une variable d'entrée spécifiée dans l'entrée d'exécution de la machine à états à des fins de comparaison, utilisez la $.variable_name
syntaxe pour effectuer la comparaison. Par exemple, pour comparer une variablemyAge
, utilisez la syntaxe$.myAge
.
Étant donné qu'au cours de cette étape, l'Choice
état recevra des informations provenant de l'état Get credit limit, vous allez utiliser la $
syntaxe de la configuration de Choice
l'état. Pour découvrir en quoi le résultat de l'exécution de la machine à états diffère lorsque vous utilisez la $.variable_name
syntaxe de la configuration d'Choice
état pour faire référence au résultat d'une étape précédente, consultez la Débogage du chemin non valide (erreur d'état du choix du chemin) section du didacticiel 8.
Pour ajouter une logique de condition if-else à l'aide de l'état Choice
-
Ouvrez la fenêtre de console Step Functions
contenant le prototype de flux de travail que vous avez crééCréer une machine d'état. -
Choisissez le crédit appliqué >= 5000 ? état et dans l'onglet Configuration, spécifiez la logique conditionnelle comme suit :
-
Sous Règles de choix, cliquez sur l'icône Modifier dans la vignette Règle #1 pour définir la règle du premier choix.
-
Sélectionnez Ajouter des conditions.
-
Dans la boîte de dialogue Conditions pour la règle #1, pour Variable, entrez
$
. -
Pour Opérateur, le choix est inférieur à.
-
Pour Valeur, choisissez Constante numérique, puis entrez
5000
dans le champ situé à côté de la liste déroulante Valeur. -
Choisissez Enregistrer les conditions.
-
Pour la liste déroulante « L'état suivant est : », choisissez « Approuver automatiquement la limite ».
-
Choisissez Ajouter une nouvelle règle de choix, puis définissez la deuxième règle de choix lorsque le montant du crédit est supérieur ou égal à 5 000 en répétant les sous-étapes 2.b à 2.f. Pour Operator, le paramètre choose est supérieur ou égal à.
-
Pour la liste déroulante L'état suivant est :, choisissez Attendre l'approbation humaine.
-
Dans la zone Règle par défaut, cliquez sur l'icône Modifier pour définir la règle de choix par défaut, puis choisissez Attendre l'approbation humaine dans la liste déroulante État par défaut. Vous définissez la règle par défaut pour spécifier le prochain état vers lequel passer si aucune des conditions de l'état Choice n'est vraie ou fausse.
-
-
Configurez l'état Attendre l'approbation humaine comme suit :
-
Dans l'onglet Configuration, pour Rubrique, commencez à saisir le nom de la SNS rubrique Amazon TaskTokenTopic, puis choisissez le nom tel qu'il apparaît dans la liste déroulante.
-
Pour Message, choisissez Entrer un message dans la liste déroulante. Dans le champ Message, vous spécifiez le message que vous souhaitez publier dans le SNS sujet Amazon. Pour ce didacticiel, vous publiez un jeton de tâche en tant que message.
Un jeton de tâche vous permet de suspendre un flux de travail Step Functions de type standard jusqu'à ce qu'un processus externe soit terminé et que le jeton de tâche soit renvoyé. Lorsque vous spécifiez un état de tâche en tant que tâche de rappel en spécifiant le modèle d'intégration du .waitForTaskToken service, un jeton de tâche est généré et placé dans l'objet de contexte au démarrage de la tâche. L'objet de contexte est une JSON structure interne disponible lors d'une exécution et contenant des informations sur votre machine à états et son exécution. Pour plus d'informations sur les objets contextuels, consultezObjet Contexte.
-
Dans le champ qui apparaît, entrez le message suivant :
{ "TaskToken.$": "$$.Task.Token" }
-
Cochez la case Attendre le rappel.
-
Choisissez OK dans la boîte de dialogue qui apparaît.
-
-
Gardez cette fenêtre ouverte et passez à la rubrique suivante.
Étapes suivantes
Dans la rubrique suivante, Définissez des tâches parallèles vous allez apprendre à effectuer plusieurs tâches en parallèle.