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