En esta página, se muestra cómo resolver problemas que podrías encontrar cuando uses Workflows.
Para obtener más información, consulta Supervisa y depura Workflows.
Errores en la Deployment
Cuando se implementa un flujo de trabajo, Workflows verifica que el código fuente no tenga errores y coincida con la sintaxis del lenguaje. Workflows muestra un error si se encuentra uno. Los tipos más comunes de errores de implementación son los siguientes:
- Hacer referencia a una variable, un paso o un subflujo de trabajo no definidos
- Sintaxis incorrecta
- Sangría incorrecta
- Falta
{,},",-o:o son innecesarios
Por ejemplo, el siguiente código fuente genera un error de implementación porque la sentencia return hace referencia a una variable no definida, varC:
- step1: assign: - varA: "Hello" - varB: "World" - step2: return: ${varC + varB}
Este código fuente incorrecto se usa en los siguientes Google Cloud ejemplos de la consola de y gcloud CLI.
Console
Cuando se produce un error de implementación, Workflows muestra el mensaje de error
en un banner en la página Edit workflow:
El mensaje de error marca el problema en el código fuente y especifica el origen
del error cuando es posible:
Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)
gcloud
Cuando ejecutas el comando gcloud workflows deploy, Workflows muestra un mensaje de error en la línea de comandos si falla la implementación. El mensaje de error marca el problema en el código fuente y especifica el origen del error cuando es posible:
ERROR: (gcloud.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name
Para resolver el problema, edita el código fuente del flujo de trabajo. En este caso, haz referencia a varA en lugar de varC.
Errores de permisos de la cuenta de servicio HTTP 403
La ejecución del flujo de trabajo falla cuando un servidor HTTP responde con un código de error 403. Por ejemplo:
Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
o
SERVICE_ACCOUNT does not have storage.objects.create access to the Google Cloud Storage object. Permission 'storage.objects.create' denied on resource (or it may not exist).
Cada flujo de trabajo se asocia a una cuenta de servicio de IAM en el momento en que se crea el flujo de trabajo. Para resolver este problema, debes otorgar a la cuenta de servicio uno o más roles de IAM que contengan los permisos mínimos necesarios para administrar tu flujo de trabajo. Por ejemplo, si deseas permitir que tu flujo de trabajo envíe registros a Cloud Logging, asegúrate de que la cuenta de servicio que ejecuta el flujo de trabajo tenga una función que incluya el permiso logging.logEntries.create. Para obtener más información, consulta
Otorga un permiso de flujo de trabajo para acceder a Google Cloud recursos.
Errores HTTP 404 No such object o Not found
Cuando usas el
conector de Cloud Storage,
la ejecución del flujo de trabajo falla cuando un servidor HTTP responde con un código de error
404. Por ejemplo:
HTTP server responded with error code 404 in step "read_input_file", routine "main", line: 13 { "body": "Not Found", "code": 404, ... }
Debes codificar como URL los nombres de objetos para que sean seguros para la ruta. Puedes usar las
url_encode y
url_encode_plus
funciones para codificar los caracteres aplicables cuando aparecen en el nombre del objeto
o en la cadena de consulta de una URL de solicitud. Por ejemplo:
- init: assign: - source_bucket: "my-bucket" - file_name: "my-folder/my-file.json" - list_objects: call: googleapis.storage.v1.objects.get args: bucket: ${source_bucket} object: ${text.url_encode(file_name)} alt: media result: r - returnStep: return: ${r}
Si no codificas como URL el nombre del objeto y tu bucket de almacenamiento tiene carpetas, la solicitud fallará. Para obtener más información, consulta Codifica las partes de ruta de URL y Consideraciones sobre la asignación de nombres de Cloud Storage.
Errores HTTP 429 Too many requests
Hay una cantidad máxima de ejecuciones de flujo de trabajo activas
que se pueden ejecutar de forma simultánea. Una vez que se agota esta cuota y si se inhabilita el registro de ejecuciones pendientes o si se alcanza la cuota para las ejecuciones pendientes, las ejecuciones nuevas fallan con un código de estado HTTP 429 Too many requests.
El registro de ejecuciones pendientes te permite poner en cola las ejecuciones de flujo de trabajo una vez que se alcanza la cuota de ejecuciones simultáneas. De forma predeterminada, el registro de ejecuciones pendientes está habilitado para todas las solicitudes (incluidas las que activan Cloud Tasks) con las siguientes excepciones:
- Cuando se crea una ejecución con un
executions.runoexecutions.createconector en un flujo de trabajo, el registro de ejecuciones pendientes está inhabilitado de forma predeterminada. Puedes configurarlo si estableces de forma explícita el campodisableConcurrencyQuotaOverflowBufferingde la ejecución enfalse. - Para las ejecuciones que activa Pub/Sub, el registro de ejecuciones pendientes está inhabilitado y no se puede configurar.
Para obtener más información, consulta Administra el registro de ejecuciones pendientes.
También puedes habilitar una cola de Cloud Tasks para ejecutar flujos de trabajo secundarios a una velocidad que definas y lograr una mejor tasa de ejecución. En ese caso, es posible que desees inhabilitar de forma explícita el registro de ejecuciones pendientes.
Errores de permisos de la cuenta de servicio entre proyectos
Si recibes un error PERMISSION_DENIED cuando intentas usar una cuenta de servicio entre proyectos para implementar un flujo de trabajo, asegúrate de que la restricción booleana iam.disableCrossProjectServiceAccountUsage no se aplique a tu proyecto y de que hayas configurado correctamente la cuenta de servicio. Para
obtener más información, consulta Implementa un flujo de trabajo con una cuenta de servicio entre proyectos
account.
El nombre del recurso debe cumplir con RFC 1123
La ejecución del flujo de trabajo falla cuando un servidor HTTP responde con un código de error 400. Por ejemplo:
"description": "must conform to RFC 1123: only lowercase, digits, hyphens, and periods are allowed, must begin and end with letter or digit, and less than 64 characters."
Para resolver este problema, asegúrate de que el nombre del recurso siga el estándar de etiqueta DNS tal como se define en RFC 1123 y de que, cuando asignes variables, concatenes cadenas y expresiones correctamente.
Por ejemplo, no puedes asignar una variable de esta manera: - string: hello-${world}.
En su lugar, haz lo siguiente:
YAML
- assign_vars: assign: - string: "hello" - string: ${string+" "+"world"}
JSON
[ { "assign_vars": { "assign": [ { "string": "hello" }, { "string": "${string+" "+"world"}" }, ] } } ]
Expresiones que contienen dos puntos
En YAML, las expresiones que contienen dos puntos pueden causar un comportamiento inesperado cuando los dos puntos se interpretan como la definición de un mapa. Aunque es posible implementar y ejecutar el flujo de trabajo, el resultado no será el esperado.
Si creas un flujo de trabajo con la Google Cloud consola de , el flujo de trabajo no se puede renderizar visualmente en la Google Cloud consola de y es posible que recibas una advertencia similar a la siguiente:
Para resolver este problema, encierra la expresión YAML entre comillas simples:
Se recomienda: '${"a: " +string(a)}'
No se recomienda: ${"a: " +string(a)}
Claves de mapa que usan caracteres no alfanuméricos
Cuando accedes a claves de mapa con caracteres no alfanuméricos (por ejemplo, el
signo de exclamación en "special!key": value), debes encerrar el nombre de la clave entre
comillas. Si el nombre de la clave no está encerrado entre comillas, no se puede implementar el flujo de trabajo. Por ejemplo, si intentas implementar el siguiente código fuente, se genera un token recognition error:
- init: assign: - var: key: "special!key": bar - returnOutput: return: '${"foo" + var.key[special!key]}'
Para resolver este problema, usa el siguiente código en su lugar para mostrar el resultado:
'${"foo" + var.key["special!key"]}'
Varias expresiones en una lista
El uso de varias expresiones dentro de una lista como el siguiente ejemplo de rango de iteración no es un YAML válido:
[${rangeStart}, ${rangeEnd}])
Para resolver este problema, haz una de las siguientes acciones:
Coloca la lista dentro de una expresión:
${[rangeStart, rangeEnd]}Encierra cada expresión entre comillas simples:
['${rangeStart}', '${rangeEnd}']
El resultado es una lista de dos valores, como se esperaba.
Claves de encriptación administradas por el cliente (CMEK)
Es posible que encuentres errores cuando uses Cloud KMS con Workflows. En la siguiente tabla, se describen los diferentes problemas y cómo resolverlos.
| Problema | Descripción |
|---|---|
Se deniega el permiso cloudkms.cryptoKeyVersions.useToEncrypt
|
Es posible que la clave de Cloud KMS proporcionada no exista o que el
permiso no esté configurado de forma correcta.
Solución:
|
| La versión de clave no está habilitada | Se inhabilitó la versión de la clave de Cloud KMS proporcionada.
Solución: Vuelve a habilitar la versión de la clave de Cloud KMS. |
| La región del llavero de claves no coincide con el recurso que se protegerá | La región del llavero de claves de KMS que se proporciona es diferente de la región del
flujo de trabajo.
Solución: Usa un llavero de claves de Cloud KMS y un flujo de trabajo protegido de la misma región. (Ten en cuenta que pueden estar en proyectos diferentes ). Para obtener más información, consulta Ubicaciones de Cloud KMS y Ubicaciones de Workflows. |
| Se excedió el límite de cuota de Cloud KMS | Se alcanzó el límite de cuota para las solicitudes de Cloud KMS.
Solución: Limita la cantidad de llamadas a Cloud KMS o aumenta el límite de cuota. Para obtener más información, consulta Cuotas de Cloud KMS. |
No se encontró la entidad solicitada cuando se usa el conector de Cloud Run
La ejecución del flujo de trabajo falla cuando un servidor HTTP responde con un código de error
de 404 cuando se intenta usar el método del conector,
googleapis.run.v1.namespaces.jobs.create.
Este método requiere que especifiques la ubicación del extremo HTTP. Por ejemplo, us-central1 o asia-southeast1. Si no especificas una ubicación, se usa el extremo global https://run.googleapis.com. Sin embargo, esta ubicación solo admite métodos de lista.
Para resolver este problema, asegúrate de especificar un argumento location cuando
llames al conector.
Para ver las opciones de ubicación de la API de Cloud Run Admin, consulta
extremos de servicio.
Límites de recursos
Si encuentras límites de recursos o un
error como ResourceLimitError, MemoryLimitExceededError o
ResultSizeLimitExceededError, puedes liberar memoria
borrando variables.
Por ejemplo, es posible que desees liberar memoria que se necesita para los pasos posteriores. O bien, es posible que tengas llamadas con resultados que no te interesen y que puedas omitir esos resultados por completo.
Sangría de YAML
La sangría de YAML es significativa y debe ser de al menos dos espacios por nivel de sangría. La sangría insuficiente puede causar errores y un nivel nuevo debe ser al menos dos espacios a partir de el inicio del texto en la línea anterior.Por ejemplo, en el siguiente caso se especifica de manera incorrecta un elemento de lista que contiene un mapa con elementos stepName y call:
- stepName: call: sys.log
En su lugar, debes aplicar una sangría de dos espacios a la línea posterior para anidar call dentro de stepName:
- stepName: call: sys.log
Asegúrate de usar espacios, en lugar de caracteres de tabulación, para aplicar sangría a las líneas.