Une étape de tâche appelle une fonction Function Compute et prend en charge les nouvelles tentatives, la capture d'erreurs ainsi que les mappages d'entrée et de sortie.
Attributs
Une étape de tâche appelle une fonction Function Compute.
Une étape de tâche contient les attributs suivants :
type: type d'étape. La valeurtaskindique qu'il s'agit d'une étape de tâche.name: nom de l'étape.resourceArn: identifiant de la ressource. Types pris en charge : fonctions, files d'attente MNS et flux Serverless workflow. Exemple :acs:fc:cn-shanghai:18807708****3420:services/fnf_test/functions/hello. Consultez Intégration des services.-
Facultatif :
pattern: mode d'exécution du service d'intégration. Valeur par défaut :requestResponse. Valeurs possibles :requestResponse: attend la fin de la tâche avant de poursuivre.sync: soumet la tâche de manière asynchrone et attend le résultat de l'exécution avant de poursuivre.waitForCallback: soumet la tâche de manière asynchrone et suspend l'étape jusqu'à la réception d'un rappel ou l'expiration du délai.
Facultatif :
timeoutSeconds: délai d'expiration de la tâche, en secondes. L'étape expire si l'exécution dépasse cette durée.Facultatif :
end: indique s'il faut passer aux étapes suivantes après la fin de cette étape.Facultatif :
inputMappings: mappages d'entrée. L'entrée de l'étape est transmise en tant qu'événement d'appel de fonction. Pour plus d'informations, consultez InvokeFunction.-
Facultatif :
outputMappings: mappages de sortie.$localcorrespond au résultat de l'appel de fonction et doit être au format JSON.RemarqueSi aucun mappage de sortie n'est spécifié,
$local
est la sortie par défaut de l'étape.
-
Facultatif :
errorMappings: mappages d'erreur. Valide uniquement lorsqu'une erreur se produit lors de l'exécution de l'étape et que le paramètrecatchest spécifié. Utilisez les valeurs$local.causeet$local.errorpour mapper les informations d'erreur vers la sortie de l'étape suivante.RemarqueLes valeurs
$local.error
et
$local.code
sont réservées au système. Le champ
source
dans errorMappings doit être défini sur ces deux valeurs.
. Le paramètre
errorMappings
est facultatif. S'il est omis, les informations d'erreur ne seront pas disponibles dans l'étape suivante.
-
retry: politiques de nouvelle tentative. Chaque politique possède les attributs suivants :errors: une ou plusieurs erreurs issues du tableau Définitions des erreurs.intervalSeconds: intervalle initial entre les nouvelles tentatives, en secondes. Maximum : 86 400. Par défaut : 1.maxIntervalSeconds: intervalle maximal entre les nouvelles tentatives. Maximum et valeur par défaut : 86 400 secondes.maxAttempts: nombre maximal de nouvelles tentatives. Par défaut : 3.multiplier: multiplicateur appliqué à chaque intervalle de nouvelle tentative successif. Par défaut : 2.
-
catch: politiques de capture d'erreurs. Chaque politique possède les attributs suivants :errors: une ou plusieurs erreurs issues du tableau des définitions d'erreurs.-
goto: nom de l'étape de destination.RemarqueL'étape de destination doit être parallèle à l'étape de tâche actuelle.
| État d'exécution de la fonction | Code d'état HTTP d'une réponse Function Compute | Réponse Function Compute | **Échec de l'étape Serverless workflow (for retry and catch)** | Retry |
| Non exécutée | 429 | ResourceExhausted |
FC.ResourceExhausted |
Oui |
| Non exécutée | 4xx sauf 429 | ServiceNotFound, FunctionNotFound ou InvalidArgument |
FC.ServiceNotFound, FC.FunctionNotFound ou FC.InvalidArgument |
Non |
| Incertain | 500 | InternalServerError |
FC.InternalServerError |
Oui |
| Non exécutée | 503 | ResourceThrottled |
FC.ResourceThrottled |
Oui |
| Exécution réussie, avec un code d'erreur renvoyé | 200 | Une erreur personnalisée, incluant errorType |
errorType |
Déterminé selon la logique métier |
| Échec de l'exécution, avec un code d'erreur renvoyé | 200 | Aucun errorType |
FC.Unknown |
Oui |
| Exécution réussie, avec un objet non JSON renvoyé | 200 | Aucun errorType |
FC.InvalidOutput |
Non |
Autres erreurs
:
FnF.ALL: correspond à toutes les erreurs pour les cas d'utilisation de nouvelle tentative ou de capture.
Exemples
-
Étapes de tâche simples
Le flux d'exemple suivant contient une étape de tâche.
Si l'entrée est
{"name": "function flow"}, la sortie est{"hello": "function flow"}.Si aucune entrée n'est fournie ou si l'entrée ne contient pas la clé
name, l'étape de tâche échoue et le flux échoue.
-
Définissez le flux.
version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/helloParamètres de
resourceArn
:
{region}: remplacez par la région réelle, telle quecn-shanghai.-
{accountID}: remplacez par votre ID de compte. Retrouvez votre ID de compte en cliquant sur l'image de profil sur la page Flows de la console Serverless Workflow.
-
Définissez la fonction.
import json class MyError(Exception): pass def handle(event, context): evt = json.loads(event) if "name" in evt: return { "hello": evt["name"] } else: raise MyError("My unhandled exception")
-
Nouvelle tentative
Cet exemple effectue une nouvelle tentative de tâche en cas d'erreur
MyError. Si aucune entrée n'est fournie ou si l'entrée ne contient pas la cléname, Serverless workflow relance la tâche conformément à la politique de nouvelle tentative.Attend 3 secondes après la première erreur, puis réessaie.
Attend 6 secondes (
intervalSeconds x multiplier) après la deuxième erreur, puis réessaie.Attend 12 secondes (
intervalSeconds x multiplier x multiplier) après la troisième erreur, puis réessaie.Si l'erreur persiste après trois nouvelles tentatives,
maxAttemptsest dépassé, l'étape de tâche échoue et le flux échoue.
version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello retry: - errors: - MyError intervalSeconds: 3 maxAttempts: 3 multiplier: 2 -
Capture d'erreurs
Cet exemple capture l'erreur
MyErroret passe à l'étapefinal. Comme l'erreur est capturée, le flux aboutit.version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello catch: - errors: - MyError goto: final - type: pass name: pass1 - type: pass name: final -
Capture d'erreurs avec mappages d'erreur spécifiés
Cet exemple capture l'erreur
MyErroret passe à l'étapefinal. Grâce aux mappages d'erreur spécifiés, l'étapefinalpeut accéder aux détails de l'erreur. Vous pouvez également utilisererrorMappingspour mapper les entrées de l'étape et les constantes vers les sorties.version: v1 type: flow steps: - type: task name: hello resourceArn: acs:fc:{region}:{accountID}:services/fnf_test/functions/hello errorMappings: - target: errMsg source: $local.cause # This value is reserved for the system and can be used directly when an error occurs in this step. - target: errCode source: $local.error # This value is reserved for the system and can be used directly when an error occurs in this step. catch: - errors: - MyError goto: final - type: pass name: pass1 - type: pass name: finalL'
eventde l'étape finale contient les élémentsEventDetailsuivants :"EventDetail": "{\"input\":{},\"local\":{\"errorCode\":\"MyError\",\"errorMsg\":\"some message\"}}",