J'ai l'état suivant défini dans ma machine d'état.
"iteration": {
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
}
Je m'attends à ce que la sortie de l'état soit:
"newFieldsResponse": {
"isSuccess": true,
"error": "",
"body": {
"count": 2,
"fields": [...]
}
},
"iteration": {
"totalCount": 5,
"currentCount": 0,
"step": 1
}
}
La propriété d'itération est ajoutée à l'entrée avec la propriété totalCount à définir pour le nombre d'éléments dans le tableau de champs.
Cependant, la sortie de la propriété "itération" est définie comme suit:
"loop":{
"Type": "Pass",
"Result":{
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
4 Réponses :
Il semble que cela ne soit pas possible. La solution de contournement que j'ai faite est d'utiliser la propriété "Paramètres". À partir de la documentation AWS: "Pour les paires clé-valeur où la valeur est sélectionnée à l'aide d'un chemin, le nom de la clé doit se terminer par *. $.".
Ainsi résolu ce qui précède par:
"iterateLoop":{
"Type":"Task",
"Resource": "arn:aws:lambda:....r",
"Parameters":{
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount.$": "$.iteration.currentCount",
"step.$": "$.iteration.step"
},
"ResultPath": "$.iteration",
"Next":"continueLoop"
},
"loop":{
"Type": "Pass",
"Result":{
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
totalCount, currentCount et step lisent tous la valeur en utilisant un chemin dans l'entrée d'état. La clé doit être ajoutée avec un ". $" À la fin.
Cela est possible via " Paramètres " dans passer l'état
{
"loop": {
"Type": "Pass",
"Parameters": {
"totalCount": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next": "iterateLoop"
}
}
"totalCount" doit être remplacé par "totalCount. $" pour moi
Moi aussi, je suis resté coincé là-dessus avant de le comprendre.
Les états de passage peuvent être utilisés, mais les réponses de @ankitkanojia et @shashi nécessitent une modification mineure.
Si vous souhaitez utiliser des chemins d'entrée, les clés des paramètres doivent se terminer par ". $" ("totalCount. $")
La spécification de l'état doit donc être la suivante:
"loop":{
"Type": "Pass",
"Result":{
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next":"iterateLoop"
},
Cela fonctionne dans une combinaison de deux des solutions présentées ici:
{
"loop": {
"Type": "Pass",
"parameters": {
"totalCount.$": "$.newFieldsResponse.body.count",
"currentCount": 0,
"step": 1
},
"ResultPath": "$.iteration",
"Next": "iterateLoop"
}
}