As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Estado do fluxo de trabalho paralelo
O estado Parallel
("Type": "Parallel"
) pode ser usado para adicionar ramificações separadas de execução em sua máquina de estado.
Além dos campos de estado comuns, os estados Parallel
incluem os campos adicionais a seguir.
-
Branches
(obrigatório) -
Um conjunto de objetos que especificam máquinas de estado para execução em paralelo. Cada um desses objetos de máquinas de estado deve ter campos denominados
States
eStartAt
, cujos significados são exatamente iguais aos daqueles no nível superior de uma máquina de estado. -
ResultPath
(opcional) -
Especifica onde colocar (na entrada) a saída das ramificações. A entrada é então filtrada conforme especificado pelo campo
OutputPath
(se houver) antes de ser usada como a saída do estado. Para obter mais informações, consulte Processamento de entrada e saída. -
ResultSelector
(opcional) -
Transmitir um conjunto de pares de valores-chave, em que os valores são estáticos ou selecionados a partir do resultado. Para obter mais informações, consulte ResultSelector.
-
Retry
(opcional) -
Uma matriz de objetos, chamada retriers, que define uma política de novas tentativas caso o estado encontre erros de tempo de execução. Para obter mais informações, consulte Exemplos de máquinas de estado usando Retry e usando Catch.
-
Catch
(opcional) -
Uma matriz de objetos, chamados Catchers, que definem um estado de fallback que é executado caso o estado encontre erros de tempo de execução e sua política de novas tentativas esteja esgotada ou não tenha sido definida. Para obter mais informações, consulte Estados de fallback.
Um Parallel
estado faz AWS Step Functions com que cada ramificação seja executada, começando com o estado nomeado no StartAt
campo dessa ramificação, da forma mais simultânea possível, e espere até que todas as ramificações terminem (atinjam um estado terminal) antes de processar o campo do Parallel
Next
estado.
Exemplo de estado Parallel
{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } } }
Neste exemplo, as ramificações LookupAddress
e LookupPhone
são executadas em paralelo. Veja como fica o fluxo de trabalho visual no console do Step Functions.
Toda ramificação deve ser independente. Um estado em uma ramificação de estado Parallel
não deve ter um campo Next
direcionado a um campo fora da ramificação e qualquer outro estado fora da ramificação não pode mudar para essa ramificação.
Processamento de entrada e saída do estado Parallel
O estado Parallel
fornece a cada ramificação uma cópia de seus próprios dados de entrada (que podem ser modificados pelo campo InputPath
). Ele gera uma saída que é uma matriz com um elemento para cada ramificação, contendo a saída dessa ramificação. Não há necessidade de que todos os elementos sejam do mesmo tipo. A matriz de saída pode ser inserida nos dados de entrada (e o todo enviado como a saída do estado Parallel
) usando um campo ResultPath
normalmente (consulte Processamento de entrada e saída).
{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Subtract", "End": true } } } ] } } }
Se for atribuído o estado FunWithMath
à matriz [3, 2]
como entrada, os estados Add
e Subtract
receberão essa matriz como entrada. A saída das tarefas Add
e Subtract
seria a soma e a diferença entre os elementos 3 e 2 da matriz, que é 5
e 1
, enquanto a saída do estado Parallel
seria uma matriz.
[ 5, 1 ]
dica
Se o estado Paralelo ou Mapa usado nas máquinas de estado retornar uma matriz de matrizes, você poderá transformá-las em uma matriz nivelada com o campo ResultSelector. Para obter mais informações, consulte Nivelamento de uma matriz de matrizes.
Como tratar erros
Quando alguma ramificação falha, devido a um erro não tratado ou com a transição para um estado Fail
, considera-se que todo o estado Parallel
falhou e todas as suas ramificações estão interrompidas. Se o erro não for tratado pelo estado Parallel
em si, o Step Functions interromperá a execução com um erro.
nota
Quando um estado paralelo falha, as funções do Lambda invocadas continuam a ser executadas e os operadores de atividades que processam um token da tarefa não são interrompidos.
-
Para interromper atividades de longa execução, use pulsações para detectar se a respectiva ramificação foi interrompida pelo Step Functions e interrompa os operadores que estiverem processando tarefas. Chamar
SendTaskHeartbeat
,SendTaskSuccess
ouSendTaskFailure
lançará um erro se o estado falhou. Consulte Erros de pulsação. -
Funções do Lambda em execução não podem ser interrompidas. Se você tiver implementado um fallback, use um estado
Wait
para que o trabalho de limpeza aconteça depois que a função do Lambda for concluída.