Manipulation des paramètres dans les flux de travail Step Functions - AWS Step Functions

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

Gestion de l'état et transformation des données

Step Functions a récemment ajouté des variables et JSONata permet de gérer l'état et de transformer les données.

Découvrez comment transmettre des données avec des variables et transformer des données avec JSONata.

Les ResultSelector champsInputPath, Parameters et permettent de le manipuler au JSON fur et à mesure de son évolution dans votre flux de travail. InputPathpeut limiter l'entrée transmise en filtrant la JSON notation à l'aide d'un chemin (voirUtiliser des JSONPath chemins). 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 Functions applique 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

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édentInputPath, ce qui suit est JSON celui qui est transmis en 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 ]

Paramètres

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

Paires clé-valeur

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" } },

Compte tenu de la saisie précédente et du Parameters champ, c'est celui-ci JSON qui est transmis.

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

Outre la saisie, vous pouvez accéder à un JSON objet 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 .

Ressources connectées

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 API paramètres pertinents directement aux API actions de ce service. Pour plus d’informations, consultez :

Amazon S3

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 :

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

ResultSelector

Utilisez le ResultSelector champ pour manipuler le résultat d'un état avant qu'ResultPathil 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.

ResultSelectorest un champ facultatif dans les états suivants :

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. ResultSelectorpeut sélectionner des parties du résultat et les fusionner avec l'entrée d'état avecResultPath. Dans cet exemple, nous voulons sélectionner uniquement le resourceType etClusterId, 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

Si l'État du flux de travail cartographiqueétat État du flux de travail parallèle ou de vos machines d'état renvoie un tableau de tableaux, vous pouvez les transformer en tableau plat avec le 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 :