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 paralelo do fluxo de trabalho
Gerenciar estados e transformar dados
Saiba mais sobre como transmitir dados entre estados com variáveis e transformar dados com JSONata.
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
StateseStartAt, cujos significados são exatamente iguais aos daqueles no nível superior de uma máquina de estado. Parameters(opcional, somente JSONPath)-
Usado para transmitir informações para as máquinas de estado definidas na matriz
Branches. Arguments(opcional, somente JSONata)-
Usado para passar informações para as ações de API de recursos conectados. Os valores podem incluir expressões JSONata. Para obter mais informações, consulte Transformando dados com Step JSONata Functions.
Output(opcional, somente JSONata)-
Usado para especificar e transformar a saída do estado. Quando especificado, o valor substitui o padrão de saída de estado.
O campo de saída aceita qualquer valor JSON (objeto, matriz, string, número, booleano, nulo). Qualquer valor de string, incluindo aqueles em objetos ou matrizes, será avaliado como JSONata se estiver entre caracteres {% %}.
A saída também aceita uma expressão JSONata direta, por exemplo: “Output”: “{% jsonata expression %}”
Para obter mais informações, consulte Transformando dados com Step JSONata Functions.
-
Assign(opcional) -
Usado para armazenar variáveis. O campo
Assignaceita um objeto JSON com pares de chave/valor que definem nomes de variáveis e seus valores atribuídos. Qualquer valor de string, incluindo aqueles em objetos ou matrizes, será avaliado como JSONata se estiver entre caracteres{% %}Para obter mais informações, consulte Transmitir dados entre estados com variáveis.
-
ResultPath(opcional, somente JSONPath) -
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, somente JSONPath) -
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áquina de estado usando repetição e captura.
-
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 estado Parallel faz com que o AWS Step Functions execute cada ramificação, começando com o estado denominado no campo StartAt dessa ramificação, o mais simultaneamente possível, e aguarde até que todas as ramificações encerrem (atinjam um estado final) antes de processar o campo Parallel do estado Next.
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:region:account-id:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:region:account-id: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:region:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:region: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,SendTaskSuccessouSendTaskFailurelançada um erro se o estado tiver falhado. 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
Waitpara que o trabalho de limpeza aconteça depois que a função do Lambda for concluída.