Uso del estado Map en modo En línea - 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.

Uso del estado Map en modo En línea

De forma predeterminada, los estados Map se ejecutan en modo En línea. En el modo En línea, el estado Map solo acepta una matriz JSON como entrada. Recibe esta matriz de un paso anterior del flujo de trabajo. En este modo, cada iteración del estado Map se ejecuta en el contexto del flujo de trabajo que contiene el estado Map. Step Functions añade el historial de ejecución de estas iteraciones al historial de ejecución del flujo de trabajo principal.

En este modo, el estado Map admite hasta 40 iteraciones simultáneas.

Un estado Map configurado como en línea se conoce como estado Map en línea. Utilice el estado Map en modo En línea si el historial de ejecución del flujo de trabajo no va a superar las 25 000 entradas o si no necesita más de 40 iteraciones simultáneas.

Para ver una introducción al uso del estado Map en línea, consulte el tutorial Repetir una acción utilizando el estado Inline Map.

Conceptos clave de este tema

Modo En línea

Un modo de simultaneidad limitada del estado Map. En este modo, cada iteración del estado Map se ejecuta en el contexto del flujo de trabajo que contiene el estado Map. Step Functions añade el historial de ejecución de estas iteraciones al historial de ejecución del flujo de trabajo principal. Los estados Map se ejecutan de manera predeterminada en el modo En línea.

Este modo solo acepta una matriz JSON como entrada y admite hasta 40 iteraciones simultáneas.

Estado Map en línea

Un estado Map configurado en el modo En línea.

Flujo de trabajo de Map

El conjunto de pasos que ejecuta el estado Map para cada iteración.

Iteración del estado Map

Una repetición del flujo de trabajo definido dentro del estado Map.

Campos del estado Map en línea

Para usar el estado Map en línea en los flujos de trabajo, especifique uno o más de estos campos. Estos campos se especifican además de los campos de estado comunes.

Type (Obligatorio)

Establece el tipo de estado, por ejemplo Map.

ItemProcessor
(Obligatorio)

Contiene los siguientes objetos JSON que especifican el modo y la definición de procesamiento del estado Map.

La definición contiene el conjunto de pasos que se deben repetir para procesar cada elemento de la matriz.

  • ProcessorConfig – Un objeto JSON opcional que especifica el modo de procesamiento del estado Map. Este objeto contiene el subcampo Mode. El valor predeterminado de este campo es INLINE, que usa el estado Map en el modo En línea.

    En este modo, si se produce un error en cualquier iteración, se produce un error en el estado Map. Todas las iteraciones se detienen cuando el estado Map produce un error.

  • StartAt— Especifica una cadena que indica el primer estado de un flujo de trabajo. Esta cadena debe coincidir exactamente (mayúsculas y minúsculas) con el nombre de uno de los objetos de estado. Este estado se ejecuta primero para cada elemento del conjunto de datos. Cualquier entrada de ejecución que se proporcione al estado Map pasará primero al estado StartAt.

  • States – Objeto JSON que contiene un conjunto de estados delimitados por comas. En este objeto, se define el Map workflow.

    nota
    • Los estados del campo ItemProcessor solo pueden hacer la transición entre sí. Ningún estado fuera del campo ItemProcessor puede pasar a un estado dentro de él.

    • El campo ItemProcessor reemplaza al campo Iterator, ahora obsoleto. Aunque puede seguir incluyendo estados Map que usen el campo Iterator, le recomendamos encarecidamente que sustituya este campo por ItemProcessor.

      Actualmente, Step Functions Local no es compatible con el campo ItemProcessor. Le recomendamos que utilice el campo Iterator con Step Functions Local.

ItemsPath (opcional)

Especifica una ruta de referencia mediante la sintaxis JsonPath. Esta ruta selecciona el nodo JSON que contiene la matriz de elementos dentro de la entrada de estado. Para obtener más información, consulte ItemsPath.

ItemSelector
(opcional)

Anula los valores de los elementos de la matriz de entrada antes de pasarlos a cada iteración del estado Map.

