Risoluzione dei problemi

Questa pagina mostra come risolvere i problemi che potresti riscontrare durante l'utilizzo di Workflows.

Per ulteriori informazioni, consulta Workflows relativi al monitoring e al debug.

Errori di deployment

Quando viene eseguito il deployment di un flusso di lavoro, Workflows verifica che il codice sorgente sia privo di errori e che corrisponda alla sintassi della lingua. Workflows restituisce un errore, se ne viene trovato uno. I tipi più comuni di errori di deployment sono:

  • Fare riferimento a una variabile, a un passaggio o a un flusso di lavoro secondario non definito
  • Sintassi errata
    • Rientro errato
    • {, }, ", - o : mancanti o non pertinenti

Ad esempio, il seguente codice sorgente genera un errore di deployment perché l'istruzione return fa riferimento a una variabile non definita, varC:

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

Questo codice sorgente errato viene utilizzato nella console Google Cloud e negli esempi di gcloud CLI.

Console

Quando si verifica un errore di deployment, Workflows visualizza il messaggio di errore in un banner nella pagina Modifica flusso di lavoro: Errore di deployment Il messaggio di errore segnala il problema nel codice sorgente, specificando l'origine dell'errore, se possibile:

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

Quando esegui il comando gcloud workflows deploy, Workflows restituisce un messaggio di errore alla riga di comando se il deployment non va a buon fine. Il messaggio di errore segnala il problema nel codice sorgente, specificando l'origine dell'errore, se possibile:

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

Per risolvere il problema, modifica il codice sorgente del flusso di lavoro. In questo caso, fai riferimento a varA anziché a varC.

Errori relativi alle autorizzazioni dell'account di servizio HTTP 403

L'esecuzione del flusso di lavoro non va a buon fine quando un server HTTP risponde con un codice di errore 403. Ad esempio:

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

Ogni flusso di lavoro è associato a un account di servizio IAM al momento della creazione. Per risolvere questo problema, devi concedere all'account di servizio uno o più ruoli IAM che contengono le autorizzazioni minime necessarie per gestire il tuo flusso di lavoro. Ad esempio, se vuoi consentire al tuo flusso di lavoro di inviare log a Cloud Logging, assicurati che all'account di servizio che esegue il flusso di lavoro sia stato concesso un ruolo che include l'autorizzazione logging.logEntries.create. Per maggiori informazioni, consulta Concedere l'autorizzazione dei flussi di lavoro per l'accesso alle risorse Google Cloud.

Errori di autorizzazione dell'account di servizio tra progetti

Se ricevi un errore PERMISSION_DENIED quando cerchi di utilizzare un account di servizio tra progetti per eseguire il deployment di un flusso di lavoro, assicurati che il vincolo booleano iam.disableCrossProjectServiceAccountUsage non sia applicato in modo forzato al progetto e di aver configurato correttamente l'account di servizio. Per ulteriori informazioni, consulta Eseguire il deployment di un flusso di lavoro con un account di servizio tra progetti.

Il nome della risorsa deve essere conforme a RFC 1123

L'esecuzione del flusso di lavoro non va a buon fine quando un server HTTP risponde con un codice di errore 400. Ad esempio:

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

Per risolvere questo problema, assicurati che il nome della risorsa rispetti lo standard dell'etichetta DNS definito in RFC 1123 e che, quando assegni le variabili, concateni correttamente stringhe ed espressioni.

Ad esempio, non puoi assegnare una variabile di questo tipo: - string: hello-${world}. Procedi invece nel seguente modo:

YAML

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

JSON

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

Espressioni contenenti due punti

In YAML, le espressioni che contengono i due punti possono causare comportamenti imprevisti quando i due punti vengono interpretati come la definizione di una mappa. Sebbene sia possibile eseguire il deployment e l'esecuzione del flusso di lavoro, l'output non sarà quello previsto.

Se crei un flusso di lavoro utilizzando la console Google Cloud, non è possibile eseguirne il rendering visivo nella console Google Cloud e potresti ricevere un avviso simile al seguente:

Avviso di creazione del flusso di lavoro

Puoi risolvere questo problema racchiudendo l'espressione YAML tra virgolette singole:

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

