A passagem de dados entre vários estados em um fluxo assemelha-se à passagem de dados em uma linguagem de programação funcional. Os estados no CloudFlow funcionam como funções na programação: aceitam entradas, retornam saídas e armazenam essas saídas no contexto. Este tópico descreve a visão geral e apresenta exemplos de uso da passagem de dados.
Visão geral
Combine e aninhe estados no CloudFlow. Os dados no ambiente de execução de um estado constituem o contexto e dividem-se nas seguintes categorias:
Dados do fluxo: incluem o nome e a região do fluxo, os nomes dos estados que o compõem e a função do Resource Access Management (RAM) usada para executá-lo.
Dados da execução: abrangem o nome e a entrada da execução, a entrada e a saída do estado atual, o token de callback, as informações de erro geradas durante a execução e o número de tentativas de tratamento de erros.
Acesso a dados
Use a expressão $Context fornecida pelo sistema para acessar dados relacionados a fluxos e execuções, sejam estáticos ou dinâmicos. O contexto contém o seguinte conteúdo:
{
"Execution": {
"Name": "String",
"Input": {},
"RoleArn": "String"
},
"Current": {
"Name": "String",
"Input": {},
"Output": {},
"Error": {
"Code": "String",
"Detail": "String"
},
"RetryCount": "Number",
"TaskToken": "String"
}
}
Utilize o contexto para construir dados nos seguintes cenários:
Construtores de entrada e de saída. Para mais informações, consulte Inputs and outputs.
Campo ItemsPath em estados Map. Exemplo:
$Context.Current.Input.Campo Condition em estados Choice. Exemplo:
$Context.Current.Input.Size>=1024.Identificação de informações para tratamento de erros. Exemplos:
$Context.Current.Error.Codee$Context.Current.Error.Detail.Passagem de tokens de callback de tarefa. Exemplo:
$Context.Current.TaskToken.
O CloudFlow oferece os atalhos comuns $Input e $Output. Use-os para acessar rapidamente a entrada e a saída do nó atual.
$Inputequivale a$Context.Current.Input.$Outputequivale a$Context.Current.Output.
Passagem de dados
Cada tipo de estado possui lógica distinta de entrada e saída. Se não houver definição de construtores de entrada e saída, os estados seguem a seguinte lógica:
Pass, Succeed, Fail e Wait: estes estados aceitam entradas e usam as entradas originais, sem processamento, como saídas.
Choice: este estado apenas aceita entradas e as repassa ao estado de destino, sem retornar saídas. Por exemplo, o estado Choice pode passar entradas para a ramificação Default ou para uma ramificação específica, a fim de verificar se as condições necessárias foram atendidas. Caso positivo, o estado Choice encaminha as entradas para o próximo estado.
Parallel: o sistema faz cópias profundas de uma entrada e as distribui simultaneamente para várias ramificações. As saídas deste estado seguem o formato Map[String]Any. A chave em Map[String]Any corresponde ao nome implícito Branch N de uma ramificação paralela, e o valor representa o resultado real do processamento da entrada nessa ramificação.
Map: o sistema verifica se uma entrada é um array ou Map[String]Any. Quando a entrada do estado Map não é um array e o parâmetro ItemsPath não especifica o conteúdo a ser iterado, o sistema obtém automaticamente os valores do estado Map como um array de iteração e itera sobre ele. Os elementos do array servem como entradas para o processador de iteração. As saídas do estado Map adotam o formato Map[String]Any, em que a chave é a string Items e o valor é um array composto por vários resultados de iteração.
Task: este estado recebe dados de entrada do estado anterior ou de uma fonte externa, executa lógica de negócio específica em um script de tarefa e usa a expressão
$Contextpara acessar e manipular dados. Em seguida, transmite o resultado da execução da tarefa como dados de saída para estados subsequentes ou o armazena em um sistema externo.
Exemplo
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
No exemplo anterior, o InputConstructor é usado em um estado Parallel chamado Step2 para construir um objeto JSON com a propriedade FieldA, cujo valor é 123. Por padrão, a entrada é transmitida para ParallelBranch #0 e ParallelBranch #1. Na ramificação ParallelBranch #0, por exemplo, a entrada chega ao estado Pass1. O código abaixo ilustra os dados de contexto do estado Pass1.
{
"Execution": {
"Name": "xxxx-xxxx-xxxx-xxxx",
"Input": {},
"RoleArn": "xxxx"
},
"Current": {
"Name": "Pass1",
"Input": {
"FieldA": 123
},
"Output": {
"FieldA": 123
},
"Error": null,
"RetryCount": 0
}
}