Puedes recuperar el historial de una ejecución de flujo de trabajo especificado como una lista de entradas de pasos. Cada entrada de paso proporciona información que puede ayudarte a analizar, depurar u optimizar un flujo de trabajo. Por ejemplo, puedes confirmar qué pasos se ejecutaron en realidad y puedes determinar la duración y el éxito de un paso. Esto puede ser muy útil cuando se depura un flujo de trabajo no lineal grande o complicado (uno con muchas ramas paralelas, por ejemplo).
Una entrada de paso representa un paso real en el código fuente (por ejemplo, assign
o call
) o un bloque de instrucciones (por ejemplo, un bucle for
o un bloque try/retry/except
). Para obtener una lista completa de los tipos de pasos, consulta StepType.
Cómo recuperar entradas de pasos
Para recuperar entradas de pasos, envía una solicitud a la API de REST de ejecuciones de flujos de trabajo o a través de la consola de Google Cloud:
Consola de Google Cloud: en este documento, consulta Visualiza las entradas de pasos en la consola.
Además de enumerar las entradas de pasos y sus detalles, la consola proporciona una representación gráfica de los pasos de ejecución, lo que facilita ver y analizar la ruta de la ejecución de un flujo de trabajo.
API de REST de ejecuciones de flujos de trabajo: En este documento, consulta Recupera una entrada de paso y Enumera entradas de pasos.
Información de entrada de pasos
Una entrada de paso incluye la siguiente información. Para obtener más detalles en este documento, consulta Ejemplos.
Nombre | Es el nombre completo del recurso de la entrada del paso, que es un ID único con el siguiente formato y en el que STEPENTRY_ID es un contador creciente:
Por ejemplo:
|
Fechas de creación y actualización | Marcas de tiempo de la hora de creación de la entrada del paso y su actualización más reciente. Si se completó una entrada de paso, updateTime indica el tiempo de finalización.
|
Nombres de pasos y rutina | Los nombres de la rutina y el paso a los que pertenece la entrada del paso. Un
nombre de rutina es el nombre del subflujo de trabajo definido en el código fuente YAML o JSON. El nombre de la rutina de nivel superior es main .
|
Estado y tipo de progreso | El estado de la entrada del paso (por ejemplo, si la entrada se realizó correctamente o falló, si una entrada de paso está en curso y el tipo de progreso). Para obtener una lista completa de los estados y los tipos de progreso, consulta Estado y ProgressType. |
Información de navegación | Es la posición de la entrada del paso para que puedas comprender mejor la jerarquía y el flujo del flujo de trabajo (por ejemplo, qué entradas de pasos aparecen antes o después de la entrada de paso actual, o cuáles son los elementos superiores o secundarios de la entrada del paso). Para obtener más información, consulta NavigationInfo. |
Metadatos | Datos relacionados con una entrada de paso iterativa, incluido un ID que indica el subproceso secundario (por ejemplo, que STEP_PARALLEL_BRANCH_ENTRY en STEP_PARALLEL_BRANCH ) o la iteración de un bucle for (por ejemplo, que STEP_FOR_ITERATION en STEP_FOR ). Para obtener más información, consulta StepEntryMetadata.
|
Excepciones | Carga útil relacionada con cualquier excepción y que proporciona una descripción de por qué falló una entrada de paso. |
Visualiza las entradas de pasos en la consola
Puedes ver las entradas de los pasos para la ejecución de un flujo de trabajo específico en la consola de Google Cloud.
En la consola de Google Cloud, ve a la página Workflows.
Haz clic en el nombre del flujo de trabajo para ir a la página Detalles del flujo de trabajo.
Para obtener detalles sobre una ejecución en particular, haz clic en su ID de ejecución.
En la pestaña Resumen, se proporciona información sobre la ejecución general, incluida cualquier excepción que haya generado la falla de la ejecución. Para obtener más información, consulta Mensajes de error de ejecución.
Para ver el historial de ejecuciones de flujos de trabajo como una lista de entradas de pasos, haz clic en la pestaña Pasos.
Se enumeran todas las entradas de los pasos para la ejecución del flujo de trabajo.
Si deseas filtrar las entradas del paso, usa el campo Filtro en la parte superior de la tabla para seleccionar una propiedad y un valor, por ejemplo,
State: Failed
.Para mostrar vínculos de cualquier entrada de paso Parent, secundario, Next y Previous, haz clic en una entrada de paso específica.
Si haces clic en un vínculo, los demás se actualizarán automáticamente. Por ejemplo, superior vinculará al elemento superior de la entrada del paso en la que hiciste clic.
El panel de visualización proporciona una representación gráfica de los pasos en el flujo de trabajo y te ayuda a comprender la ruta del flujo de trabajo.
Ten en cuenta que la visualización puede ser diferente de las entradas de los pasos. Por ejemplo, un bloque
for
se representa como un solo componente en la visualización. Sin embargo, según la cantidad de iteraciones, puede haber varias entradas de paso.En el panel, puedes hacer lo siguiente:
- Acercar o alejar la visualización
- Contraer o expandir las entradas de los pasos principales
- Hacer clic en una entrada de paso y ver las entradas anterior y siguiente
- Confirma las entradas de pasos correctas y fallidas como se indica con una marca de verificación verde o un signo de exclamación rojo.
- Para cerrar el panel Visualización, haz clic en la flecha de expansión ; vuelve a hacer clic en ella para abrir el panel.
Antes de recuperar una entrada de paso
Si quieres obtener los permisos que necesitas para recuperar una entrada de paso,
pídele a tu administrador que te otorgue el
rol de IAM Administrador de Workflows (workflows.stepEntries.get
)
en tu proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Cómo administrar el acceso.
Es posible que también puedas obtener los permisos necesarios a través de los roles personalizados o de otros roles predefinidos.
Recupera una entrada de paso
Si deseas recuperar una entrada de paso para una ejecución de flujo de trabajo determinada, usa el método projects.locations.workflows.executions.stepEntries.get
.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: El número de proyecto de Google Cloud que aparece en la página Configuración de IAM y administraciónLOCATION
: Es la región en la que se implementa el flujo de trabajo, por ejemplo,us-central1
.WORKFLOW_ID
: Es el nombre definido por el usuario para el flujo de trabajo, por ejemplo,myFirstWorkflow
.EXECUTION_ID
: Es el ID único de la ejecución de un flujo de trabajo que se muestra después de ejecutar un flujo de trabajo.STEPENTRY_ID
: Es el ID único de una entrada de paso, por ejemplo,1
.
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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" } }
Antes de enumerar las entradas de pasos
Si quieres obtener los permisos que necesitas para enumerar las entradas de pasos,
pídele a tu administrador que te otorgue el
rol de IAM Administrador de Workflows (workflows.stepEntries.list
)
en tu proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Cómo administrar el acceso.
Es posible que también puedas obtener los permisos necesarios a través de los roles personalizados o de otros roles predefinidos.
Enumera las entradas de pasos
Si quieres enumerar las entradas de pasos para una ejecución de flujo de trabajo determinada, usa el método projects.locations.workflows.executions.stepEntries.list
. De forma predeterminada, los resultados se muestran en orden ascendente de los createTime
de las entradas de pasos.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: El número de proyecto de Google Cloud que aparece en la página Configuración de IAM y administraciónLOCATION
: Es la región en la que se implementa el flujo de trabajo, por ejemplo,us-central1
.WORKFLOW_ID
: Es el nombre definido por el usuario para el flujo de trabajo, por ejemplo,myFirstWorkflow
.EXECUTION_ID
: Es el ID único de la ejecución de un flujo de trabajo que se muestra después de ejecutar un flujo de trabajo.
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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 }
Ejemplos
Flujo de trabajo con un bloque for
Flujo de trabajo
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}" } } ]
Diagrama
Entradas de pasos
{ "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 }
Flujo de trabajo con una llamada de subflujo de trabajo
Flujo de trabajo
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}" } } ] } }
Diagrama
Entradas de pasos
{ "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 }
Flujo de trabajo con una entrada de paso con errores
Flujo de trabajo
YAML
- tryStep: try: return: ${1 / 0} except: return: 0
JSON
[ { "tryStep": { "try": { "return": "${1 / 0}" }, "except": { "return": 0 } } } ]
Diagrama
Entradas de pasos
{ "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 }
¿Qué sigue?
- Descripción general de la depuración
- Supervisa flujos de trabajo
- Soluciona problemas
- Problemas conocidos de Workflows