Uso del estado Map en modo En línea en flujos de trabajo de Step Functions
Administración del estado y transformación de los datos
Obtenga información sobre la Transmisión de datos entre estados con variables y la Transformación de datos con JSONata.
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 acciones con Inline Map.
Contenido
Conceptos clave de este tema
- Modo En línea
-
Un modo de simultaneidad limitada del estado
Map. En este modo, cada iteración del estadoMapse ejecuta en el contexto del flujo de trabajo que contiene el estadoMap. Step Functions añade el historial de ejecución de estas iteraciones al historial de ejecución del flujo de trabajo principal. Los estadosMapse 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
Mapconfigurado en el modo En línea. - Flujo de trabajo de Map
El conjunto de pasos que ejecuta el estado
Mappara 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 estadoMap. Este objeto contiene el subcampoMode. El valor predeterminado de este campo esINLINE, que usa el estadoMapen 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 estadoMapproduce 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 estadoMappasará primero al estadoStartAt.-
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
ItemProcessorsolo pueden hacer la transición entre sí. Ningún estado fuera del campoItemProcessorpuede pasar a un estado dentro de él. -
El campo
ItemProcessorreemplaza al campoIterator, ahora obsoleto. Aunque puede seguir incluyendo estadosMapque usen el campoIterator, le recomendamos encarecidamente que sustituya este campo porItemProcessor.Actualmente, Step Functions Local no es compatible con el campo
ItemProcessor. Le recomendamos que utilice el campoIteratorcon Step Functions Local.
-
-
Items(Opcional, solo JSONata)-
Una matriz JSON o una expresión JSONata que debe evaluarse en una matriz.
ItemsPath(Opcional, solo JSONPath)-
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 (solo Map, JSONPath). 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 (Map).
El campo
ItemSelectorreemplaza al campoParameters, ahora obsoleto. Aunque puede seguir incluyendo estadosMapque usen el campoParameters, le recomendamos encarecidamente que sustituya este campo porItemSelector. -
MaxConcurrency(opcional)-
Especifica un valor entero que proporciona el límite superior del número de iteraciones del estado
Mapque se pueden ejecutar en paralelo. Por ejemplo, un valor deMaxConcurrencyde 10 limitará el estadoMapa 10 iteraciones que se ejecuten simultáneamente.En los estados de JSONata, puede especificar una expresión de JSONata que se evalúe como un número entero.
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 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
MaxConcurrencyde1invoca aItemProcessoruna 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, solo JSONPath)-
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
Mapno puede incluir tantoMaxConcurrencycomoMaxConcurrencyPath. ResultPath(Opcional, solo JSONPath)-
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, solo JSONPath)-
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
Mapy no solo a las iteraciones con errores. Por ejemplo, el estadoMapcontiene dos iteraciones correctas y una iteración con error. Si ha definido el campoRetrypara el estadoMap, la política de reintentos se aplicará a las tres iteraciones del estadoMapy 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.
Output(Opcional, solo JSONata)-
Se utiliza para especificar y transformar la salida del estado. Cuando se especifica, el valor anula el valor predeterminado de salida del estado.
El campo de salida acepta cualquier valor JSON (objeto, matriz, cadena, número, booleano, nulo). Cualquier valor de cadena, incluidos los que estén dentro de objetos o matrices, se evaluará como JSONata si está rodeado por caracteres {% %}.
La salida también acepta directamente una expresión de JSONata, por ejemplo: “Output”: “{% jsonata expression%}”
Para obtener más información, consulte Transformación de datos con JSONata en Step Functions.
-
Assign(opcional) -
Se utiliza para almacenar variables. El campo
Assignacepta un objeto JSON con pares clave/valor que definen los nombres de las variables y sus valores asignados. Cualquier valor de cadena, incluidos los que estén dentro de objetos o matrices, se evaluará como JSONata si está rodeado por caracteres{% %}.Para obtener más información, consulte Transmisión de datos entre estados con variables.
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 (JSONPath)
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:account-id: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:region:account-id: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 Context como la información del transportista 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 (Map).
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: