Un estado Task invoca una operación de API de un servicio integrado como una unidad de trabajo individual dentro de un flujo de trabajo. Use los estados Task para ejecutar funciones de Function Compute, llamar a API de servicios de Alibaba Cloud o interactuar con servicios de terceros mediante HTTP/HTTPS.
En Flow Definition Language (FDL), establezca Type en Task para definir un estado Task.
Tipos de servicio compatibles
Un estado Task puede invocar tres categorías de servicios. Especifique el destino en el campo Action con el formato <ServiceName>:<APIOperation>.
|
Categoría |
Formato de Action |
Descripción |
Ejemplo |
|
Function Compute |
|
Ejecuta una función de Function Compute de forma síncrona o asíncrona |
|
|
API de servicio de Alibaba Cloud |
|
Llama a cualquier operación de openapi de Alibaba Cloud |
|
|
Endpoint HTTP de terceros |
|
Envía una solicitud HTTP/HTTPS a un servicio externo |
|
Modos de integración
El campo TaskMode controla cómo interactúa CloudFlow con el servicio de destino:
|
Modo |
Comportamiento |
Cuándo usarlo |
|
|
Espera a que el servicio devuelva una respuesta y luego continúa con el siguiente estado. |
Llamadas síncronas estándar donde la respuesta es inmediata. |
|
|
Pausa el flujo de trabajo hasta que un sistema externo envía una devolución de llamada con el token de la tarea. |
Aprobaciones manuales, procesos externos de larga duración o cualquier escenario donde el flujo de trabajo deba esperar una señal externa. |
|
|
Pausa el flujo de trabajo hasta que el servicio integrado envía automáticamente una devolución de llamada al finalizar. |
Operaciones de Alibaba Cloud de larga duración que admiten notificaciones de finalización a nivel del sistema. |
Para obtener más detalles, consulte Service integration modes.
Parámetros
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
|
Name |
string |
Sí |
El nombre del estado. |
|
Type |
string |
Sí |
El tipo de estado. Establézcalo en |
|
Action |
string |
Sí |
El servicio y la operación por invocar. Formato: |
|
TaskMode |
enum |
No |
El modo de integración: |
|
Parameters |
map[string]any |
No |
Los parámetros de entrada para la llamada a la API. Los valores pueden ser constantes o expresiones JSONPath. |
|
InputConstructor |
map[string]any |
No |
Construye la entrada de la tarea a partir de la entrada del estado. Consulte Inputs and outputs. |
|
OutputConstructor |
map[string]any |
No |
Construye la salida del estado a partir del resultado de la tarea. Consulte Inputs and outputs. |
|
Timeout |
string |
No |
El periodo de tiempo de espera en segundos. Valores válidos: 0 a 604800. |
|
Retry |
map[string]any |
No |
La directiva de reintentos para errores. Consulte Error handling. |
|
Catch |
map[string]any |
No |
La directiva de captura de errores. Consulte Error handling. |
|
Description |
string |
No |
Una descripción del estado. |
|
Next |
string |
No |
El siguiente estado por ejecutar después de que este estado finalice. Déjelo en blanco si |
|
End |
bool |
No |
Indica si este estado es el estado terminal del ámbito actual. |
Configure el tiempo de espera dinámicamente desde la entrada de ejecución con una expresión JSONPath:
Timeout.$: $Input.timeout
Ejemplos
Ejecutar una función de Function Compute
Este ejemplo define dos estados Task que ejecutan una función de Function Compute: uno de forma síncrona y otro de forma asíncrona. Especifique la función y el tipo de invocación en el campo Parameters. Para obtener detalles sobre los parámetros, consulte Configure invocation parameters.
Las funciones se pueden ejecutar en modo de integración optimizada o a través de openapi de 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
Llamar a una API de servicio de Alibaba Cloud
Llame a cualquier API de servicio de Alibaba Cloud al establecer el campo Action con el nombre del servicio y la operación. El siguiente ejemplo llama a ECS:DescribeInstances para listar instancias de ECS en una 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
Llamar a un endpoint HTTP con tiempo de espera y manejo de errores
Este ejemplo envía una solicitud HTTP POST y configura un tiempo de espera dinámico desde la entrada de ejecución. Si la tarea no finaliza dentro del periodo de tiempo de espera, CloudFlow genera un error FnF.TaskTimeout. La regla Catch captura este error y redirige el flujo de trabajo a un estado de notificación.
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
La entrada de ejecución proporciona el valor del tiempo de espera:
{
"timeout": 10
}
Si la tarea no finaliza en 10 segundos, se captura el error FnF.TaskTimeout y el flujo de trabajo pasa al estado NotifyOnTaskTimeout para enviar una notificación de tiempo de espera agotado.
