Tous les produits
Search
Centre de documentation

CloudFlow:Integrate CloudFlow with Function Compute

Dernière mise à jour :Aug 11, 2026

CloudFlow orchestre des workflows sans serveur sous forme de machines à états définies dans des langages de définition de flux (FDL). Pour appeler une fonction Function Compute depuis un workflow, ajoutez un état Task avec l'action FC:InvokeFunction. Le moteur de flux invoque la fonction, gère la réponse selon le mode d'intégration que vous choisissez, puis passe à l'état suivant.

Fonctionnement

Un flux CloudFlow enchaîne les états. Chaque état Task peut appeler un service Alibaba Cloud. Pour l'intégration avec Function Compute, le flux suit cette séquence :

  1. Un état Task déclenche l'action FC:InvokeFunction.

  2. Le moteur de flux appelle la fonction cible avec les paramètres que vous spécifiez (ARN, type d'invocation et charge utile).

  3. Selon le paramètre TaskMode, le flux attend soit la réponse de l'API, soit un rappel système, soit un rappel personnalisé envoyé par votre code.

  4. Le flux encapsule ou transmet la valeur de retour de la fonction, puis avance vers l'état suivant.

Concepts clés

Concept Description
État Task Un état qui exécute un travail en appelant un service externe.
FC:InvokeFunction L'identifiant d'action qui indique à CloudFlow d'appeler une fonction Function Compute.
TaskMode Contrôle la manière dont le flux gère la réponse : attente de la réponse API, attente d'un rappel système ou attente d'un rappel personnalisé.
resourceArn Le nom de ressource Alibaba Cloud (ARN) qui identifie de manière unique la fonction cible.
Expressions FDL Expressions intégrées ($Input, $Output, $Context) permettant d'accéder aux données au sein d'un flux.

Définir un état Task

Ajoutez un état Task à votre définition de flux. Définissez Action sur FC:InvokeFunction et fournissez les paramètres requis sous Parameters :

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of function invocation
States:
  - Name: an example of function invocation
    Type: Task
    TaskMode: RequestComplete
    Action: FC:InvokeFunction
    Parameters:
      resourceArn: xxx
      invocationType: xxx
      body: xxx
    End: true

Configurer les paramètres d'invocation

Trois paramètres contrôlent l'appel de la fonction :

Paramètre Obligatoire Type Description
resourceArn Oui String ARN qui identifie la fonction cible. Exemple : acs:fc:::services/myService1.LATEST/functions/myFunction1
invocationType Oui Sync ou Async Invocation synchrone ou asynchrone.
body Non Objet JSON ou chaîne (sérialisée en tableau d'octets avant d'être transmise à la fonction) Charge utile de l'événement transmise comme paramètre d'entrée de la fonction.
Remarque

Conformément à la spécification Spec, les noms des paramètres utilisent la notation camelCase et commencent par une lettre minuscule.

L'exemple suivant définit deux états : une invocation synchrone suivie d'une invocation asynchrone :

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of synchronous function invocation
States:
  - Name: an example of synchronous function invocation
    Type: Task
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
      invocationType: Sync
      body:
        testKey: the content of the testKey parameter in the event of the function
    Next: an example of asynchronous function invocation
  - Name: an example of asynchronous function invocation
    Type: Task
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
      invocationType: Async
      body:
        key1: value1
        key2: value2
    End: true

Choisir un mode d'intégration

L'attribut TaskMode contrôle la manière dont le flux gère l'appel API après l'invocation de la fonction. Trois modes sont disponibles :

Mode Types d'invocation pris en charge Cas d'utilisation
RequestComplete Sync, Async, Async task Le flux attend la réponse de l'API, puis poursuit son exécution.
WaitForSystemCallback Async, Async task uniquement À utiliser lorsque Function Compute envoie un rappel au niveau du système une fois la fonction terminée.
WaitForCustomCallback Async, Async task uniquement À utiliser lorsque votre propre code détermine le moment où le flux doit poursuivre son exécution.

RequestComplete

Le flux invoque la fonction et attend la réponse de l'API. Une fois que le système a répondu et renvoyé le résultat, le flux avance vers l'état suivant. Ce mode fonctionne avec les invocations synchrones, asynchrones et les tâches asynchrones.

Pour plus d'informations, consultez RequestComplete.

WaitForSystemCallback

Le flux envoie la requête d'invocation, puis attend que Function Compute envoie une notification de rappel système. Le flux n'avance qu'après réception de ce rappel. Ce mode fonctionne uniquement avec les invocations asynchrones et les tâches asynchrones.

Pour plus d'informations, consultez WaitForSystemCallback.

WaitForCustomCallback

Le flux invoque la fonction, puis se met en pause. Il n'avance que lorsque votre programme appelle l'API de rappel CloudFlow pour signaler le résultat de la tâche. Ce mode fonctionne uniquement avec les invocations asynchrones et les tâches asynchrones.

Pour utiliser ce mode, ajoutez un champ callbackToken au paramètre body et référencez l'expression $Context.Current.TaskToken. Ce jeton est l'identifiant que votre programme doit inclure lors du signalement du résultat de la tâche au flux.

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: invoke-with-callback
States:
  - Name: invoke-with-callback
    Type: Task
    Action: FC:InvokeFunction
    TaskMode: WaitForCustomCallback
    Parameters:
      resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
      invocationType: Async
      body:
        callbackToken.$: $Context.Current.TaskToken
        key1: value1
    End: true

Dans cet exemple, le flux transmet le jeton de tâche à la fonction via callbackToken. La fonction (ou un processus en aval) appelle l'API ReportTaskSucceeded ou ReportTaskFailed avec ce jeton pour notifier CloudFlow du résultat.

Pour plus d'informations, consultez WaitForCustomCallback.

Pour plus de détails sur les types d'invocation de fonction, consultez Invocations synchrones, Invocations asynchrones et Gestion des tâches asynchrones.

Construire des paramètres dynamiques

Dans la plupart des workflows, les entrées des fonctions dépendent du contexte du workflow ou de la sortie d'un état précédent plutôt que de valeurs statiques. Utilisez les expressions réservées $Context et $Input pour référencer des données dynamiques.

Ajoutez .$ à la fin d'un nom de paramètre pour indiquer que sa valeur est une expression FDL plutôt qu'une valeur littérale :

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: an example of function invocation
States:
  - Name: an example of function invocation
    Type: Task
    TaskMode: RequestComplete
    Action: FC:InvokeFunction
    Parameters:
      resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
      invocationType: Sync
      body:
        argument1.$: $Input.input.BucketName
        argument2.$: $Input.input.TaskId
    End: true

Dans cet exemple, argument1 reçoit la valeur de $Input.input.BucketName et argument2 reçoit $Input.input.TaskId au moment de l'exécution.

Gérer les résultats d'invocation

La manière dont le flux encapsule la valeur de retour de la fonction dépend du mode d'intégration.

Selon la définition de l'API InvokeFunction, si la valeur du paramètre de réponse Type de la fonction est Byte, le type de données réel est Byte. La valeur de retour de la fonction peut être une chaîne, un objet JSON, un tableau JSON ou un type de données de base.

Mode RequestComplete

Le flux encapsule la valeur de retour de la fonction dans un objet JSON avec un champ Body :

{
    "Body": "function invocation result"
}

Accédez à la valeur de retour avec $Output.Body dans les définitions d'états suivants. Si la valeur de retour est un objet JSON, désérialisez-la à l'aide de la fonction intégrée du workflow, puis accédez à ses membres comme à un objet JSON standard.

L'exemple suivant invoque une fonction, puis utilise un état Choice pour effectuer une branche conditionnelle basée sur une valeur issue de la sortie de la fonction :

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
Description: ' '
StartAt: Example 1 of function invocation
States:
  - Name: Example 1 of function invocation
    Type: Task
    TaskMode: RequestComplete
    Action: FC:InvokeFunction
    Parameters:
      resourceArn: acs:fc:::services/myService1.LATEST/functions/myFunction1
      invocationType: Sync
      body:
        argument1.$: $Input.Records
        argument2.$: $Input.BucketName
    Next: conditional statement
  - Type: Choice
    Name: conditional statement
    Branches:
      - Condition: $Input.ObjectSize >= $Input.Threshold
        Next: Example 2 of function invocation
    Default: No action is performed.
  - Type: Pass
    Name: No action is performed.
    End: true
  - Name: Example 2 of function invocation
    Type: Task
    TaskMode: RequestComplete
    Action: FC:InvokeFunction
    Parameters:
      resourceArn: acs:fc:::services/myService2.LATEST/functions/myFunction2
      invocationType: Sync
      body:
        argument1.$: $Input.BucketName
        argument2.$: $Input.TaskId
    End: true

Modes WaitForSystemCallback et WaitForCustomCallback

Dans ces modes, le système externe appelle l'API ReportTaskSucceeded ou ReportTaskFailed pour signaler le résultat. Le flux transmet le résultat tel quel, sans l'encapsuler. Par exemple, si la fonction renvoie {"message": "hello"}, le résultat dans le flux est :

{
    "message": "hello"
}

Accédez directement à la valeur de retour avec l'expression $Output.

Erreurs courantes

Code d'erreur Cause Action
FC.ResourceThrottled Les fonctions sont limitées car le nombre total d'invocations simultanées (via CloudFlow et toutes les autres sources d'invocation) dépasse la limite de concurrence. CloudFlow invoque Function Compute de manière synchrone lors de l'exécution des états Task. Demandez une augmentation de la limite de concurrence.
FC.ResourceExhausted Les fonctions sont limitées en raison de ressources insuffisantes. Contactez-nous.
FC.InternalServerError Une erreur système s'est produite dans Function Compute. Réexécutez le flux.
FC.AccessDenied Le compte Alibaba Cloud ne dispose pas des autorisations requises. Accordez les autorisations nécessaires et réessayez.
FC.InvalidArgument La valeur d'un paramètre n'est pas valide. Vérifiez les valeurs des paramètres par rapport à la spécification.
FC.EntityTooLarge La valeur d'un paramètre d'entrée dépasse la taille autorisée. Réduisez la taille de la charge utile d'entrée.

Pour les autres codes d'erreur Function Compute, consultez Codes d'erreur.