

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 en flujos de trabajo de Step Functions
<a name="state-map-inline"></a>

**Administración del estado y transformación de los datos**  
Obtenga información sobre cómo [pasar datos entre estados con variables](workflow-variables.md) y cómo [transformar datos con JSONata](transforming-data.md).

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](tutorial-map-inline.md).

**Topics**
+ [Conceptos clave de este tema](#key-concepts-inline-map)
+ [Campos del estado Map en línea](#map-state-inline-additional-fields)
+ [Campos obsoletos](#map-state-inline-deprecated-fields)
+ [Ejemplo de estado de un mapa en línea () JSONPath](#inline-map-state-examples)
+ [Ejemplo de estado Map en línea con `ItemSelector`](#inline-map-state-example-params)
+ [Procesamiento de entrada y salida del estado `Map` en línea](#inline-map-state-output)

## Conceptos clave de este tema
<a name="key-concepts-inline-map"></a>

**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
<a name="map-state-inline-additional-fields"></a>

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](statemachine-structure.md#amazon-states-language-common-fields).

**`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](workflow-states.md) delimitados por comas. En este objeto, se define el [Map workflow](#mapwflow).
**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](sfn-local.md) no es compatible con el campo `ItemProcessor`. Le recomendamos que utilice el campo `Iterator` con Step Functions Local.

**`Items`(Opcional, JSONata únicamente)**  
Una matriz JSON o una JSONata expresión que debe dar como resultado una matriz.

**`ItemsPath`(Opcional, JSONPath únicamente)**  
Especifica una [ruta de referencia](amazon-states-language-paths.md#amazon-states-language-reference-paths) mediante la [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)sintaxis. 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 ( JSONPath Solo mapa)](input-output-itemspath.md).

**`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](amazon-states-language-paths.md).
+ Valores a los que se accede desde el [objeto de contexto](input-output-contextobject.md).
 Para obtener más información, consulte [ItemSelector (Map)](input-output-itemselector.md).  
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.  
 En JSONata los estados, puede especificar una JSONata expresión que dé como resultado un número entero.  
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](state-map-distributed.md).
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, JSONPath únicamente)**  
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.  
Un estado `Map` no puede incluir tanto `MaxConcurrency` como `MaxConcurrencyPath`.

**`ResultPath`(Opcional, JSONPath únicamente)**  
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`](input-output-example.md#input-output-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](concepts-input-output-filtering.md).

**`ResultSelector`(Opcional, JSONPath únicamente)**  
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](input-output-inputpath-params.md#input-output-resultselector).  
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](input-output-inputpath-params.md#input-output-resultselector). Para obtener más información, consulte [Aplanamiento de una matriz de matrices](input-output-inputpath-params.md#flatten-array-of-arrays-result-selector).

**`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](concepts-error-handling.md#error-handling-examples).  
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](concepts-error-handling.md#error-handling-fallback-states).

**`Output`(Opcional, JSONata únicamente)**  
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 estuviera rodeado de \$1%%\$1 caracteres.  
 La salida también acepta una JSONata expresión directamente, por ejemplo: «Output»: «\$1% jsonata expression%\$1»   
Para obtener más información, consulte [Transformación de datos con JSONata In Step Functions](transforming-data.md).

** `Assign` (opcional)**  
Se utiliza para almacenar variables. El `Assign` campo acepta un objeto JSON con key/value pares que definen los nombres de las variables y sus valores asignados. Cualquier valor de cadena, incluidos los que se encuentran dentro de objetos o matrices, se evaluará como JSONata si estuviera rodeado `{% %}` de caracteres  
Para obtener más información, consulte [Transmisión de datos entre estados con variables](workflow-variables.md).

## Campos obsoletos
<a name="map-state-inline-deprecated-fields"></a>

**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](amazon-states-language-paths.md).

## Ejemplo de estado de un mapa en línea () JSONPath
<a name="inline-map-state-examples"></a>

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 `Map` estado del siguiente ejemplo invoca una AWS Lambda función con un nombre `ship-val` para cada elemento de la matriz del `shipped` campo. 

```
"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`](input-output-itemspath.md), 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`
<a name="inline-map-state-example-params"></a>

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](input-output-contextobject.md#contextobject-map) 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.
+ [Repetir acciones con Inline Map](tutorial-map-inline.md)
+ [Procesamiento de entradas y salidas en Step Functions](concepts-input-output-filtering.md)
+ [ItemsPath ( JSONPath Solo mapa)](input-output-itemspath.md)
+ [Datos del objeto Context para los estados Map](input-output-contextobject.md#contextobject-map)

## Procesamiento de entrada y salida del estado `Map` en línea
<a name="inline-map-state-output"></a>

Para un estado `Map` determinado, [`InputPath`](input-output-inputpath-params.md#input-output-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`](input-output-itemspath.md), 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](amazon-states-language-paths.md#amazon-states-language-reference-paths). 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:
+ [Repetir acciones con Inline Map](tutorial-map-inline.md)
+ [Ejemplo de estado Map en línea con `ItemSelector`](#inline-map-state-example-params)
+ [Procesamiento de entradas y salidas en Step Functions](concepts-input-output-filtering.md)
+ [Datos del objeto Context para los estados Map](input-output-contextobject.md#contextobject-map)
+ [Procesamiento de datos de una cola con un estado Map en Step Functions](sample-map-state.md)