En esta página, se muestra cómo resolver algunos problemas que podrían surgir al usar Workflows
Para obtener más información, consulta Monitoring y depuración de Workflows.
Errores en la implementación
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 los errores de implementación son los siguientes:
- Cómo hacer referencia a una variable, un paso o un subflujo de trabajo no definidos
- Sintaxis incorrecta
- Sangría incorrecta
{
,}
,"
,-
o:
faltantes o irrelevantes
Por ejemplo, el siguiente código fuente arroja un error de implementación porque el
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 ejemplos de la consola de Google Cloud y gcloud CLI.
Console
Cuando se produce un error de implementación, Workflows muestra el mensaje de error en un banner de la página Editar flujo de trabajo: 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 devuelve un mensaje de error a la línea de comandos si el
o la implementación. El mensaje de error marca el problema en el código fuente.
que especifica el origen del error cuando sea 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, consulta
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.
de 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 con una cuenta de servicio de IAM en el
cada vez que se crea el flujo de trabajo. Para resolver este problema, debes otorgarle 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 quieres permitir
tu flujo de trabajo envíen registros a Cloud Logging, asegúrate de que la cuenta de servicio
al ejecutar el flujo de trabajo, se le otorgó un rol que incluye
logging.logEntries.create
. Para obtener más información, consulta Cómo otorgar permiso a un flujo de trabajo para acceder a recursos de Google Cloud.
Errores 429 Too many requests
de HTTP
Existe una cantidad máxima de flujos de trabajo activos
ejecuciones que se pueden ejecutar simultáneamente. Una vez que se agote esta cuota y si se inhabilita el almacenamiento en cola de ejecuciones o si se alcanza la cuota para las ejecuciones en cola, las ejecuciones nuevas fallarán con un código de estado HTTP 429 Too many requests
.
El retraso de la ejecución te permite poner en cola ejecuciones de flujos de trabajo una vez que se alcanza la cuota de ejecuciones simultáneas. De forma predeterminada, el backlogging de ejecución está habilitado para todas las solicitudes (incluidas las activadas por Cloud Tasks) con las siguientes excepciones:
- Cuando creas una ejecución con un
executions.run
oexecutions.create
en un flujo de trabajo, el trabajo pendiente de ejecución está inhabilitado de forma predeterminada. Para configurarlo, establece de forma explícita el campodisableConcurrencyQuotaOverflowBuffering
de la ejecución enfalse
. - Para las ejecuciones que activa Pub/Sub, el trabajo pendiente de ejecución es inhabilitado y no se puede configurar.
Para obtener más información, consulta Administra el retraso en la ejecución.
También puedes Habilita una cola de Cloud Tasks para ejecutar flujos de trabajo secundarios a un ritmo que tú definas y logres una mejor tasa de ejecución; en ese caso, es posible que quieras indicar explícitamente inhabilita el backlog de ejecución.
Errores de permisos de cuentas de servicio entre proyectos
Si recibes un error PERMISSION_DENIED
cuando intentas usar un
cuenta de servicio entre proyectos para implementar un flujo de trabajo, asegúrate de que el
No se aplica la restricción booleana iam.disableCrossProjectServiceAccountUsage
para tu proyecto y que configuraste la cuenta de servicio de forma correcta. Para
Para obtener más información, consulta Implementa un flujo de trabajo con un servicio entre proyectos.
cuenta de servicio.
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.
de 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 de tu recurso siga la etiqueta de DNS. estándar, como se define en RFC 1123 y que cuando asignas variables, estás concatenando cadenas y expresiones correctas.
Por ejemplo, no puedes asignar una variable como esta: - 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 provocar un comportamiento inesperado cuando la dos puntos se interpreta como la definición de un mapa. Si bien es posible implementar y ejecutar el flujo de trabajo, el resultado no será el esperado.
Si creas un flujo de trabajo con la consola de Google Cloud, este no se puede se renderizan visualmente en la consola de Google Cloud, y es posible que recibas advertencia similar a la siguiente:
Para resolver este problema, encierra la expresión YAML entre comillas simples:
Recomendado: '${"a: " +string(a)}'
No se recomienda: ${"a: " +string(a)}
Asigna claves con caracteres que no son alfanuméricos
Al acceder a claves de mapa con caracteres que no son alfanuméricos (por ejemplo, el
signo de exclamación en "special!key": value
), debes unir el nombre de la clave en
citas. Si el nombre de la clave no está entre comillas, el flujo de trabajo no se puede
cuando se implementa un plan. Por ejemplo, si intentas implementar el siguiente código fuente, se
Se arroja token recognition error
:
- init:
assign:
- var:
key:
"special!key": bar
- returnOutput:
return: '${"foo" + var.key[special!key]}'
Para resolverlo, usa el siguiente código y muestra el resultado:
'${"foo" + var.key["special!key"]}'
Varias expresiones en una lista
Usar varias expresiones dentro de una lista como la siguiente rango de iteración ejemplo no es un YAML válido:
[${rangeStart}, ${rangeEnd}])
Para solucionar este problema, sigue uno de estos pasos:
Coloca la lista dentro de una expresión:
${[rangeStart, rangeEnd]}
Encierra cada expresión entre comillas simples:
['${rangeStart}', '${rangeEnd}']
El resultado es entonces 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 flujos de trabajo. 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 clave de Cloud KMS proporcionada.
Solución: Volver a habilitar la versión de 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 proporcionada es diferente de la región del
en el flujo de trabajo.
Solución: Usa un llavero de claves de Cloud KMS y está protegido flujo de trabajo desde la misma región. (Ten en cuenta que pueden estar en diferentes projects.) Para obtener más información, consulta Ubicaciones de Cloud KMS y Ubicaciones de flujos de trabajo. |
Se superó 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 de Cloud KMS o aumentar el límite de la 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 conector
googleapis.run.v1.namespaces.jobs.create
Este método requiere que especifiques la ubicación del extremo HTTP. Para
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
como ResourceLimitError
, MemoryLimitExceededError
o
ResultSizeLimitExceededError
, puedes liberar memoria si
borrar variables.
Por ejemplo, tal vez quieras liberar memoria que se necesita
pasos. O bien, es posible que tengas llamadas con resultados que no te interesan, y puedes
omitir esos resultados por completo.
Sangría 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 del inicio del texto en la línea anterior.Por ejemplo, lo siguiente 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 siguiente para anidar call
.
en stepName
:
- stepName:
call: sys.log
Asegúrate de usar espacios, en lugar de caracteres de tabulación, para agregar sangría a las líneas.