5
votes

AWS Step Function - Ajout d'une valeur dynamique au type d'état de passage

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


0 commentaires

4 Réponses :


0
votes

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:

  1. Modification de l'état de réussite pour supprimer toute référence de valeur dynamique
 "iterateLoop":{
      "Type":"Task",
      "Resource": "arn:aws:lambda:....r",
      "Parameters":{
        "totalCount.$": "$.newFieldsResponse.body.count",
        "currentCount.$": "$.iteration.currentCount",
        "step.$": "$.iteration.step"
      },
      "ResultPath": "$.iteration",
      "Next":"continueLoop"
    },
  1. création d'une propriété Parameters où j'ai besoin des valeurs comme ci-dessous:
"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.



5
votes

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


1 commentaires

"totalCount" doit être remplacé par "totalCount. $" pour moi



1
votes

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


0 commentaires

2
votes

Cela fonctionne dans une combinaison de deux des solutions présentées ici:

  1. Ajouter un paramètre à l'étape de réussite
  2. Ajoutez *. $ au nom de la var que vous voulez passer:
 {
  "loop": {
    "Type": "Pass",
    "parameters": {
      "totalCount.$": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    },
    "ResultPath": "$.iteration",
    "Next": "iterateLoop"
  }
 }


0 commentaires