Archivo de configuración para integraciones de servicios simuladas en Step Functions - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Archivo de configuración para integraciones de servicios simuladas en Step Functions

Para usar integraciones de servicios simuladas, primero debe crear un archivo de configuración simulado denominado MockConfigFile.json que contenga las configuraciones simuladas. A continuación, proporcione a Step Functions Local el archivo de configuración simulado. Este archivo de configuración define los casos de prueba, que contienen estados simulados que utilizan respuestas de integración de servicios simuladas. La siguiente sección contiene información sobre la estructura de la configuración simulada, que incluye los estados simulados y las respuestas simuladas:

Estructura simulada de archivos de configuración

Una configuración simulada es un JSON objeto que contiene los siguientes campos de nivel superior:

  • StateMachines: los campos de este objeto representan máquinas de estado configuradas para utilizar integraciones de servicios simuladas.

  • MockedResponse: los campos de este objeto representan respuestas simuladas para las llamadas de integración de servicios.

A continuación se muestra un ejemplo de un archivo de configuración simulado que incluye una definición StateMachine y MockedResponse.

{ "StateMachines":{ "LambdaSQSIntegration":{ "TestCases":{ "HappyPath":{ "LambdaState":"MockedLambdaSuccess", "SQSState":"MockedSQSSuccess" }, "RetryPath":{ "LambdaState":"MockedLambdaRetry", "SQSState":"MockedSQSSuccess" }, "HybridPath":{ "LambdaState":"MockedLambdaSuccess" } } } }, "MockedResponses":{ "MockedLambdaSuccess":{ "0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } } }, "LambdaMockedResourceNotReady":{ "0":{ "Throw":{ "Error":"Lambda.ResourceNotReadyException", "Cause":"Lambda resource is not ready." } } }, "MockedSQSSuccess":{ "0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } } }, "MockedLambdaRetry":{ "0":{ "Throw":{ "Error":"Lambda.ResourceNotReadyException", "Cause":"Lambda resource is not ready." } }, "1-2":{ "Throw":{ "Error":"Lambda.TimeoutException", "Cause":"Lambda timed out." } }, "3":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } } } } }

Referencia de campo de configuración simulada

En las siguientes secciones se explican los campos de objetos de nivel superior que debe definir en la configuración simulada.

StateMachines

El objeto StateMachines define qué máquinas de estado utilizarán integraciones de servicios simuladas. La configuración de cada máquina de estado se representa como un campo de nivel superior de StateMachines. El nombre del campo es el nombre de la máquina de estado y el valor es un objeto que contiene un único campo denominado TestCases, cuyos campos representan casos de prueba de esa máquina de estado.

La siguiente sintaxis muestra una máquina de estado con dos casos de prueba:

"MyStateMachine": { "TestCases": { "HappyPath": { ... }, "SadPath": { ... } }
TestCases

Los campos de TestCases representan casos de prueba individuales para la máquina de estado. El nombre de cada caso de prueba debe ser único para cada máquina de estado y el valor de cada caso de prueba es un objeto que especifica una respuesta simulada para utilizarla en los estados Task de la máquina de estado.

El siguiente ejemplo de TestCase vincula dos estados Task a dos MockedResponses:

"HappyPath": { "SomeTaskState": "SomeMockedResponse", "AnotherTaskState": "AnotherMockedResponse" }

MockedResponses

MockedResponses es un objeto que contiene varios objetos de respuesta simulados con nombres de campo únicos. Un objeto de respuesta simulado define el resultado correcto o la salida con error de cada invocación de un estado Task simulado. El número de invocación se especifica mediante cadenas de números enteros individuales, como «0», «1», «2» y «3», o un rango inclusivo de números enteros, como «0-1», «2-3».

Cuando se simula una tarea, se debe especificar una respuesta simulada para cada invocación. La respuesta debe contener un único campo denominado Return o Throw cuyo valor sea el resultado o error de la invocación de la tarea simulada. Si no especifica una respuesta simulada, la ejecución de la máquina de estado generará un error.

A continuación se muestra un ejemplo de una MockedResponse con Throw y Return objetos. En este ejemplo, las tres primeras veces que se ejecuta la máquina de estado, se devuelve la respuesta especificada en "0-2", y la cuarta vez que se ejecuta la máquina de estado, se devuelve la respuesta especificada en "3".

"SomeMockedResponse": { "0-2": { "Throw": { ... } }, "3": { "Return": { ... } } }
nota

Si utiliza un estado Map y quiere garantizar respuestas predecibles para el estado Map, defina el valor de maxConcurrency en 1. Si establece un valor superior a 1, Step Functions Local ejecutará varias iteraciones simultáneamente, lo que provocará que el orden general de ejecución de los estados de las iteraciones sea impredecible. Además, esto puede provocar que Step Functions Local utilice diferentes respuestas simuladas para los estados de iteración de una ejecución a la siguiente.

Return

Return se representa como un campo de los objetos MockedResponse. Especifica el resultado correcto de un estado Task simulado.

A continuación se muestra un ejemplo de un objeto Return que contiene una respuesta simulada para llamar a Invoke en una función de Lambda:

"Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } }
Throw

Throw se representa como un campo de los objetos MockedResponse. Especifica la salida de error de una tarea fallida. El valor de Throw debe ser un objeto que contenga campos Error y Cause con valores de cadena. Además, el valor de cadena que especifique en el campo Error en MockConfigFile.json debe coincidir con los errores gestionados en las secciones Retry y Catch de su máquina de estado.

A continuación se muestra un ejemplo de un objeto Throw que contiene una respuesta simulada para llamar a Invoke en una función de Lambda:

"Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." }