web-dev-qa-db-fra.com

Fonction AWS étape - Ajout de la valeur dynamique au type d'état Pass

J'ai l'état suivant défini dans ma machine à états.

 "loop":{
      "Type": "Pass",
      "Result":{
        "totalCount": "$.newFieldsResponse.body.count",
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },

Je m'attends à ce que la production 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é totaleCount à définir sur le nombre d'articles dans les champs de champs.

Cependant, la sortie de la propriété "itération" est définie comme suit:

"iteration": {
      "totalCount": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    }

Il ressemble à la valeur "$ .newfieldesponse.body.compte" ne se résout pas de résolution et est sortie tel quel.

Y a-t-il quelque chose que je fais mal? Quelqu'un peut-il s'il vous plaît conseil sur la façon de le faire fonctionner?

6
Furqan Shaikh

On dirait que cela peut ne pas être possible. La solution que j'ai faite est d'utiliser la propriété "Paramètres". De la documentation AWS: "Pour les paires de clés à valeur de clé où la valeur est sélectionnée à l'aide d'un chemin, le nom de la touche doit se terminer en *. $.".

Donc résolvé ce qui précède par:

  1. Changer l'état de passe pour supprimer toute référence de valeur dynamique
"loop":{
      "Type": "Pass",
      "Result":{
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },
  1. création d'une propriété Paramètres où j'ai besoin des valeurs ci-dessous:
 "iterateLoop":{
      "Type":"Task",
      "Resource": "arn:aws:lambda:....r",
      "Parameters":{
        "totalCount.$": "$.newFieldsResponse.body.count",
        "currentCount.$": "$.iteration.currentCount",
        "step.$": "$.iteration.step"
      },
      "ResultPath": "$.iteration",
      "Next":"continueLoop"
    },

totalCount, couranteCount et étape Tous lisent la valeur de l'utilisation d'un chemin dans l'entrée d'état. La clé doit être annexée avec un "$" à la fin.

0
Furqan Shaikh

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

  1. Ajouter un paramètre dans l'étape de passage
  2. Ajouter *. $ Au nom du Var que vous voulez passer:
 {
  "loop": {
    "Type": "Pass",
    "parameters": {
      "totalCount.$": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    },
    "ResultPath": "$.iteration",
    "Next": "iterateLoop"
  }
 }
2
Rows Priego