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.
InputPath, Paramètres et ResultSelector
Les ResultSelector
champsInputPath
, 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 (voirChemins). Le champ Parameters
vous permet de transmettre un ensemble de paires clé-valeur, où les valeurs sont des valeurs statiques que vous définissez dans la définition de votre machine d'état, ou qui sont sélectionnées à partir 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.
Astuce
Utilisez le simulateur de flux de données de la console Step Functions
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é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 ]
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 chacun peuvent être des valeurs statiques que vous intégrez dans la définition de votre machine d'état ou que vous sélectionnez à partir de l'entrée 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"
}
},
En plus de l'entrée, vous pouvez accéder à un objet JSON spécial, connu sous le nom d'objet de contexte. L'objet de contexte comprend des informations sur l'exécution de votre machine d'état. veuillez consulter Objet Contexte.
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 paramètres d'API pertinents directement aux actions d'API 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 :
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 Utilisation de l'état de la carte en mode distribué.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 Utilisez les ARN d'Amazon S3 au lieu de transmettre des charges utiles importantes.
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 ResultPath
son application. 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 :
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 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": {
"ResourceType": "elasticmapreduce",
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
Aplatir un tableau de tableaux
Si l'Mapétat 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 cartographique pour manipuler le résultat de ces états.
Pour aplatir les tableaux, utilisez la syntaxe JMESpath [*]
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 :