Un état de tâche exécute une opération d'API d'un service intégré en tant qu'unité de travail unique au sein d'un flux de travail. Utilisez les états de tâche pour appeler des fonctions Function Compute, des API de service Alibaba Cloud ou des services tiers via HTTP/HTTPS.
Dans le langage de définition de flux (FDL), définissez Type sur Task pour configurer un état de tâche.
Types de services pris en charge
Un état de tâche peut interagir avec trois catégories de services. Indiquez la cible dans le champ Action en utilisant le format <ServiceName>:<APIOperation>.
| Catégorie | Format d'action | Description | Exemple |
|---|---|---|---|
| Function Compute | FC:<APIOperation> |
Appelle une fonction Function Compute de manière synchrone ou asynchrone | FC:InvokeFunction |
| API de service Alibaba Cloud | <ServiceName>:<APIOperation> |
Appelle n'importe quelle opération OpenAPI Alibaba Cloud | ECS:DescribeInstances |
| Endpoint HTTP tiers | HTTP:Request |
Envoie une requête HTTP/HTTPS à un service externe | HTTP:Request |
Modes d'intégration
Le champ TaskMode contrôle la manière dont CloudFlow interagit avec le service cible :
| Mode | Comportement | Quand l'utiliser |
|---|---|---|
RequestComplete |
Attend la réponse du service, puis passe à l'état suivant. | Appels synchrones standards où la réponse est immédiate. |
WaitForCustomCallback |
Met en pause le flux de travail jusqu'à ce qu'un système externe envoie un rappel avec le jeton de tâche. | Approbations humaines, processus externes de longue durée ou tout scénario nécessitant l'attente d'un signal externe. |
WaitForSystemCallback |
Met en pause le flux de travail jusqu'à ce que le service intégré envoie automatiquement un rappel à la fin du traitement. | Opérations Alibaba Cloud de longue durée qui prennent en charge les notifications de fin au niveau du système. |
Pour plus de détails, consultez la rubrique Modes d'intégration de service.
Paramètres
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
| Name | string | Oui | Le nom de l'état. |
| Type | string | Oui | Le type d'état. Définissez-le sur Task. |
| Action | string | Oui | Le service et l'opération à appeler. Format : <ServiceName>:<APIOperation>. |
| TaskMode | enum | Non | Le mode d'intégration : RequestComplete, WaitForCustomCallback ou WaitForSystemCallback. |
| Parameters | map[string]any | Non | Les paramètres d'entrée pour l'appel d'API. Les valeurs peuvent être des constantes ou des expressions JSONPath. |
| InputConstructor | map[string]any | Non | Construit l'entrée de la tâche à partir de l'entrée de l'état. Consultez la section Entrées et sorties. |
| OutputConstructor | map[string]any | Non | Construit la sortie de l'état à partir du résultat de la tâche. Consultez la section Entrées et sorties. |
| Timeout | string | Non | La période de délai d'attente en secondes. Valeurs valides : 0 à 604800. 0 signifie aucun délai d'attente. Vous pouvez définir le délai d'attente dynamiquement à partir de l'entrée d'exécution avec une expression JSONPath (voir l'exemple ci-dessous). |
| Retry | map[string]any | Non | La politique de nouvelle tentative pour les erreurs. Consultez la section Gestion des erreurs. |
| Catch | map[string]any | Non | La politique de capture d'erreurs. Consultez la section Gestion des erreurs. |
| Description | string | Non | Une description de l'état. |
| Next | string | Non | L'état suivant à exécuter après la fin de cet état. Laissez vide si End est défini sur true. |
| End | bool | Non | Indique si cet état est l'état terminal de la portée actuelle. |
Définissez le délai d'attente dynamiquement à partir de l'entrée d'exécution avec une expression JSONPath :
Timeout.$: $Input.timeout
Exemples
Invoquer une fonction Function Compute
Cet exemple définit deux états de tâche qui appellent une fonction Function Compute, l'un de manière synchrone et l'autre de manière asynchrone. Spécifiez la fonction et le type d'invocation dans le champ Parameters. Pour plus de détails sur les paramètres, consultez la section Configurer les paramètres d'invocation.
Les fonctions peuvent être appelées en mode d'intégration optimisé ou via l'OpenAPI 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
Appeler une API de service Alibaba Cloud
Appelez n'importe quelle API de service Alibaba Cloud en définissant le champ Action sur le nom du service et de l'opération. L'exemple suivant appelle ECS:DescribeInstances pour répertorier les instances ECS dans un VPC spécifique :
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
Appeler un endpoint HTTP avec délai d'attente et gestion des erreurs
Cet exemple envoie une requête HTTP POST et définit un délai d'attente dynamique à partir de l'entrée d'exécution. Si la tâche ne se termine pas dans le délai imparti, CloudFlow génère une erreur FnF.TaskTimeout. La règle Catch capture cette erreur et redirige le flux de travail vers un état de notification.
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
L'entrée d'exécution fournit la valeur du délai d'attente :
{
"timeout": 10
}
Si la tâche ne se termine pas dans les 10 secondes, l'erreur FnF.TaskTimeout est capturée et le flux de travail passe à l'état NotifyOnTaskTimeout pour envoyer une notification de délai d'attente dépassé.
