Résoudre les problèmes

Cette page vous explique comment résoudre les problèmes que vous pouvez rencontrer lors de l'utilisation de Workflows.

Pour en savoir plus, consultez la page sur la monitoring et le débogage des workflows.

Erreurs de déploiement

Lorsqu'un workflow est déployé, Workflows vérifie que le code source est exempt d'erreurs et correspond à la syntaxe du langage. Workflows renvoie une erreur s'il en existe une. Les types d'erreurs de déploiement les plus courants sont les suivants:

  • Référencer une variable, une étape ou un sous-workflow indéfini
  • Syntaxe incorrecte
    • Mise en retrait incorrecte
    • Éléments {, }, ", - ou : manquants ou superflus

Par exemple, le code source suivant génère une erreur de déploiement, car l'instruction return fait référence à une variable non définie, varC:

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

Ce code source incorrect est utilisé dans les exemples suivants de la console Google Cloud et de gcloud CLI.

Console

En cas d'erreur de déploiement, Workflows affiche le message d'erreur dans une bannière sur la page Modifier le workflow : Erreur de déploiement Le message d'erreur signale le problème dans le code source et indique si possible l'origine de l'erreur:

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

Lorsque vous exécutez la commande gcloud workflows deploy, Workflows renvoie un message d'erreur à la ligne de commande si le déploiement échoue. Le message d'erreur signale le problème dans le code source, en spécifiant l'origine de l'erreur lorsque cela est possible:

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

Pour résoudre le problème, modifiez le code source du workflow. Dans ce cas, reportez-vous à varA au lieu de varC.

Erreurs d'autorisation HTTP de compte de service 403

L'exécution de votre workflow échoue lorsqu'un serveur HTTP répond avec le code d'erreur 403. Exemple :

Permission 'iam.serviceaccounts.actAs' denied on service
account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).

ou

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).

Chaque workflow est associé à un compte de service IAM au moment de sa création. Pour résoudre ce problème, vous devez attribuer au compte de service un ou plusieurs rôles IAM contenant les autorisations minimales requises pour gérer votre workflow. Par exemple, si vous souhaitez autoriser votre workflow à envoyer des journaux à Cloud Logging, assurez-vous qu'un rôle comprenant l'autorisation logging.logEntries.create a été attribué au compte de service exécutant le workflow. Pour en savoir plus, consultez Accorder à un workflow l'autorisation d'accéder aux ressources Google Cloud.

Erreurs d'autorisation de compte de service multiprojet

Si vous recevez une erreur PERMISSION_DENIED lorsque vous tentez d'utiliser un compte de service multiprojet pour déployer un workflow, assurez-vous que la contrainte booléenne iam.disableCrossProjectServiceAccountUsage n'est pas appliquée à votre projet et que vous avez correctement configuré le compte de service. Pour en savoir plus, consultez la page Déployer un workflow avec un compte de service multiprojet.

Le nom de la ressource doit être conforme à la norme RFC 1123

L'exécution de votre workflow échoue lorsqu'un serveur HTTP répond avec le code d'erreur 400. Exemple :

"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."

Pour résoudre ce problème, assurez-vous que le nom de votre ressource respecte la norme d'étiquette DNS définie dans la RFC 1123, et que lors de l'attribution de variables, vous concaténez correctement les chaînes et les expressions.

Par exemple, vous ne pouvez pas attribuer une variable comme celle-ci: - string: hello-${world}. Procédez plutôt comme suit :

YAML

  - assign_vars:
      assign:
          - string: "hello"
          - string: ${string+" "+"world"}

JSON

  [
    {
      "assign_vars": {
        "assign": [
          {
            "string": "hello"
          },
          {
            "string": "${string+" "+"world"}"
          },
        ]
      }
    }
  ]

Expressions contenant deux points

En YAML, les expressions contenant deux points peuvent entraîner un comportement inattendu lorsque le signe deux-points est interprété comme une définition de carte. Bien qu'il soit possible de déployer et d'exécuter le workflow, le résultat ne sera pas celui attendu.

Si vous créez un workflow à l'aide de la console Google Cloud, il ne peut pas être affiché visuellement dans la console Google Cloud. Un avertissement semblable au suivant peut s'afficher:

Avertissement concernant la création de workflows

Vous pouvez résoudre ce problème en encapsulant l'expression YAML entre guillemets simples:

recommandée : '${"a: " +string(a)}'

