Une étape foreach parcourt un tableau présent dans son entrée et exécute la même séquence d'étapes en parallèle pour chaque élément du tableau. Chaque itération conserve sa propre variable locale, et un mappage de sortie combine les résultats de toutes les itérations pour former la sortie de l'étape foreach.
Fonctionnement d'une étape foreach
Une étape foreach parcourt un paramètre de tableau d'entrée et exécute les étapes définies dans son champ steps pour chaque élément du tableau. Une étape foreach fonctionne comme l'instruction foreach d'un langage de programmation, à la différence près que les itérations s'exécutent en parallèle plutôt que séquentiellement.
Lorsqu'une étape foreach s'exécute, la séquence suivante se produit :
L'étape foreach lance une itération pour chaque élément du tableau et exécute ces itérations simultanément.
Chaque itération dispose de sa propre variable locale. Les étapes d'une itération modifient uniquement la variable locale de cette itération.
Une fois toutes les branches terminées, les variables locales de toutes les itérations constituent la variable
$localde l'étape foreach. Cette variable est un tableau dont chaque élément est un objet JSON enregistrant le résultat d'une itération.Le mappage de sortie de l'étape foreach convertit le tableau des variables locales des itérations en la sortie de l'étape foreach.
Limites
Une étape foreach exécute au maximum 100 itérations simultanément.
Propriétés
Une étape foreach prend en charge les propriétés suivantes.
| Propriété | Obligatoire | Description |
type |
Oui | Le type de l'étape. Définissez la valeur sur foreach. |
name |
Oui | Le nom de l'étape. |
iterationMapping |
Oui | Le mappage d'itération de l'étape foreach. Les champs de iterationMapping sont décrits dans le tableau suivant. |
steps |
Oui | Les étapes qui s'exécutent lors de chaque itération. |
end |
Non | Indique s'il faut continuer à exécuter les étapes définies après l'étape foreach lorsque celle-ci se termine. |
inputMappings |
Non | Le mappage d'entrée de l'étape foreach. Si une étape ne définit pas de mappage d'entrée, elle hérite de l'entrée de son étape parente ou du flux. |
outputMappings |
Non | Le mappage de sortie de l'étape foreach. Si vous ne spécifiez pas de mappage de sortie, la sortie de l'étape foreach est vide par défaut. |
La propriété iterationMapping d'une étape foreach contient les champs suivants.
| Champ | Obligatoire | Description |
collection |
Oui | Spécifie quel paramètre de l'entrée est utilisé comme collection pour la boucle. |
item |
Oui | Spécifie le nom sous lequel l'élément actuel est fusionné dans l'entrée de l'itération. |
index |
Non | Spécifie le nom sous lequel la position actuelle est fusionnée dans l'entrée de l'itération. |
Exemple
La définition de flux suivante contient une étape foreach nommée myforeach. Pour chaque élément du tableau names, l'étape foreach exécute une étape de tâche nommée toUpperCase.
version: v1
type: flow
steps:
- type: foreach
name: myforeach
iterationMapping:
collection: $.names
item: name
steps:
- type: task
name: toUpperCase
resourceArn: acs:fc:{region}:{account}:services/fnf_test/functions/toUpperCase
outputMappings:
- target: names
source: $local[*].name
Remplacez {region} et {account} dans resourceArn par vos propres valeurs.
Flux de données dans l'exemple
Les étapes suivantes illustrent la circulation des données à travers l'étape myforeach et le champ qui pilote chaque transformation.
1. Entrée du flux. L'étape myforeach ne définit pas de mappage d'entrée, donc l'entrée de myforeach est identique à l'entrée du flux :
{
"names": ["a", "b", "c"]
}
2. Entrée de l'itération. L'étape toUpperCase ne définit pas non plus de mappage d'entrée, elle hérite donc de l'entrée de son étape parente. À chaque exécution d'une itération, iterationMapping fusionne l'élément actuel dans cette entrée en tant que valeur, avec name comme clé. Les trois itérations reçoivent ainsi les entrées suivantes.
Entrée de l'itération pour a :
{
"name": "a",
"names":["a","b","c"]
}
Entrée de l'itération pour b :
{
"name": "b",
"names":["a","b","c"]
}
Entrée de l'itération pour c :
{
"name": "c",
"names":["a","b","c"]
}
3. Sortie de l'itération. toUpperCase s'exécute trois fois, une fois par élément, et renvoie les sorties suivantes.
Sortie de l'itération pour a :
{
"name": "A"
}
Sortie de l'itération pour b :
{
"name": "B"
}
Sortie de l'itération pour c :
{
"name": "C"
}
4. Variable locale de l'étape foreach. La variable locale de myforeach est un tableau qui contient le résultat de chaque itération :
[
{
"name": "A"
},
{
"name": "B"
},
{
"name": "C"
}
]
5. Sortie de l'étape et sortie du flux. La propriété outputMappings de myforeach mappe $local[*].name vers names, ce qui produit la sortie suivante pour l'étape. Comme le flux ne définit ni mappage de sortie ni mappage de résultat, cette sortie constitue également la sortie de l'exécution finale du flux.
{
"names": ["A", "B", "C"]
}