Soluciona problemas

En esta página, se muestra cómo resolver problemas que pueden surgir cuando usas Workflows.

Para obtener más información, consulta la página sobre 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 que coincida con la sintaxis del lenguaje. Workflows muestra un error si se encuentra uno. Los tipos de errores de implementación más comunes son los siguientes:

  • Hacer referencia a variables, pasos o subflujos 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 la sentencia return hace referencia a una variable no definida, varC:

- step1:
    assign:
    - varA: "Hello"
    - varB: "World"
- step2:
    return: ${varC + varB}

Se usa este código fuente incorrecto 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 en la página Editar flujo de trabajo: Error de Deployment 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 a la línea de comandos si falla la implementación. El mensaje de error indica 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, consulta varA en lugar de varC.

Errores de permiso de la cuenta de servicio HTTP 403

La ejecución de tu 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 con 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 una o más funciones 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 a la cuenta de servicio que ejecuta el flujo de trabajo se le haya otorgado una función que incluya el permiso logging.logEntries.create. Si deseas obtener más información, consulta Otorga permiso a un flujo de trabajo para acceder a los recursos de Google Cloud.

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 no se aplique la restricción booleana iam.disableCrossProjectServiceAccountUsage en tu proyecto y de que configuraste la cuenta de servicio de forma correcta. Para obtener más información, consulta Implementa un flujo de trabajo con una cuenta de servicio entre proyectos.

El nombre del recurso debe cumplir con el estándar RFC 1123

La ejecución de tu 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 de tu recurso siga el estándar de la etiqueta DNS como se define en RFC 1123, y de que, cuando asignes variables, se concatenan cadenas y expresiones de forma correcta.

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 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 consola de Google Cloud, este no se puede renderizar visualmente en la consola de Google Cloud y es posible que recibas una advertencia similar a la siguiente:

Advertencia de creación de flujos de trabajo

Para resolver este problema, une la expresión YAML entre comillas simples:

Recomendado: '${"a: " +string(a)}'

No se recomienda: ${"a: " +string(a)}

Asigna claves con caracteres no alfanuméricos

Cuando accedes a claves de mapa con caracteres que no son 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á entre comillas, no se puede implementar el flujo de trabajo. Por ejemplo, si intentas implementar el siguiente código fuente, se arrojará una token recognition error:

- init:
    assign:
    - var:
        key:
            "special!key": bar
- returnOutput:
    return: '${"foo" + var.key[special!key]}'

A fin de resolver esto, usa el siguiente código para mostrar el resultado:

'${"foo" + var.key["special!key"]}'

Varias expresiones en una lista

El uso de varias expresiones dentro de una lista, como en el siguiente ejemplo de rango de iteración, no es un YAML válido:

[${rangeStart}, ${rangeEnd}])

Para resolver el problema, realiza una de las siguientes acciones:

  • Coloca la lista dentro de una expresión:

    ${[rangeStart, rangeEnd]}

  • Une cada expresión entre comillas simples:

    ['${rangeStart}', '${rangeEnd}']

Entonces, el resultado es una lista de dos valores, como se esperaba.

Claves de encriptación administradas por el cliente (CMEK)

Puedes encontrar errores cuando uses Cloud KMS con Workflows. En la siguiente tabla, se describen los diferentes problemas y cómo resolverlos.

Problema Descripción
Se denegó 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 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 diferentes proyectos). 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 aumenta 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 usaba el conector de Cloud Run

La ejecución de tu flujo de trabajo falla cuando un servidor HTTP responde con un código de error 404 cuando intenta usar el método de 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 borrar las variables para liberar memoria. Por ejemplo, es posible que quieras liberar la memoria que se necesita para los pasos posteriores. También es posible que tengas llamadas con resultados que no te interesan y que puedas omitirlos por completo.

Sangría YAML

La sangría YAML es significativa y debe ser de al menos dos espacios por nivel de sangría. Una sangría insuficiente puede causar errores, y un nuevo nivel debe estar al menos dos espacios desde el inicio del texto en la línea anterior.

Por ejemplo, a continuación se especifica de forma incorrecta un elemento de lista que contiene un mapa con los 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 tabulaciones, para aplicar sangría a las líneas.

¿Qué sigue?