Uma etapa foreach itera sobre um array de entrada e executa a mesma sequência de etapas em paralelo para cada elemento. Cada iteração mantém sua própria variável local, e um mapeamento de saída combina os resultados de todas as iterações na saída da etapa foreach.
Funcionamento da etapa foreach
A etapa foreach itera sobre um parâmetro de array de entrada e executa as etapas definidas no campo steps para cada elemento do array. Esse funcionamento assemelha-se ao foreach de linguagens de programação, mas com iterações em paralelo, não sequenciais.
Ao executar uma etapa foreach, ocorre a seguinte sequência:
A etapa foreach inicia uma iteração para cada elemento do array e as executa simultaneamente.
Cada iteração possui sua própria variável local. As etapas dentro de uma iteração modifique apenas a variável local dessa iteração específica.
Após a conclusão de todas as ramificações, as variáveis locais de todas as iterações formam a variável
$localda etapa foreach. Essa variável é um array em que cada elemento é um objeto JSON que registra o resultado de uma iteração.O mapeamento de saída da etapa foreach converte o array de variáveis locais das iterações na saída da etapa foreach.
Limites
Uma etapa foreach execute no máximo 100 iterações simultaneamente.
Propriedades
A etapa foreach oferece suporte às seguintes propriedades.
|
Propriedade |
Obrigatória |
Descrição |
|
|
Sim |
Tipo da etapa. Defina o valor como |
|
|
Sim |
Nome da etapa. |
|
|
Sim |
Mapeamento de iteração da etapa foreach. Os campos de |
|
|
Sim |
Etapas executadas em cada iteração. |
|
|
Não |
Especifique se a execução das etapas definidas após a etapa foreach deve continuar quando esta terminar. |
|
|
Não |
Mapeamento de entrada da etapa foreach. Caso uma etapa não defina um mapeamento de entrada, ela herdará a entrada de sua etapa pai ou do fluxo. |
|
|
Não |
Mapeamento de saída da etapa foreach. Se você não especificar um mapeamento de saída, a saída da etapa foreach estará vazia por padrão. |
A propriedade iterationMapping de uma etapa foreach contém os seguintes campos.
|
Campo |
Obrigatório |
Descrição |
|
|
Sim |
Especifique qual parâmetro na entrada será usado como coleção para o loop. |
|
|
Sim |
Especifique o nome sob o qual o elemento atual será mesclado na entrada da iteração. |
|
|
Não |
Especifique o nome sob o qual a posição atual será mesclada na entrada da iteração. |
Exemplo
A definição de fluxo a seguir contém uma etapa foreach chamada myforeach. Para cada elemento no array names, a etapa foreach execute uma etapa de tarefa chamada 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
Substitua {region} e {account} em resourceArn pelos seus próprios valores.
Fluxo de dados no exemplo
Os estágios a seguir mostram como os dados trafegam pela etapa myforeach e qual campo impulsiona cada transformação.
1. Entrada do fluxo. A etapa myforeach não define um mapeamento de entrada; portanto, a entrada de myforeach é igual à entrada do fluxo:
{
"names": ["a", "b", "c"]
}
2. Entrada da iteração. A etapa toUpperCase também não define um mapeamento de entrada, então herda a entrada de sua etapa pai. Sempre que uma iteração é executada, iterationMapping mescla o elemento atual nessa entrada como valor, usando name como chave. Assim, as três iterações recebem as seguintes entradas.
Entrada da iteração para a:
{
"name": "a",
"names":["a","b","c"]
}
Entrada da iteração para b:
{
"name": "b",
"names":["a","b","c"]
}
Entrada da iteração para c:
{
"name": "c",
"names":["a","b","c"]
}
3. Saída da iteração. toUpperCase é executado três vezes, uma vez por elemento, e retorna as seguintes saídas.
Saída da iteração para a:
{
"name": "A"
}
Saída da iteração para b:
{
"name": "B"
}
Saída da iteração para c:
{
"name": "C"
}
4. Variável local da etapa foreach. A variável local de myforeach é um array que armazena o resultado de cada iteração:
[
{
"name": "A"
},
{
"name": "B"
},
{
"name": "C"
}
]
5. Saída da etapa e saída do fluxo. A propriedade outputMappings de myforeach mapeia $local[*].name para names, o que gera a seguinte saída para a etapa. Como o fluxo não define um mapeamento de saída nem um mapeamento de resultado, essa saída também corresponde à saída final da execução do fluxo.
{
"names": ["A", "B", "C"]
}