Estado do fluxo de trabalho paralelo - AWS Step Functions

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 e StartAt, 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.

Gráfico visual de um exemplo de fluxo de trabalho paralelo.

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 ou SendTaskFailure 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.