Vous pouvez récupérer l'historique d'une exécution de workflow spécifiée sous forme de liste d'entrées d'étapes. Chaque entrée d'étape fournit des informations qui peuvent vous aider à analyser, déboguer ou optimiser un workflow. Par exemple, vous pouvez confirmer les étapes réellement exécutées, et vous pouvez déterminer la durée et la réussite d'une étape. Cela peut s'avérer particulièrement utile lors du débogage d'un workflow non linéaire volumineux ou complexe (avec de nombreuses branches parallèles, par exemple).
Une entrée d'étape représente une étape réelle dans le code source (par exemple, assign
ou call
) ou un bloc d'instructions (par exemple, une boucle for
ou un bloc try/retry/except
). Pour obtenir la liste complète des types d'étapes, consultez la section StepType.
Comment récupérer les entrées d'étape
Vous pouvez récupérer les entrées d'étape en envoyant une requête à l'API REST Workflow Executions ou via la console Google Cloud:
Console Google Cloud : dans ce document, consultez la section Afficher les entrées d'étape dans la console.
En plus de lister les entrées d'étape et leurs détails, la console fournit une représentation graphique des étapes d'exécution, ce qui facilite l'affichage et l'analyse du chemin d'exécution d'un workflow.
API REST Workflow Executions : dans ce document, consultez les sections Récupérer une entrée d'étape et Répertorier les entrées d'étape.
Informations sur l'entrée de l'étape
Une entrée d'étape comprend les informations suivantes : Pour en savoir plus, consultez la section Exemples de ce document.
Nom | Nom de ressource complet de l'entrée d'étape, qui est un ID unique au format suivant, où STEPENTRY_ID est un compteur croissant:
|
Créer et mettre à jour des horaires | Codes temporels de la date et de l'heure de création de l'entrée d'étape et de sa dernière mise à jour. Si une entrée d'étape est terminée, updateTime indique l'heure de fin.
|
Noms de la routine et des étapes | Noms de la routine et de l'étape auxquelles l'entrée d'étape appartient. Un nom de routine est le nom du sous-workflow défini dans le code source YAML ou JSON. Le nom de la routine de niveau supérieur est main .
|
État et type de progression | État de l'entrée d'étape (par exemple, si l'entrée a réussi ou échoué, ou si une entrée d'étape est en cours et type de progression). Pour obtenir la liste complète des états et des types de progression, consultez les sections État et ProgressType. |
Informations de navigation | Position de l'entrée d'étape afin que vous puissiez mieux comprendre la hiérarchie et le flux du workflow (par exemple, quelles entrées d'étapes se trouvent avant ou après l'entrée d'étape actuelle, ou lesquelles sont des parents ou des enfants de l'entrée d'étape). Pour en savoir plus, consultez NavigationInfo. |
Métadonnées | Données liées à une entrée d'étape itérée, y compris un ID indiquant le thread enfant (par exemple, quel STEP_PARALLEL_BRANCH_ENTRY dans STEP_PARALLEL_BRANCH ) ou l'itération d'une boucle for (par exemple, quel STEP_FOR_ITERATION dans STEP_FOR ). Pour en savoir plus, consultez StepEntryMetadata.
|
Exceptions | Charge utile liée à des exceptions et qui fournit une description de la raison pour laquelle une entrée d'étape a échoué. |
Afficher les entrées d'étape dans la console
Vous pouvez afficher les entrées d'étapes pour une exécution de workflow spécifique dans la console Google Cloud.
Dans la console Google Cloud, accédez à la page Workflows :
Cliquez sur le nom du workflow pour accéder à sa page Détails du workflow.
Pour en savoir plus sur une exécution spécifique, cliquez sur son ID.
Dans l'onglet Récapitulatif, des informations sur l'exécution globale sont fournies, y compris toute exception ayant entraîné l'échec de l'exécution. Pour en savoir plus, consultez la section Cartes des erreurs d'exécution.
Pour afficher l'historique d'exécution du workflow sous forme de liste d'entrées d'étapes, cliquez sur l'onglet Étapes.
Toutes les entrées d'étapes de l'exécution du workflow sont listées.
Pour filtrer les entrées d'étape, utilisez le champ Filtrer en haut du tableau pour sélectionner une propriété et une valeur (par exemple,
State: Failed
).Pour afficher les liens vers les entrées Parent, Enfants, Suivante et Précédente, cliquez sur une entrée d'étape spécifique.
Si vous cliquez sur un lien, les autres liens sont automatiquement mis à jour. Par exemple, Parent vous permet d'accéder à l'élément parent de l'étape sur laquelle vous avez cliqué.
Le panneau Visualisation fournit une représentation graphique des étapes du workflow et vous aide à comprendre le chemin du workflow.
Notez que la visualisation peut différer des entrées d'étapes. Par exemple, un bloc
for
est représenté comme un seul composant dans la visualisation. Toutefois, en fonction du nombre d'itérations, il peut y avoir plusieurs entrées d'étapes.Vous pouvez effectuer les opérations suivantes dans le panneau:
- Faire un zoom avant ou arrière sur la visualisation
- Réduire ou développer les entrées de l'étape parent
- Cliquez sur une entrée d'étape et affichez les entrées précédentes et suivantes
- Vérifiez que les entrées des étapes réussies et échouées sont indiquées par une coche verte ou un point d'exclamation rouge.
- Fermez le panneau Visualisation en cliquant sur la flèche d'expansion . Cliquez de nouveau dessus pour ouvrir le panneau.
Avant de récupérer une entrée d'étape
Pour obtenir les autorisations nécessaires pour récupérer une entrée d'étape, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de workflow (workflows.stepEntries.get
) sur votre projet.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Récupérer une entrée d'étape
Pour récupérer une entrée d'étape pour une exécution de workflow donnée, utilisez la méthode projects.locations.workflows.executions.stepEntries.get
.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud répertorié sur la page IAM & Admin (IAM et administration).LOCATION
: région dans laquelle le workflow est déployé (par exemple,us-central1
).WORKFLOW_ID
: nom défini par l'utilisateur pour le workflow (par exemple,myFirstWorkflow
).EXECUTION_ID
: ID unique d'une exécution de workflow renvoyé après l'exécution d'un workflow.STEPENTRY_ID
: ID unique d'une entrée d'étape (par exemple,1
).
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/STEPENTRY_ID", "createTime": "2023-10-19T13:49:56.522717646Z", "updateTime": "2023-10-19T13:49:56.525439354Z", "routine": "main", "step": "checkSearchTermInInput", "stepType": "STEP_CONDITION", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "children": [ "3" ], "parent": "1", "next": "3", "previous": "1" } }
Avant de lister les entrées de la procédure
Pour obtenir les autorisations dont vous avez besoin pour lister les entrées d'étapes, demandez à votre administrateur de vous accorder le rôle IAM administrateur des workflows (workflows.stepEntries.list
) sur votre projet.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Lister les entrées d'étape
Pour répertorier les entrées d'étapes d'une exécution de workflow donnée, utilisez la méthode projects.locations.workflows.executions.stepEntries.list
. Par défaut, les résultats sont renvoyés par ordre croissant de l'createTime
des entrées d'étape.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud répertorié sur la page IAM & Admin Settings (Paramètres IAM et administration).LOCATION
: région dans laquelle le workflow est déployé (par exemple,us-central1
).WORKFLOW_ID
: nom défini par l'utilisateur pour le workflow (par exemple,myFirstWorkflow
).EXECUTION_ID
: ID unique d'une exécution de workflow renvoyé après l'exécution d'un workflow.
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "stepEntries": [ { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/1", "createTime": "2023-10-19T13:49:56.522705770Z", "updateTime": "2023-10-19T13:49:56.525439429Z", "routine": "main", "step": "checkSearchTermInInput", "stepType": "STEP_SWITCH", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "children": [ "2" ], "next": "2" } }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/2", "createTime": "2023-10-19T13:49:56.522717646Z", "updateTime": "2023-10-19T13:49:56.525439354Z", "routine": "main", "step": "checkSearchTermInInput", "stepType": "STEP_CONDITION", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "children": [ "3" ], "parent": "1", "next": "3", "previous": "1" } }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/3", "createTime": "2023-10-19T13:49:56.525379814Z", "updateTime": "2023-10-19T13:49:56.525439285Z", "routine": "main", "step": "checkSearchTermInInput.condition1", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "3", "navigationInfo": { "parent": "2", "next": "4", "previous": "2" } }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/4", "createTime": "2023-10-19T13:49:56.525440360Z", "updateTime": "2023-10-19T13:49:56.716973793Z", "routine": "main", "step": "readWikipedia", "stepType": "STEP_CALL", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "next": "5", "previous": "3" } }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/5", "createTime": "2023-10-19T13:49:56.717263008Z", "updateTime": "2023-10-19T13:49:56.717353199Z", "routine": "main", "step": "returnOutput", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "5", "navigationInfo": { "previous": "4" } } ], "totalSize": 5 }
Examples
Workflow avec un bloc for
Workflow
YAML
- assignStep: assign: - sum: 0 - forStep: for: range: [1, 2] value: v steps: - sumStep: assign: - sum: ${sum + v} - returnStep: return: ${sum}
JSON
[ { "assignStep": { "assign": [ { "sum": 0 } ] } }, { "forStep": { "for": { "range": [ 1, 2 ], "value": "v", "steps": [ { "sumStep": { "assign": [ { "sum": "${sum + v}" } ] } } ] } } }, { "returnStep": { "return": "${sum}" } } ]
Diagramme
Entrées d'étape
{ "stepEntries": [ { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/1", "createTime": "2023-10-20T17:19:37.889232683Z", "updateTime": "2023-10-20T17:19:37.889275457Z", "routine": "main", "step": "assignStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "next": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/2", "createTime": "2023-10-20T17:19:37.889276124Z", "updateTime": "2023-10-20T17:19:37.889474759Z", "routine": "main", "step": "forStep", "stepType": "STEP_FOR", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "children": [ "3", "5" ], "next": "3", "previous": "1" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/3", "createTime": "2023-10-20T17:19:37.889313107Z", "updateTime": "2023-10-20T17:19:37.889382353Z", "routine": "main", "step": "forStep", "stepType": "STEP_FOR_ITERATION", "state": "STATE_SUCCEEDED", "entryId": "3", "navigationInfo": { "children": [ "4" ], "parent": "2", "next": "4", "previous": "2" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "1" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/4", "createTime": "2023-10-20T17:19:37.889317653Z", "updateTime": "2023-10-20T17:19:37.889382265Z", "routine": "main", "step": "sumStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "parent": "3", "next": "5", "previous": "3" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "1" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/5", "createTime": "2023-10-20T17:19:37.889383134Z", "updateTime": "2023-10-20T17:19:37.889474707Z", "routine": "main", "step": "forStep", "stepType": "STEP_FOR_ITERATION", "state": "STATE_SUCCEEDED", "entryId": "5", "navigationInfo": { "children": [ "6" ], "parent": "2", "next": "6", "previous": "4" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/6", "createTime": "2023-10-20T17:19:37.889384893Z", "updateTime": "2023-10-20T17:19:37.889474649Z", "routine": "main", "step": "sumStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "6", "navigationInfo": { "parent": "5", "next": "7", "previous": "5" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/7", "createTime": "2023-10-20T17:19:37.889475882Z", "updateTime": "2023-10-20T17:19:37.889483477Z", "routine": "main", "step": "returnStep", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "7", "navigationInfo": { "previous": "6" } } ], "totalSize": 7 }
Workflow avec un appel de sous-workflow
Workflow
YAML
main: steps: - callStep: call: square args: x: 10 result: t - retStep: return: ${t} square: params: [x] steps: - assignStep: assign: - y: ${x*x} - retStep: return: ${y}
JSON
{ "main": { "steps": [ { "callStep": { "call": "square", "args": { "x": 10 }, "result": "t" } }, { "retStep": { "return": "${t}" } } ] }, "square": { "params": [ "x" ], "steps": [ { "assignStep": { "assign": [ { "y": "${x*x}" } ] } }, { "retStep": { "return": "${y}" } } ] } }
Diagramme
Entrées d'étape
{ "stepEntries": [ { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/1", "createTime": "2023-10-21T15:25:55.406007695Z", "updateTime": "2023-10-21T15:25:55.412984492Z", "routine": "main", "step": "callStep", "stepType": "STEP_CALL", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "children": [ "2", "3" ], "next": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/2", "createTime": "2023-10-21T15:25:55.412921902Z", "updateTime": "2023-10-21T15:25:55.412967631Z", "routine": "square", "step": "assignStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "parent": "1", "next": "3", "previous": "1" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/3", "createTime": "2023-10-21T15:25:55.412968712Z", "updateTime": "2023-10-21T15:25:55.412978913Z", "routine": "square", "step": "retStep", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "3", "navigationInfo": { "parent": "1", "next": "4", "previous": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/4", "createTime": "2023-10-21T15:25:55.412992302Z", "updateTime": "2023-10-21T15:25:55.412998396Z", "routine": "main", "step": "retStep", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "previous": "3" } } ], "totalSize": 4 }
Workflow avec une entrée d'étape ayant échoué
Workflow
YAML
- tryStep: try: return: ${1 / 0} except: return: 0
JSON
[ { "tryStep": { "try": { "return": "${1 / 0}" }, "except": { "return": 0 } } } ]
Diagramme
Entrées d'étape
{ "stepEntries": [ { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/1", "createTime": "2023-10-20T18:06:50.395938752Z", "updateTime": "2023-10-20T18:06:50.396525946Z", "routine": "main", "step": "tryStep", "stepType": "STEP_TRY_RETRY_EXCEPT", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "children": [ "2", "4" ], "next": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/2", "createTime": "2023-10-20T18:06:50.395942598Z", "updateTime": "2023-10-20T18:06:50.396497992Z", "routine": "main", "step": "tryStep", "stepType": "STEP_TRY", "state": "STATE_FAILED", "entryId": "2", "navigationInfo": { "children": [ "3" ], "parent": "1", "next": "3", "previous": "1" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/3", "createTime": "2023-10-20T18:06:50.395944871Z", "updateTime": "2023-10-20T18:06:50.396497499Z", "routine": "main", "step": "tryStep.try", "stepType": "STEP_RETURN", "state": "STATE_FAILED", "exception": { "payload": "{\"message\":\"ZeroDivisionError: division by zero\",\"tags\":[\"ZeroDivisionError\",\"ArithmeticError\"]}" }, "entryId": "3", "navigationInfo": { "parent": "2", "next": "4", "previous": "2" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/4", "createTime": "2023-10-20T18:06:50.396506860Z", "updateTime": "2023-10-20T18:06:50.396525900Z", "routine": "main", "step": "tryStep", "stepType": "STEP_EXCEPT", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "children": [ "5" ], "parent": "1", "next": "5", "previous": "3" } }, { "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/5", "createTime": "2023-10-20T18:06:50.396516994Z", "updateTime": "2023-10-20T18:06:50.396525818Z", "routine": "main", "step": "tryStep.except", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "5", "navigationInfo": { "parent": "4", "previous": "4" } } ], "totalSize": 5 }
Étape suivante
- Présentation du débogage
- Surveiller les workflows
- Résoudre les problèmes
- Problèmes connus liés à Workflows