En este campo, se especifica un JSON válido que contiene una colección de pares clave-valor. Estos pares pueden contener lo siguiente:

  • Valores estáticos se definen en la definición de la máquina de estado.

  • Los valores se seleccionan de la entrada de estado mediante una ruta.

  • Valores a los que se accede desde el objeto de contexto.

Para obtener más información, consulte ItemSelector.

El campo ItemSelector reemplaza al campo Parameters, ahora obsoleto. Aunque puede seguir incluyendo estados Map que usen el campo Parameters, le recomendamos encarecidamente que sustituya este campo por ItemSelector.

MaxConcurrency (opcional)

Especifica un valor entero que proporciona el límite superior del número de iteraciones del estado Map que se pueden ejecutar en paralelo. Por ejemplo, un valor de MaxConcurrency de 10 limitará el estado Map a 10 iteraciones que se ejecuten simultáneamente.

nota

Las iteraciones simultáneas pueden estar limitadas. Cuando ocurra esto, algunas iteraciones no comenzarán hasta que se completen las anteriores. La probabilidad de que esto ocurra aumenta cuando la matriz de entrada tiene más de 40 elementos.

Para lograr una mayor simultaneidad, considere Uso del estado Map en modo distribuido.

El valor predeterminado es 0, que no limita la simultaneidad. Step Functions invoca las iteraciones de la forma más simultánea posible.

Un valor de MaxConcurrency de 1 invoca a ItemProcessor una vez para cada elemento de la matriz. Los elementos de la matriz se procesan en el orden en que aparecen en la entrada. Step Functions no inicia una nueva iteración hasta que se completa la iteración anterior.

MaxConcurrencyPath (opcional)

Si desea proporcionar un valor máximo de simultaneidad de forma dinámica a partir de la entrada de estado mediante una ruta de referencia, utilice MaxConcurrencyPath. Una vez resuelta, la ruta de referencia debe seleccionar un campo cuyo valor sea un entero no negativo.

nota

Un estado Map no puede incluir tanto MaxConcurrency como MaxConcurrencyPath.

ResultPath (opcional)

Especifica en qué parte de la entrada se va a almacenar la salida de las iteraciones del estado Map. A continuación, el estado Map filtra la entrada según lo especificado por el campo OutputPath, si se especifica. A continuación, utiliza la entrada filtrada como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida.

ResultSelector (opcional)

Pase una colección de pares clave-valor, donde los valores sean estáticos o se seleccionen del resultado. Para obtener más información, consulte ResultSelector.

sugerencia

Si el estado Parallel o Map que utiliza en sus máquinas de estado devuelve una matriz de matrices, puede transformarlas en una matriz plana con el campo ResultSelector. Para obtener más información, consulte Aplanamiento de una matriz de matrices.

Retry (opcional)

Una matriz de objetos, denominados "reintentadores", que definen una política de reintentos. Los estados utilizan una política de reintentos cuando encuentran errores en tiempo de ejecución. Para obtener más información, consulte Ejemplos de máquina de estado que usan Retry y Catch.

nota

Si define "reintentadores" para el estado Map en línea, la política de reintentos se aplicará a todas las iteraciones del estado Map y no solo a las iteraciones con errores. Por ejemplo, el estado Map contiene dos iteraciones correctas y una iteración con error. Si ha definido el campo Retry para el estado Map, la política de reintentos se aplicará a las tres iteraciones del estado Map y no solo a la iteración con error.

Catch (opcional)

Una matriz de objetos, denominados "receptores", que definen un estado alternativo. Los estados ejecutan un receptor si encuentran errores en tiempo de ejecución y no tienen una política de reintentos o si su política de reintentos está agotada. Para obtener más información, consulte Estados alternativos.

Campos obsoletos

nota

Aunque puede seguir incluyendo estados Map que usen los siguientes campos, le recomendamos encarecidamente que sustituya Iterator por ItemProcessor y Parameters por ItemSelector.

Iterator

Especifica un objeto JSON que define un conjunto de pasos que procesan cada elemento de la matriz.

Parameters

Especifica una colección de pares clave-valor, donde los valores pueden contener lo siguientes:

  • Valores estáticos se definen en la definición de la máquina de estado.

  • Valores seleccionados de la entrada mediante una ruta.

