

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.

# Manipulación de los parámetros en los flujos de trabajo de Step Functions
<a name="input-output-inputpath-params"></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).

Los campos `InputPath`, `Parameters` y `ResultSelector` proporcionan una forma de manipular JSON a medida que se mueve a través del flujo de trabajo. `InputPath` puede limitar la entrada que se mueve mediante el filtrado de la notación JSON a través de una ruta (consulte [Uso de JSONPath rutas](amazon-states-language-paths.md)). Con el campo `Parameters`, puede pasar un conjunto de pares clave-valor, utilizando valores estáticos o selecciones de la entrada mediante una ruta.

 El campo `ResultSelector` proporciona una forma de manipular el resultado del estado antes de aplicar `ResultPath`. 

AWS Step Functionsaplica primero el `InputPath` campo y, después, el `Parameters` campo. Puede filtrar primero la entrada sin procesar para obtener la selección que desee mediante `InputPath` y, a continuación, aplicar `Parameters` para continuar manipulando esa entrada o para añadir valores nuevos. A continuación, puede utilizar el campo `ResultSelector` para manipular la salida del estado antes de aplicar `ResultPath`.

## InputPath
<a name="input-output-inputpath"></a>

Utilice `InputPath` para seleccionar una parte de la entrada del estado. 

Por ejemplo, suponga que la entrada del estado incluye lo siguiente:

```
{
  "comment": "Example for InputPath.",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```

Puede aplicar esta `InputPath`.

```
"InputPath": "$.dataset2",
```

Con dicha `InputPath`, lo siguiente es el objeto JSON que se pasa como la entrada.

```
{
  "val1": "a",
  "val2": "b",
  "val3": "c"
}
```

**nota**  
Una ruta puede generar una selección de valores. Considere el siguiente ejemplo.  

```
{ "a": [1, 2, 3, 4] }
```
Si aplica la ruta `$.a[0:2]`, el resultado es el siguiente.  

```
[ 1, 2 ]
```

## Parameters
<a name="input-output-parameters"></a>

En esta sección se describen las diferentes formas en las que puede utilizar el campo Parameters. 

### Pares clave-valor
<a name="input-output-parameters-keyvalue"></a>

Utilice el campo `Parameters` para crear una colección de pares clave-valor que se pasan como entrada. Los valores pueden ser valores estáticos que se incluyen en la definición de la máquina de estado, o pueden seleccionarse en la entrada o en el objeto Context con una ruta. Para los pares clave-valor cuyo valor se selecciona mediante una ruta, el nombre de la clave debe terminar por `.$`. 

Por ejemplo, suponga que proporciona la siguiente entrada. 

```
{
  "comment": "Example for Parameters.",
  "product": {
    "details": {
       "color": "blue",
       "size": "small",
       "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

Para seleccionar parte de la información, puede especificar estos parámetros en la definición de la máquina de estado. 

```
"Parameters": {
        "comment": "Selecting what I care about.",
        "MyDetails": {
          "size.$": "$.product.details.size",
          "exists.$": "$.product.availability",
          "StaticValue": "foo"
        }
      },
```

Con la entrada anterior y el campo `Parameters`, este es el objeto JSON que se pasa.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
      "size": "small",
      "exists": "in stock",
      "StaticValue": "foo"
  }
},
```

Además de la entrada, puede acceder a un objeto JSON especial conocido como el objeto Context. El objeto Context incluye información acerca de la ejecución de la máquina de estado. Consulte [Acceso a los datos de ejecución desde el objeto Context en Step Functions](input-output-contextobject.md).

### Recursos conectados
<a name="input-output-parameters-connected"></a>

El campo `Parameters` también puede pasar información a recursos conectados. Por ejemplo, si el estado de tu tarea es organizar un AWS Batch trabajo, puedes pasar los parámetros de la API pertinentes directamente a las acciones de la API de ese servicio. Para obtener más información, consulte lo siguiente:
+ [Cómo pasar parámetros a una API de servicio en Step Functions](connect-parameters.md)
+ [Integración de los servicios de ](integrate-services.md)

### Amazon S3
<a name="input-output-parameters-s3"></a>

Si los datos de la función de Lambda que pasa de un estado a otro pueden crecer hasta superar los 262 144 bytes, le recomendamos que utilice Amazon S3 para almacenar los datos e implementar uno de los siguientes métodos:
+ Utilice el *estado Map Distributed* en el flujo de trabajo para que el estado `Map` pueda leer la entrada directamente de las fuentes de datos de Amazon S3. Para obtener más información, consulte [Modo distribuido](state-map-distributed.md).
+ Analice el nombre de recurso de Amazon (ARN) del bucket en el parámetro `Payload` para obtener el nombre de bucket y el valor de clave. Para obtener más información, consulte [Uso de Amazon S3 ARNs en lugar de transferir grandes cargas en Step Functions](sfn-best-practices.md#avoid-exec-failures).

También puede ajustar la implementación para que se pasen cargas más pequeñas en las ejecuciones.

## ResultSelector
<a name="input-output-resultselector"></a>

 Utilice el campo `ResultSelector` para manipular el resultado de un estado antes de aplicar `ResultPath`. El campo `ResultSelector` permite crear una colección de pares de clave-valor, donde los valores son estáticos o se seleccionan del resultado del estado. Con el campo `ResultSelector`, puede elegir qué partes del resultado de un estado desea pasar al campo `ResultPath`.

**nota**  
Con el campo `ResultPath`, puede añadir la salida del campo `ResultSelector` a la entrada original.

`ResultSelector` es un campo opcional en los siguientes estados:
+ [Estado del flujo de trabajo Map](state-map.md)
+ [Estado de un flujo de trabajo de tarea](state-task.md)
+ [Estado Parallel de un flujo de trabajo](state-parallel.md)

Por ejemplo, las integraciones de servicios de Step Functions devuelven metadatos además de la carga del resultado. `ResultSelector` puede seleccionar partes del resultado y combinarlas con la entrada de estado con `ResultPath`. En este ejemplo, queremos seleccionar solo `resourceType` y `ClusterId` y combinar eso con la entrada de estado de un createCluster.sync de Amazon EMR. Dado lo siguiente:

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```

Puede seleccionar entonces `resourceType` y `ClusterId` mediante `ResultSelector`:

```
"Create Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
  "Parameters": {
    <some parameters>
  },
  "ResultSelector": {
    "ClusterId.$": "$.output.ClusterId",
    "ResourceType.$": "$.resourceType"
  },
  "ResultPath": "$.EMROutput",
  "Next": "Next Step"
}
```

Con la entrada dada, el uso de `ResultSelector` produce:

```
{
  "OtherDataFromInput": {},
  "EMROutput": {
      "ClusterId": "AKIAIOSFODNN7EXAMPLE",
      "ResourceType": "elasticmapreduce",
  }
}
```

### Aplanamiento de una matriz de matrices
<a name="flatten-array-of-arrays-result-selector"></a>

Si el estado [Estado Parallel de un flujo de trabajo](state-parallel.md) o [Estado del flujo de trabajo Map](state-map.md) de las máquinas de estado devuelve una matriz de matrices, puede transformarlas en una matriz plana con el campo [ResultSelector](#input-output-resultselector). Puede incluir este campo dentro de la definición de estados Parallel o Map para manipular el resultado de estos estados.

Para aplanar matrices, utilice la sintaxis: `[*]` en el campo `ResultSelector`, como se muestra en el siguiente ejemplo.

```
"ResultSelector": {
    "flattenArray.$": "$[*][*]"
  }
```

Para ver ejemplos que muestran cómo aplanar una matriz, consulte el *Paso 3* de los siguientes tutoriales:
+ [Procesamiento de datos de lotes con una función de Lambda en Step Functions](tutorial-itembatcher-param-task.md)
+ [Procesamiento de elementos individuales con una función de Lambda en Step Functions](tutorial-itembatcher-single-item-process.md)