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.
Utilisation d'intégrations de services simulées
Dans Step Functions Local, vous pouvez tester les chemins d'exécution de vos machines d'état sans réellement appeler de services intégrés en utilisant des intégrations de services simulées. Pour configurer vos machines d'état afin d'utiliser des intégrations de services simulées, vous devez créer un fichier de configuration fictif. Dans ce fichier, vous définissez le résultat souhaité de vos intégrations de services sous forme de réponses simulées et les exécutions qui utilisent vos réponses simulées pour simuler un chemin d'exécution sous forme de cas de test.
En fournissant le fichier de configuration fictif à Step Functions Local, vous pouvez tester les appels d'intégration de services en exécutant des machines d'état qui utilisent les réponses simulées spécifiées dans les scénarios de test au lieu de passer de véritables appels d'intégration de services.
Note
Si vous ne spécifiez pas de réponses d'intégration de service simulées dans le fichier de configuration fictif, Step Functions Local invoquera l'intégration de AWS services en utilisant le point de terminaison que vous avez configuré lors de la configuration de Step Functions Local. Pour plus d'informations sur la configuration des points de terminaison pour Step Functions Local, consultezConfiguration des options de configuration pour Step Functions Local.
Rubriques
- Concepts clés de cette rubrique
- Étape 1 : Spécifier les intégrations de services simulées dans un fichier de configuration fictif
- Étape 2 : Fournir le fichier de configuration fictif à Step Functions Local
- Étape 3 : Exécuter des tests d'intégration de services simulés
- Fichier de configuration pour les intégrations de services simulées
Concepts clés de cette rubrique
Cette rubrique utilise plusieurs concepts définis dans la liste suivante :
Intégrations de services simulées - Fait référence aux états des tâches configurés pour utiliser des réponses simulées au lieu d'effectuer de véritables appels de service.
Réponses simulées - Fait référence aux données fictives que les états des tâches peuvent être configurés pour utiliser.
Cas de test : fait référence aux exécutions automatiques configurées pour utiliser des intégrations de services simulées.
Fichier de configuration fictif - Fait référence au fichier de configuration fictif contenant du JSON, qui définit les intégrations de services simulées, les réponses simulées et les cas de test.
Étape 1 : Spécifier les intégrations de services simulées dans un fichier de configuration fictif
Vous pouvez tester le AWS SDK Step Functions et les intégrations de services optimisées à l'aide de Step Functions Local. L'image suivante montre la machine à états définie dans l'onglet Définition de la machine à états :
![Exemple simulé d'intégration de services.](images/msi-graph.png)
Pour ce faire, vous devez créer un fichier de configuration fictif contenant les sections définies dansPrésentation de la structure de la configuration fictive.
-
Créez un fichier nommé
MockConfigFile.json
pour configurer les tests avec des intégrations de services simulées.L'exemple suivant montre un fichier de configuration fictif faisant référence à une machine à états avec deux états définis nommés
LambdaState
etSQSState
.Vous pouvez exécuter la définition de machine à
LambdaSQSIntegration
états référencée dans le fichier de configuration fictif en utilisant l'un des cas de test suivants :-
HappyPath
- Ce test simule la sortie deLambdaState
et l'SQSState
utilisation deMockedLambdaSuccess
etMockedSQSSuccess
respectivement.-
Le
LambdaState
renverra la valeur suivante :"0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
-
Le
SQSState
renverra la valeur suivante :"0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
-
-
RetryPath
- Ce test simule la sortie deLambdaState
et l'SQSState
utilisation deMockedLambdaRetry
etMockedSQSSuccess
respectivement. En outre,LambdaState
est configuré pour effectuer quatre tentatives de nouvelle tentative. Les réponses simulées pour ces tentatives sont définies et indexées dans l'MockedLambdaRetry
état.-
La tentative initiale se termine par un échec de tâche contenant un message de cause et d'erreur, comme illustré dans l'exemple suivant :
"0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
-
La première et la deuxième tentative se terminent par un échec de tâche contenant un message de cause et d'erreur, comme illustré dans l'exemple suivant :
"1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
-
La troisième tentative se termine par une tâche réussie contenant le résultat d'état de la section Payload dans la réponse Lambda simulée.
"3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
Note
Pour les États dotés d'une politique de nouvelles tentatives, Step Functions Local épuisera le nombre de tentatives définies dans la politique jusqu'à ce qu'il reçoive une réponse positive. Cela signifie que vous devez indiquer les simulations pour les tentatives avec des numéros de tentatives consécutifs et que vous devez couvrir toutes les tentatives avant de renvoyer une réponse positive.
Si vous ne spécifiez pas de réponse simulée pour une nouvelle tentative spécifique, par exemple, réessayez « 3 », l'exécution de la machine à états échouera.
-
-
HybridPath
- Ce test simule le résultat de.LambdaState
Une fois l'LambdaState
exécution réussie et la réception de données simulées en réponse,SQSState
effectue un véritable appel de service à la ressource spécifiée en production.
Pour plus d'informations sur la façon de démarrer des exécutions de tests avec des intégrations de services simulées, consultez. Étape 3 : Exécuter des tests d'intégration de services simulés
-
Assurez-vous que la structure des réponses simulées est conforme à la structure des réponses de service réelles que vous recevez lorsque vous passez des appels de service intégrés. Pour plus d'informations sur les exigences structurelles applicables aux réponses simulées, consultezConfiguration d'intégrations de services simulées.
Dans l'exemple de fichier de configuration fictif précédent, les réponses simulées sont définies
MockedLambdaSuccess
etMockedLambdaRetry
conformes à la structure des réponses réelles renvoyées par un appelHelloFromLambda
.Important
AWS la structure des réponses aux services peut varier d'un service à l'autre. Step Functions Local ne vérifie pas si les structures de réponse simulées sont conformes aux structures de réponse de service réelles. Vous devez vous assurer que vos réponses simulées sont conformes aux réponses réelles avant le test. Pour examiner la structure des réponses du service, vous pouvez soit effectuer les appels de service proprement dits à l'aide de Step Functions, soit consulter la documentation relative à ces services.
Étape 2 : Fournir le fichier de configuration fictif à Step Functions Local
Vous pouvez fournir le fichier de configuration fictif à Step Functions Local de l'une des manières suivantes :
Étape 3 : Exécuter des tests d'intégration de services simulés
Après avoir créé et fourni un fichier de configuration fictif à Step Functions Local, exécutez la machine d'état configurée dans le fichier de configuration fictif à l'aide d'intégrations de services simulées. Vérifiez ensuite les résultats de l'exécution à l'aide d'une action d'API.
-
Créez une machine à états basée sur la définition mentionnée précédemment dans le fichier de configuration fictif.
aws stepfunctions create-state-machine \ --endpoint http://localhost:8083 \ --definition "{\"Comment\":\"Thisstatemachineiscalled:LambdaSQSIntegration\",\"StartAt\":\"LambdaState\",\"States\":{\"LambdaState\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::lambda:invoke\",\"Parameters\":{\"Payload.$\":\"$\",\"FunctionName\":\"arn:aws:lambda:us-east-1:123456789012:function:HelloWorldFunction\"},\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":2,\"MaxAttempts\":3,\"BackoffRate\":2}],\"Next\":\"SQSState\"},\"SQSState\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sqs:sendMessage\",\"Parameters\":{\"QueueUrl\":\"https://sqs.us-east-1.amazonaws.com/123456789012/myQueue\",\"MessageBody.$\":\"$\"},\"End\":true}}}" \ --name "LambdaSQSIntegration" --role-arn "arn:aws:iam::123456789012:role/service-role/LambdaSQSIntegration"
-
Exécutez la machine d'état à l'aide d'intégrations de services simulées.
Pour utiliser le fichier de configuration fictif, effectuez un appel d'
StartExecution
API sur une machine d'état configurée dans le fichier de configuration fictif. Pour ce faire, ajoutez le suffixe#
, à l'ARN de la machine à états utilisé par.test_name
StartExecution
est un cas de test configuré pour la machine d'état dans le même fichier de configuration fictif.test_name
La commande suivante est un exemple d'utilisation de la machine à
LambdaSQSIntegration
états et de la configuration fictive. Dans cet exemple, la machine àLambdaSQSIntegration
états est exécutée à l'aide duHappyPath
test défini dansÉtape 1 : Spécifier les intégrations de services simulées dans un fichier de configuration fictif. LeHappyPath
test contient la configuration pour l'exécution afin de gérer les appels d'intégration de services fictifs queSQSState
les ÉtatsLambdaState
et les États effectuent à l'aideMockedLambdaSuccess
des réponsesMockedSQSSuccess
de service simulées.aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
Consultez la réponse d'exécution de la machine à états.
La réponse à un appel
StartExecution
utilisant un test d'intégration de service simulé est identique à la réponse à un appelStartExecution
normal, qui renvoie l'ARN d'exécution et la date de début.Voici un exemple de réponse à un appel
StartExecution
utilisant le test d'intégration de services simulé :{ "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
Vérifiez les résultats de l'exécution en effectuant un appel
ListExecutions
DescribeExecution
, ouGetExecutionHistory
API.aws stepfunctions get-execution-history \ --endpoint http://localhost:8083 \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices
L'exemple suivant illustre certaines parties d'une réponse à un appel
GetExecutionHistory
utilisant l'ARN d'exécution à partir de l'exemple de réponse présenté à l'étape 2. Dans cet exemple, la sortie deLambdaState
etSQSState
correspond aux données fictives définies dansMockedLambdaSuccess
etMockedSQSSuccess
dans le fichier de configuration fictif. En outre, les données simulées sont utilisées de la même manière que les données renvoyées lors de l'exécution d'appels d'intégration de services réels. De plus, dans cet exemple, la sortie deLambdaState
est transmiseSQSState
en entrée.{ "events": [ ... { "timestamp": "2021-12-02T19:39:48.988000+00:00", "type": "TaskStateEntered", "id": 2, "previousEventId": 0, "stateEnteredEventDetails": { "name": "LambdaState", "input": "{}", "inputDetails": { "truncated": false } } }, ... { "timestamp": "2021-11-25T23:39:10.587000+00:00", "type": "LambdaFunctionSucceeded", "id": 5, "previousEventId": 4, "lambdaFunctionSucceededEventDetails": { "output": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda!\\\"\"}", "outputDetails": { "truncated": false } } }, ... "timestamp": "2021-12-02T19:39:49.464000+00:00", "type": "TaskStateEntered", "id": 7, "previousEventId": 6, "stateEnteredEventDetails": { "name": "SQSState", "input": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda!\\\"\"}", "inputDetails": { "truncated": false } } }, ... { "timestamp": "2021-11-25T23:39:10.652000+00:00", "type": "TaskSucceeded", "id": 10, "previousEventId": 9, "taskSucceededEventDetails": { "resourceType": "sqs", "resource": "sendMessage", "output": "{\"MD5OfMessageBody\":\"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51\",\"MessageId\":\"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51\"}", "outputDetails": { "truncated": false } } }, ... ] }