Ejemplo de estado Map en línea

Tenga en cuenta los siguientes datos de entrada para un estado Map que se ejecute en modo En línea.

{ "ship-date": "2016-03-14T01:59:00Z", "detail": { "delivery-partner": "UQS", "shipped": [ { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, { "prod": "S39", "dest-code": 9511, "quantity": 40 }, { "prod": "R31", "dest-code": 9833, "quantity": 12 }, { "prod": "R40", "dest-code": 9860, "quantity": 887 }, { "prod": "R40", "dest-code": 9511, "quantity": 1220 } ] } }

Dada la entrada anterior, el estado Map del siguiente ejemplo invocará una función AWS Lambda denominada ship-val una vez por cada elemento de la matriz en el campo shipped.

"Validate All": { "Type": "Map", "InputPath": "$.detail", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:ship-val:$LATEST" }, "End": true } } }, "End": true, "ResultPath": "$.detail.shipped", "ItemsPath": "$.shipped" }

Cada iteración del estado Map enviará un elemento de la matriz. seleccionado mediante el campo ItemsPath, como entrada para la función de Lambda ship-val. Los siguientes valores son un ejemplo de la entrada que el estado Map envía a una invocación de la función de Lambda:

{ "prod": "R31", "dest-code": 9511, "quantity": 1344 }

Una vez completada, la salida del estado Map es una matriz JSON en la que cada elemento es la salida de una iteración. En este caso, esta matriz contiene la salida de la función de Lambda ship-val.

Ejemplo de estado Map en línea con ItemSelector

Supongamos que la función de Lambda ship-val del ejemplo anterior también necesita información sobre el transportista del envío. Esta información se añade a los elementos de la matriz para cada iteración. Puede incluir información de la entrada, junto con información específica de la iteración actual del estado Map. Observe el campo ItemSelector del siguiente ejemplo:

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "ResultPath": "$.detail.shipped", "ItemSelector": { "parcel.$": "$$.Map.Item.Value", "courier.$": "$.delivery-partner" }, "ItemProcessor": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "End": true }

El bloque ItemSelector reemplaza la entrada a las iteraciones por un nodo JSON. Este nodo contiene tanto los datos del elemento actual del objeto de contexto como la información del transportista mensajería del campo delivery-partner de la entrada del estado Map. A continuación, se muestra un ejemplo de entrada en una sola iteración. El estado Map pasa esta entrada a una invocación de la función de Lambda ship-val.

{ "parcel": { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, "courier": "UQS" }

En el ejemplo anterior del estado Map en línea, el campo ResultPath produce una salida en el mismo formato que la entrada. No obstante, sobrescribe el campo detail.shipped con una matriz en la que cada elemento es la salida de la invocación de Lambda ship-val de cada iteración.

Para obtener más información sobre el uso del estado Map en línea y sus campos, consulte lo siguiente.

Procesamiento de entrada y salida del estado Map en línea

Para un estado Map determinado, InputPath selecciona un subconjunto de la entrada del estado.

La entrada de un estado Map debe incluir una matriz JSON. El estado Map ejecuta la sección ItemProcessor una vez para cada elemento de la matriz. Si especifica el campo ItemsPath, el estado Map selecciona en qué parte de la entrada se busca la matriz sobre la que se va a iterar. Si no se especifica, el valor de ItemsPath es $ y la sección ItemProcessor espera que la matriz sea la única entrada. Si especifica el campo ItemsPath, su valor debe ser una ruta de referencia. El estado Map aplica esta ruta a la entrada efectiva después de aplicar la InputPath. La ItemsPath debe identificar un campo cuyo valor sea una matriz JSON.

La entrada de cada iteración, de forma predeterminada, es un único elemento del campo de matriz identificado por el valor ItemsPath. Puede anular este valor con el campo ItemSelector.

Una vez completada, la salida del estado Map es una matriz JSON en la que cada elemento es la salida de una iteración.

Para obtener más información acerca de las entradas y salidas del estado Map en línea, consulte lo siguiente: