

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Manipulation des paramètres dans les flux de travail Step Functions
<a name="input-output-inputpath-params"></a>

**Gestion de l'état et transformation des données**  
Découvrez comment [transmettre des données entre états avec des variables](workflow-variables.md) et [transformer des données avec JSONata](transforming-data.md).

Les `ResultSelector` champs`InputPath`, `Parameters` et permettent de manipuler le JSON au fur et à mesure qu'il se déplace dans votre flux de travail. `InputPath`peut limiter l'entrée transmise en filtrant la notation JSON à l'aide d'un chemin (voir[Utiliser des JSONPath chemins](amazon-states-language-paths.md)). Avec le `Parameters` champ, vous pouvez transmettre une collection de paires clé-valeur, en utilisant soit des valeurs statiques, soit des sélections provenant de l'entrée à l'aide d'un chemin.

 Le `ResultSelector` champ permet de manipuler le résultat de l'état avant `ResultPath` son application. 

AWS Step Functionsapplique d'abord `InputPath` le champ, puis le `Parameters` champ. Vous pouvez d'abord filtrer vos données d'entrée brutes que vous souhaitez à l'aide de `InputPath`, puis appliquer `Parameters` pour manipuler davantage cette entrée, ou pour ajouter de nouvelles valeurs. Vous pouvez ensuite utiliser le `ResultSelector` champ pour manipuler la sortie de l'état avant `ResultPath` son application.

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

Utilisez `InputPath` pour sélectionner une partie de l'entrée de l'état. 

Par exemple, si l'entrée de votre état comprend les éléments suivants :

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

Vous pouvez appliquer le `InputPath`.

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

Avec le précédent `InputPath`, ce qui suit est le JSON transmis en tant qu'entrée.

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

**Note**  
Un chemin peut produire une sélection de valeurs. Prenez l’exemple de code suivant.  

```
{ "a": [1, 2, 3, 4] }
```
Si vous appliquez le chemin `$.a[0:2]`, le résultat est le suivant :  

```
[ 1, 2 ]
```

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

Cette section décrit les différentes manières d'utiliser le champ Paramètres. 

### Paires clé-valeur
<a name="input-output-parameters-keyvalue"></a>

Utilisez le `Parameters` champ pour créer une collection de paires clé-valeur qui sont transmises en entrée. Les valeurs de chacune peuvent être soit des valeurs statiques que vous incluez dans la définition de votre machine à états, soit sélectionnées dans l'entrée ou dans l'objet Context avec un chemin. Pour les paires clé-valeur dans lesquelles la valeur est sélectionnée à l'aide d'un chemin, le nom de clé doit se terminer par `.$`. 

Par exemple, supposons que vous fournissiez les entrées suivantes. 

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

Pour sélectionner certaines informations, vous pouvez spécifier ces paramètres dans la définition de votre machine d'état. 

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

Soit les entrées précédentes et le champ `Parameters`, il s'agit du JSON qui est transmis.

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

Outre l'entrée, vous pouvez accéder à un objet JSON spécial, appelé objet Context. L'objet Context inclut des informations sur l'exécution de votre machine à états. Consultez [Accès aux données d'exécution depuis l'objet Context dans Step Functions](input-output-contextobject.md).

### Ressources connectées
<a name="input-output-parameters-connected"></a>

Le champ `Parameters` peut également transmettre des informations aux ressources connectées. Par exemple, si l'état de votre tâche orchestre une AWS Batch tâche, vous pouvez transmettre les paramètres d'API pertinents directement aux actions d'API de ce service. Pour en savoir plus, consultez :
+ [Transmission de paramètres à une API de service dans Step Functions](connect-parameters.md)
+ [Intégration des services ](integrate-services.md)

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

Si les données de la fonction Lambda que vous transmettez entre les états peuvent atteindre plus de 262 144 octets, nous vous recommandons d'utiliser Amazon S3 pour stocker les données et d'implémenter l'une des méthodes suivantes :
+ Utilisez l'*état de la carte distribuée* dans votre flux de travail afin que l'`Map`état puisse lire les entrées directement depuis les sources de données Amazon S3. Pour de plus amples informations, veuillez consulter [Mode distribué](state-map-distributed.md).
+ Analysez le nom Amazon Resource (ARN) du bucket dans le `Payload` paramètre pour obtenir le nom du bucket et la valeur clé. Pour de plus amples informations, veuillez consulter [Utiliser Amazon S3 ARNs au lieu de transmettre des charges utiles importantes dans Step Functions](sfn-best-practices.md#avoid-exec-failures).

Vous pouvez également ajuster votre implémentation pour transmettre des charges utiles plus faibles lors de vos exécutions.

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

 Utilisez le `ResultSelector` champ pour manipuler le résultat d'un état avant qu'`ResultPath`il ne soit appliqué. Le `ResultSelector` champ vous permet de créer une collection de paires clé-valeur, dont les valeurs sont statiques ou sélectionnées à partir du résultat de l'état. À l'aide du `ResultSelector` champ, vous pouvez choisir les parties du résultat d'un état que vous souhaitez transmettre au `ResultPath` champ.

**Note**  
Avec le `ResultPath` champ, vous pouvez ajouter la sortie du `ResultSelector` champ à l'entrée d'origine.

`ResultSelector`est un champ facultatif dans les états suivants :
+ [État du flux de travail cartographique](state-map.md)
+ [État du flux de travail des tâches](state-task.md)
+ [État du flux de travail parallèle](state-parallel.md)

Par exemple, les intégrations du service Step Functions renvoient des métadonnées en plus de la charge utile contenue dans le résultat. `ResultSelector`peut sélectionner des parties du résultat et les fusionner avec l'entrée d'état avec`ResultPath`. Dans cet exemple, nous voulons sélectionner uniquement le `resourceType` et`ClusterId`, puis le fusionner avec l'entrée d'état d'un Amazon EMR CreateCluster.sync. Compte tenu de ce qui suit :

```
{
  "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"
  }
}
```

Vous pouvez ensuite sélectionner `resourceType` et `ClusterId` en utilisant `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"
}
```

Avec l'entrée donnée, l'utilisation `ResultSelector` produit :

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

### Aplatir un tableau de tableaux
<a name="flatten-array-of-arrays-result-selector"></a>

Si l'[État du flux de travail cartographique](state-map.md)état [État du flux de travail parallèle](state-parallel.md) ou de vos machines d'état renvoie un tableau de tableaux, vous pouvez les transformer en tableau plat avec le [ResultSelector](#input-output-resultselector) champ. Vous pouvez inclure ce champ dans la définition de l'état parallèle ou de l'état cartographique pour manipuler le résultat de ces états.

Pour aplatir les tableaux, utilisez la syntaxe : `[*]` dans le `ResultSelector` champ, comme indiqué dans l'exemple suivant.

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

Pour des exemples illustrant comment aplatir un tableau, reportez-vous à l'*étape 3* des didacticiels suivants :
+ [Traitement de données par lots avec une fonction Lambda dans Step Functions](tutorial-itembatcher-param-task.md)
+ [Traitement d'éléments individuels avec une fonction Lambda dans Step Functions](tutorial-itembatcher-single-item-process.md)