Sconsigliato: ${"a: " +string(a)}

Mappare le chiavi utilizzando caratteri non alfanumerici

Quando accedi alle chiavi mappa con caratteri non alfanumerici (ad esempio, il punto esclamativo in "special!key": value), devi racchiudere il nome della chiave tra virgolette. Se il nome della chiave non è racchiuso tra virgolette, non è possibile eseguire il deployment del flusso di lavoro. Ad esempio, se provi a eseguire il deployment del seguente codice sorgente, viene generato un valore token recognition error:

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

Per risolvere il problema, utilizza il seguente codice per restituire l'output:

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

Espressioni multiple in un elenco

L'utilizzo di più espressioni all'interno di un elenco come il seguente esempio di intervallo di iterazione non è un codice YAML valido:

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

Puoi risolvere il problema procedendo in uno dei seguenti modi:

  • Inserisci l'elenco all'interno di un'espressione:

    ${[rangeStart, rangeEnd]}

  • Racchiudi ogni espressione tra virgolette singole:

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

Il risultato è quindi un elenco di due valori, come previsto.

Chiavi di crittografia gestite dal cliente (CMEK)

Potresti riscontrare errori quando utilizzi Cloud KMS con Workflows. La seguente tabella descrive i diversi problemi e le modalità di risoluzione.

Problema Descrizione
Autorizzazione cloudkms.cryptoKeyVersions.useToEncrypt negata La chiave Cloud KMS fornita non esiste o l'autorizzazione non è configurata correttamente.

Soluzione:

La versione della chiave non è abilitata La versione della chiave Cloud KMS fornita è stata disabilitata.

Soluzione: riattiva la versione della chiave Cloud KMS.

La regione del keyring non corrisponde alla risorsa da proteggere La regione del keyring KMS fornita è diversa da quella del flusso di lavoro.

Soluzione: utilizza un keyring e un flusso di lavoro protetto di Cloud KMS dalla stessa regione. (tieni presente che possono trovarsi in progetti diversi). Per maggiori informazioni, consulta le località di Cloud KMS e le località di Workflows.

Il limite di quota di Cloud KMS è stato superato È stato raggiunto il limite di quota per le richieste Cloud KMS.

Soluzione: limita il numero di chiamate Cloud KMS o aumenta il limite di quota. Per maggiori informazioni, consulta la pagina relativa alle quote di Cloud KMS.

Entità richiesta non trovata durante l'utilizzo del connettore Cloud Run

L'esecuzione del flusso di lavoro non va a buon fine quando un server HTTP risponde con un codice di errore 404 durante il tentativo di utilizzare il metodo del connettore, googleapis.run.v1.namespaces.jobs.create.

Questo metodo richiede di specificare la posizione dell'endpoint HTTP. Ad esempio, us-central1 o asia-southeast1. Se non specifichi una località, viene utilizzato l'endpoint globale https://run.googleapis.com. Tuttavia, questa località supporta solo metodi elenco.

Per risolvere questo problema, assicurati di specificare un argomento location quando chiama il connettore. Per le opzioni di località dell'API Cloud Run Admin, consulta Endpoint di servizio.

Limiti delle risorse

Se si verificano limiti delle risorse o un errore come ResourceLimitError, MemoryLimitExceededError o ResultSizeLimitExceededError, puoi liberare memoria cancellando le variabili. Ad esempio, potresti liberare la memoria necessaria per i passaggi successivi. Oppure, potresti ricevere chiamate con risultati che non ti interessano e puoi ometterli del tutto.

Rientro YAML

Il rientro YAML è significativo e deve essere di almeno due spazi per livello di rientro. Un rientro insufficiente può causare errori e un nuovo livello deve essere posizionato ad almeno due spazi dall'inizio del testo nella riga precedente.

Ad esempio, quanto segue specifica erroneamente un elemento dell'elenco contenente una mappa con elementi stepName e call:

- stepName:
  call: sys.log

Dovresti invece far rientrare la riga successiva di due spazi per nidificare call all'interno di stepName:

- stepName:
    call: sys.log

Assicurati di utilizzare gli spazi, anziché i caratteri Tab, per far rientrare le righe.

Passaggi successivi