Mapeo - 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.

Mapeo

El estado Map ("Type": "Map") permite ejecutar un conjunto de pasos para cada elemento de una matriz de entrada. Aunque el estado Parallel ejecuta varias ramificaciones de pasos utilizando la misma entrada, un estado Map ejecutará los mismos pasos para varias entradas de una matriz en la entrada de estado.

Para obtener una introducción al uso del estado Map, consulte el Tutorial sobre el estado Map.

Además de los campos de estado comunes, los estados Map incluyen los campos adicionales que se detallan a continuación.

Iterator (Obligatorio)

El valor del campo Iterator es un objeto que define una máquina de estado que procesará cada elemento de la matriz.

ItemsPath (opcional)

El valor del campo ItemsPath es una ruta de referencia que identifica en qué parte de la entrada efectiva se encuentra el campo de la matriz. Para obtener más información, consulte ItemsPath.

Los estados de un campo Iterator solo pasar de uno a otro y ningún estado ajeno al campo Iterator puede pasar a un estado dentro de él.

Si se produce un error en una iteración, se produce un error en todo el estado Map y se terminan todas las iteraciones.

MaxConcurrency (opcional)

El valor del campo MaxConcurrency es un número entero que proporciona el límite superior respecto al número de invocaciones del iterador que se pueden ejecutar en paralelo. Por ejemplo, un valor de MaxConcurrency de 10 limitará el estado Map a 10 iteraciones que se ejecutan simultáneamente.

nota

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

Para lograr un mayor número de concurrencia, considere la posibilidad de utilizar máquinas de estado anidadas en cascadaMapestados. Por ejemplo, para lograr una concurrencia de 1024, podría crear una máquina de estado que contenga unMapestado que itera 32 veces, luego anida esa máquina de estado en elMapestado de una máquina de estado de nivel superior que se repite 32 veces.

El valor predeterminado es 0, que no establece ninguna cuota respecto al paralelismo y las iteraciones se invocan de la forma más simultánea posible.

Un valor de MaxConcurrency de 1 invoca a Iterator una vez por cada elemento de la matriz en el orden de aparición en la entrada; no comenzará una nueva iteración hasta que se haya completado la anterior.

ResultPath (opcional)

Especifica en qué lugar (de los datos de entrada) se va a situar la salida de las ramificaciones. La entrada se filtra según el contenido del campo OutputPath (si existe) antes de utilizarla como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida.

ResultSelector (opcional)

Pase una colección de pares de valores clave, donde los valores son estáticos o están seleccionados del resultado. Para obtener más información, consulte Selector de resultados.

Retry (opcional)

Una matriz de objetos, llamados "reintentadores", que definen una política de reintentos en caso de que el estado encuentre errores en tiempo de ejecución. Para obtener más información, consulte Ejemplos de uso de reintento y uso de captura.

nota

Si define Retriers para elMap, la política de reintentos se aplica a todos losMapiteraciones de estado en lugar de solo las iteraciones fallidas. Por ejemplo, si suMapstate contiene tres iteraciones de las cuales una falla y ha definido elRetrypara laMap, la política de reintentos se aplica a todos losMapiteraciones de estado en lugar de solo la iteración fallida.

Catch (opcional)

Una matriz de objetos, denominados "receptores", que definen un estado alternativo que se ejecuta si el estado encuentra errores en tiempo de ejecución y su política de reintentos está agotada o no se ha definido. Para obtener más información, consulte Estados alternativos.

Ejemplo del estado Map

Tenga en cuenta los siguientes datos de entrada para un estado Map.

{ "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 de AWS Lambda (ship-val) una vez por cada elemento de la matriz en el campo shipped.

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "Iterator": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "ResultPath": "$.detail.shipped", "End": true }

Cada iteración delMapstate enviará un elemento de la matriz (seleccionado con laItemsPath) como entrada para la función Lambda. Por ejemplo, la entrada para una invocación de Lambda sería la siguiente.

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

Una vez finalizado, la salida delMapstate es una matriz JSON en la que cada elemento es la salida de una iteración (en este caso, la salida de laship-valUna función Lambda).

Ejemplo del estado Map con parámetros

Supongamos que elship-valLa función Lambda del ejemplo anterior también necesita información sobre el transportista del envío, así como 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 Parameters del siguiente ejemplo.

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

El bloque Parameters sustituye la entrada para las iteraciones por un nodo JSON que 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 para una única iteración, que se transfiere a una invocación de laship-valUna función Lambda.

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

En los anterioresMapejemplo de estado, elResultPathproduce salida igual que la entrada, pero con eldetail.shippedcampo sobrescrito por una matriz en la que cada elemento es la salida delship-valFunción lambda para cada iteración.

Para obtener más información, consulte los siguientes temas.

Procesamiento de entrada y salida del estado Map

Para un estado Map, InputPath funciona igual que para los demás tipos de estados, es decir, selecciona un subconjunto de la entrada.

La entrada de un estado Map debe incluir una matriz JSON y ejecutará la sección Iterator una vez por cada elemento de la matriz. Especifique en qué ubicación de la entrada se encuentra esta matriz mediante el campo ItemsPath. Si no se especifica, el valor de ItemsPath es $ y la sección Iterator espera que la matriz sea la única entrada. Un estado Map también puede incluir un campo ItemsPath, cuyo valor debe ser una ruta de referencia. El campo ItemsPath selecciona en qué lugar de la entrada se encuentra la matriz que se va a utilizar para las iteraciones. La ruta de referencia se aplica a la entrada efectiva (después de aplicar InputPath) y 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. Esto puede anularse mediante el campo Parameters.

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, consulte los siguientes temas.