Um estado Task invoca uma operação de API de um serviço integrado como uma unidade de trabalho única dentro de um fluxo de trabalho. Utilize estados Task para chamar funções do Function Compute, APIs de serviços da Alibaba Cloud ou serviços de terceiros via HTTP/HTTPS.
Na Flow Definition Language (FDL), defina Type como Task para configurar um estado Task.
Tipos de serviço suportados
O estado Task pode chamar três categorias de serviços. Especifique o alvo no campo Action usando o formato <ServiceName>:<APIOperation>.
|
Categoria |
Formato da Action |
Descrição |
Exemplo |
|
Function Compute |
|
Invoca uma função do Function Compute de forma síncrona ou assíncrona |
|
|
API de serviço da Alibaba Cloud |
|
Chama qualquer operação da OpenAPI da Alibaba Cloud |
|
|
Endpoint HTTP de terceiros |
|
Envia uma solicitação HTTP/HTTPS para um serviço externo |
|
Modos de integração
O campo TaskMode controla como o CloudFlow interage com o serviço de destino:
|
Modo |
Comportamento |
Quando usar |
|
|
Aguarda o retorno da resposta do serviço e prossegue para o próximo estado. |
Chamadas síncronas padrão em que a resposta é imediata. |
|
|
Pausa o fluxo de trabalho até que um sistema externo envie um callback com o token da tarefa. |
Aprovações humanas, processos externos de longa duração ou qualquer cenário em que o fluxo deva aguardar um sinal externo. |
|
|
Pausa o fluxo de trabalho até que o serviço integrado envie um callback automático após a conclusão. |
Operações da Alibaba Cloud de longa duração que suportam notificações de conclusão no nível do sistema. |
Para obter mais detalhes, consulte Modos de integração de serviços.
Parâmetros
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
O nome do estado. |
|
Type |
string |
Sim |
O tipo do estado. Defina como |
|
Action |
string |
Sim |
O serviço e a operação a serem chamados. Formato: |
|
TaskMode |
enum |
Não |
O modo de integração: |
|
Parameters |
map[string]any |
Não |
Os parâmetros de entrada para a chamada de API. Os valores podem ser constantes ou expressões JSONPath. |
|
InputConstructor |
map[string]any |
Não |
Constrói a entrada da tarefa a partir da entrada do estado. Consulte Entradas e saídas. |
|
OutputConstructor |
map[string]any |
Não |
Constrói a saída do estado a partir do resultado da tarefa. Consulte Entradas e saídas. |
|
Timeout |
string |
Não |
O período de tempo limite em segundos. Valores válidos: 0 a 604800. |
|
Retry |
map[string]any |
Não |
A política de nova tentativa para erros. Consulte Tratamento de erros. |
|
Catch |
map[string]any |
Não |
A política de captura de erros. Consulte Tratamento de erros. |
|
Description |
string |
Não |
Uma descrição do estado. |
|
Next |
string |
Não |
O próximo estado a ser executado após a conclusão deste estado. Deixe em branco se |
|
End |
bool |
Não |
Indica se este estado é o estado terminal do escopo atual. |
Defina o tempo limite dinamicamente a partir da entrada de execução com uma expressão JSONPath:
Timeout.$: $Input.timeout
Exemplos
Invocar uma função do Function Compute
Este exemplo define dois estados Task que invocam uma função do Function Compute — um de forma síncrona e outro de forma assíncrona. Especifique a função e o tipo de invocação no campo Parameters. Para detalhes sobre os parâmetros, consulte Configurar parâmetros de invocação.
As funções podem ser invocadas no modo de integração otimizada ou por meio da OpenAPI da Alibaba Cloud.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of synchronous function invocation
States:
- Name: an example of synchronous function invocation
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::functions/myFunction1/LATEST
invocationType: Sync
body:
key: name
Next: an example of asynchronous function invocation
- Type: Task
Name: an example of asynchronous function invocation
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Async
resourceArn: acs:fc:{region}:{accountID}:functions/myFunction/LATEST
body:
key: name
Next: SucceededExit
- Type: Pass
Name: SucceededExit
End: true
Chamar uma API de serviço da Alibaba Cloud
Chame qualquer API de serviço da Alibaba Cloud definindo o campo Action com o nome do serviço e da operação. O exemplo a seguir chama ECS:DescribeInstances para listar instâncias ECS em uma VPC específica:
Type: StateMachine
SpecVersion: v1
Name: MyWorkflow
StartAt: DescribeInstances
States:
- Type: Task
Name: DescribeInstances
Action: ECS:DescribeInstances
TaskMode: RequestComplete
Parameters:
RegionId: cn-hangzhou
VpcId: vpc-bp11y195luy47h8****
VSwitchId: vsw-bp1wb297ekw7xyh****
End: true
Chamar um endpoint HTTP com tempo limite e tratamento de erros
Este exemplo envia uma solicitação HTTP POST e define um tempo limite dinâmico a partir da entrada de execução. Se a tarefa não for concluída dentro do período de tempo limite, o CloudFlow gera um erro FnF.TaskTimeout. A regra Catch captura esse erro e direciona o fluxo de trabalho para um estado de notificação.
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: SubmitTask
States:
- Type: Task
Name: SubmitTask
Action: HTTP:Request
TaskMode: RequestComplete
Timeout.$: $Input.timeout
Parameters:
method: POST
url: https://*****
body:
taskName: fly
headers:
Content-Type: multipart/form-data
Catch:
- Errors:
- FnF.TaskTimeout
Description: 'Error capture rule #1'
Next: NotifyOnTaskTimeout
OutputConstructor:
ErrorCode: TaskTimeout
ErrorMessage: Task timed out.
End: true
- Type: Task
Name: NotifyOnTaskTimeout
Action: HTTP:Request
TaskMode: RequestComplete
Parameters:
method: POST
url: https://******
body:
taskName: fly
errorCode.$: $Input.ErrorCode
errorMessage.$: $Input.ErrorMessage
headers:
Content-Type: multipart/form-data
End: true
A entrada de execução fornece o valor do tempo limite:
{
"timeout": 10
}
Caso a tarefa não seja concluída em 10 segundos, o erro FnF.TaskTimeout é capturado e o fluxo de trabalho transita para o estado NotifyOnTaskTimeout para enviar uma notificação de tempo limite.