Option déconseillée : ${"a: " +string(a)}

Mapper des clés à l'aide de caractères non alphanumériques

Lorsque vous accédez à des clés de mappage avec des caractères non alphanumériques (par exemple, le point d'exclamation dans "special!key": value), vous devez encapsuler le nom de la clé entre guillemets. Si le nom de la clé n'est pas entre guillemets, le workflow ne peut pas être déployé. Par exemple, si vous essayez de déployer le code source suivant, une erreur token recognition error est générée:

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

Pour résoudre ce problème, utilisez plutôt le code suivant pour renvoyer la sortie:

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

Plusieurs expressions dans une liste

L'utilisation de plusieurs expressions dans une liste comme dans l'exemple de plage d'itération suivant n'est pas valide pour un fichier YAML:

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

Pour résoudre ce problème, procédez de l'une des façons suivantes:

  • Placez la liste dans une expression:

    ${[rangeStart, rangeEnd]}

  • Placez chaque expression entre guillemets simples:

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

Comme prévu, vous obtenez une liste de deux valeurs.

Clés de chiffrement gérées par le client (CMEK)

Vous pouvez rencontrer des erreurs lorsque vous utilisez Cloud KMS avec Workflows. Le tableau suivant décrit différents problèmes et explique comment les résoudre.

Problème Description
L'autorisation cloudkms.cryptoKeyVersions.useToEncrypt est refusée Soit la clé Cloud KMS fournie n'existe pas, soit l'autorisation n'est pas correctement configurée.

Solution :

La version de clé n'est pas activée La version de clé Cloud KMS fournie a été désactivée.

Solution: réactivez la version de clé Cloud KMS.

La région du trousseau de clés ne correspond pas à la ressource à protéger La région du trousseau de clés KMS fournie est différente de celle du workflow.

Solution: utilisez un trousseau de clés Cloud KMS et un workflow protégé provenant de la même région. (Notez qu'ils peuvent se trouver dans des projets différents.) Pour en savoir plus, consultez les pages Emplacements Cloud KMS et Emplacements des workflows.

La limite de quota Cloud KMS est dépassée Vous avez atteint votre limite de quota pour les requêtes Cloud KMS.

Solution: limitez le nombre d'appels Cloud KMS ou augmentez la limite de quota. Pour en savoir plus, consultez la page Quotas Cloud KMS.

L'entité demandée est introuvable lors de l'utilisation du connecteur Cloud Run.

L'exécution de votre workflow échoue lorsqu'un serveur HTTP répond avec le code d'erreur 404 lors de la tentative d'utilisation de la méthode de connecteur googleapis.run.v1.namespaces.jobs.create.

Cette méthode nécessite que vous spécifiiez l'emplacement du point de terminaison HTTP. Exemples : us-central1 ou asia-southeast1. Si vous ne spécifiez pas d'emplacement, le point de terminaison global https://run.googleapis.com est utilisé. Toutefois, cet emplacement n'accepte que les méthodes de liste.

Pour résoudre ce problème, veillez à spécifier un argument location lorsque vous appelez le connecteur. Pour en savoir plus sur les options d'emplacement de l'API Cloud Run Admin, consultez la section Points de terminaison de service.

Limites de ressources

Si vous rencontrez des limites de ressources ou une erreur telle que ResourceLimitError, MemoryLimitExceededError ou ResultSizeLimitExceededError, vous pouvez libérer de la mémoire en effaçant les variables. Par exemple, vous pouvez libérer de la mémoire nécessaire pour les étapes suivantes. Il se peut également que vous ayez reçu des appels dont les résultats ne vous intéressent pas et que vous pouvez les omettre complètement.

Retrait YAML

Le retrait YAML est significatif et doit comporter au moins deux espaces par niveau d'indentation. Des retraits insuffisants peuvent entraîner des erreurs. Un nouveau niveau doit comporter au moins deux espaces à partir du début du texte de la ligne précédente.

Par exemple, le code suivant spécifie de manière incorrecte un élément de liste contenant une carte avec les éléments stepName et call:

- stepName:
  call: sys.log

À la place, vous devez mettre en retrait la ligne suivante de deux espaces pour imbriquer call dans stepName:

- stepName:
    call: sys.log

Veillez à utiliser des espaces, plutôt que des caractères de tabulation, pour mettre en retrait les lignes.

Étapes suivantes