Os estados em um fluxo de trabalho do CloudFlow funcionam como funções: cada estado recebe uma entrada, processa os dados, gera uma saída e armazena o resultado no contexto. Os dados de tempo de execução disponíveis para cada estado constituem o contexto.
Como os dados fluem entre estados
Um fluxo de trabalho do CloudFlow transmite dados por uma cadeia de estados. Em cada etapa:
O estado atual recebe a entrada do estado anterior (ou da entrada da execução, no caso do primeiro estado).
O estado processa a entrada conforme seu tipo e configuração.
O estado gera uma saída e a encaminha ao próximo estado.
Personalize a forma como os dados entram e saem de cada estado definindo um InputConstructor ou OutputConstructor. Sem esses construtores, cada tipo de estado aplica seu comportamento padrão. Consulte Entradas e saídas para obter detalhes.
Duas categorias de dados estão disponíveis durante a execução:
|
Categoria |
Conteúdo |
|
Dados do fluxo |
Nome do fluxo, região, nomes dos estados e função do Resource Access Management (RAM) usada para executar o fluxo |
|
Dados da execução |
Nome e entrada da execução, entrada e saída do estado atual, token de callback, detalhes de erro e contagem de tentativas |
Acesse dados de tempo de execução com $Context
Use a expressão $Context para ler dados do fluxo e da execução em qualquer estado. A estrutura completa do contexto é:
{
"Execution": {
"Name": "String",
"Input": {},
"RoleArn": "String"
},
"Current": {
"Name": "String",
"Input": {},
"Output": {},
"Error": {
"Code": "String",
"Detail": "String"
},
"RetryCount": "Number",
"TaskToken": "String"
}
}
|
Campo |
Tipo |
Descrição |
|
|
String |
Nome exclusivo da execução atual |
|
|
Object |
Entrada fornecida no início da execução |
|
|
String |
ARN da função RAM usada para executar o fluxo |
|
|
String |
Nome do estado atual |
|
|
Object |
Entrada recebida pelo estado atual |
|
|
Object |
Saída gerada pelo estado atual |
|
|
String |
Código de erro, caso o estado tenha encontrado uma falha |
|
|
String |
Mensagem detalhada do erro |
|
|
Number |
Quantidade de tentativas de tratamento de erros |
|
|
String |
Token para callbacks de tarefas assíncronas |
Onde usar $Context
|
Caso de uso |
Exemplo |
|
Construtores de entrada e saída |
Consulte Entradas e saídas |
|
ItemsPath em estados Map |
|
|
Condição em estados Choice |
|
|
Tratamento de erros |
|
|
Tokens de callback de tarefa |
|
Atalhos: $Input e $Output
O CloudFlow oferece dois atalhos para os caminhos acessados com mais frequência:
|
Atalho |
Equivalente |
Quando usar |
|
|
|
Para ler os dados recebidos por um estado |
|
|
|
Para ler os dados gerados por um estado |
Nota:$Inpute$Outputreferem-se apenas ao estado atual . Para acessar a entrada original da execução a partir de qualquer estado, use$Context.Execution.Input.
Comportamento padrão de entrada/saída por tipo de estado
Na ausência de um InputConstructor ou OutputConstructor, cada tipo de estado trata os dados da seguinte maneira:
|
Tipo de estado |
Entrada padrão |
Saída padrão |
|
Recebe a entrada do estado anterior |
Encaminha a entrada como saída, sem alterações |
|
|
Recebe a entrada do estado anterior |
Repassa a entrada à ramificação correspondente (ou à ramificação Default). Não gera saída própria |
|
|
Copia profundamente a entrada e envia uma cópia a cada ramificação simultaneamente |
Um |
|
|
Itera sobre o array de entrada (ou, se a entrada for um |
Um |
|
|
Recebe entrada do estado anterior ou de uma fonte externa |
Resultado da execução da tarefa após executar a lógica de negócio e usar |
Exemplo: rastreamento de dados em um estado Parallel
Este exemplo demonstra como o InputConstructor molda os dados em um estado Parallel e como o contexto se apresenta em cada etapa da execução.
Definição do fluxo
Type: StateMachine
Name: DataTransferExample
SpecVersion: v1
StartAt: Step1
States:
- Type: Pass
Name: Step1
Next: Step2
- Type: Parallel
Name: Step2
InputConstructor:
FieldA: 123
Branches:
- StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true
- StartAt: Pass2
States:
- Type: Pass
Name: Pass2
End: true
Next: Step3
- Type: Pass
Name: Step3
End: true
Dados em cada etapa
O rastro a seguir mostra os dados à medida que percorrem o fluxo de trabalho. Considere que a execução começa com uma entrada vazia {}.
Etapa 1 -- Step1 (Pass)
|
Campo |
Valor |
Motivo |
|
|
|
Recebe diretamente a entrada da execução |
|
|
|
Estados Pass encaminham a entrada sem modificações |
O Step1 passa {} para o Step2.
Etapa 2 -- Step2 (Parallel) com InputConstructor
|
Campo |
Valor |
Motivo |
|
Entrada do Step1 |
|
Saída do estado anterior |
|
Após InputConstructor |
|
O InputConstructor substitui a entrada original por um novo objeto JSON |
O objeto construído {"FieldA": 123} é copiado profundamente e enviado a ambas as ramificações simultaneamente.
Etapa 3 -- Pass1 e Pass2 (dentro das ramificações do Parallel)
Cada ramificação recebe {"FieldA": 123} como entrada. Como ambos são estados Pass, cada um encaminha sua entrada inalterada como saída.
O contexto dentro do Pass1 durante a execução:
{
"Execution": {
"Name": "xxxx-xxxx-xxxx-xxxx",
"Input": {},
"RoleArn": "xxxx"
},
"Current": {
"Name": "Pass1",
"Input": {
"FieldA": 123
},
"Output": {
"FieldA": 123
},
"Error": null,
"RetryCount": 0
}
}
Observações:
Current.InputeCurrent.Outputcontêm{"FieldA": 123}porque estados Pass repassam a entrada como saída.Execution.Inputpermanece como{}(a entrada original da execução), sem ser afetado pelo InputConstructor.ErrorénulleRetryCounté0pois não ocorreram erros.
Etapa 4 -- Step2 coleta resultados, Step3 (Pass) os recebe
O Step2 reúne as saídas das ramificações em um resultado Map[String]Any. Cada resultado de ramificação usa um nome implícito (Branch N) como sua entrada no mapa. O Step3 recebe esse resultado combinado e o encaminha sem alterações.