Risoluzione dei problemi

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

Per ulteriori informazioni, consulta la sezione relativa al monitoraggio e al debug di Workflows.

Errori di deployment

Quando un flusso di lavoro viene implementato, Workflows controlla che il codice sorgente sia privo di errori e corrisponda alla sintassi del linguaggio. Workflows restituisce un errore se ne viene rilevato uno. I tipi più comuni di errori di implementazione sono:

  • Riferimento a una variabile, un passaggio o un flusso di lavoro secondario non definito
  • Sintassi errata
    • Rientro errato
    • {, }, ", - o : mancante o estraneo

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 nei seguenti esempi della console Google Cloud e gcloud CLI.

Console

Quando si verifica un errore di deployment, Workflows mostra 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 nella 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 di autorizzazione 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 sua creazione. Per risolvere il problema, devi concedere all'account di servizio uno o più ruoli IAM contenenti le autorizzazioni minime richieste per gestire il 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 lo esegue sia stato concesso un ruolo che includa l'autorizzazione logging.logEntries.create. Per saperne di più, consulta Concedere un'autorizzazione dei flussi di lavoro per l'accesso alle risorse Google Cloud.

Errori HTTP 404 No such object o Not found

Quando utilizzi il connettore Cloud Storage, l'esecuzione del flusso di lavoro non va a buon fine quando un server HTTP risponde con un codice di errore 404. Ad esempio:

HTTP server responded with error code 404
in step "read_input_file", routine "main", line: 13
{
  "body": "Not Found",
  "code": 404,
  ...
}

Devi codificare in URL i nomi degli oggetti per garantire la sicurezza del percorso. Puoi utilizzare le funzioni url_encode e url_encode_plus per codificare i caratteri applicabili quando appaiono nel nome dell'oggetto o nella stringa di query di un URL richiesta. Ad esempio:

- 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}

Se non esegui la codifica URL del nome dell'oggetto e il bucket di archiviazione contiene cartelle, la richiesta non andrà a buon fine. Per ulteriori informazioni, consulta Codifica delle parti del percorso dell'URL e Considerazioni sulla denominazione di Cloud Storage.

Errori HTTP 429 Too many requests

Esiste un numero massimo di esecuzioni di flussi di lavoro attivi che possono essere eseguite contemporaneamente. Una volta esaurita questa quota, se la funzionalità di posticipazione delle esecuzioni è disattivata o se viene raggiunta la quota per le esecuzioni in coda, le nuove esecuzioni non vanno a buon fine con un codice di stato HTTP 429 Too many requests.

La coda di esecuzione ti consente di mettere in coda le esecuzioni del flusso di lavoro una volta raggiunta la quota di esecuzioni contemporaneamente. Per impostazione predefinita, il backlogging dell'esecuzione è abilitato per tutte le richieste (incluse quelle attivate da Cloud Tasks) con le seguenti eccezioni:

  • Quando crei un'esecuzione utilizzando un connettore executions.run o executions.create in un flusso di lavoro, la coda di lavoro delle esecuzioni è disabilitata per impostazione predefinita. Puoi configurarlo impostando esplicitamente il campo disableConcurrencyQuotaOverflowBuffering dell'esecuzione su false.
  • Per le esecuzioni attivate da Pub/Sub, il backlog delle esecuzioni è disabilitato e non può essere configurato.

Per saperne di più, consulta Gestire le code di esecuzione.

Puoi anche abilitare una coda Cloud Tasks per eseguire i flussi di lavoro secondari a una frequenza che definisci e ottenere una percentuale di esecuzione migliore. In questo caso, potrebbe essere opportuno disattivare esplicitamente l'accumulo di attività in attesa di esecuzione.

Errori di autorizzazione dell'account di servizio tra progetti

Se ricevi un errore PERMISSION_DENIED quando tenti di utilizzare un account di servizio tra progetti per eseguire il deployment di un flusso di lavoro, assicurati che il vincolo booleano PERMISSION_DENIED non venga applicato per il tuo progetto e che tu abbia configurato correttamente l'account di servizio.iam.disableCrossProjectServiceAccountUsage 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 il problema, assicurati che il nome della risorsa segua lo standard dell'etichetta DNS come definito nel documento RFC 1123 e che, quando assegni le variabili, concatena correttamente le stringhe e le espressioni.

Ad esempio, non puoi assegnare una variabile come questa: - 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 contenenti due punti possono causare un comportamento imprevisto quando il colon viene interpretato come una definizione di mappa. Sebbene sia possibile eseguire il deployment e il flusso di lavoro, l'output non sarà quello previsto.

Se crei un flusso di lavoro utilizzando la console Google Cloud, il flusso di lavoro non può essere visualizzato nella console Google Cloud e potresti ricevere un avviso simile al seguente:

Avviso sulla creazione del flusso di lavoro

Per risolvere il problema, racchiudi l'espressione YAML tra virgolette singole:

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

Non consigliato: ${"a: " +string(a)}

Chiavi mappa che utilizzano 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, il flusso di lavoro non può essere eseguito. Ad esempio, se provi a eseguire il deployment del seguente codice sorgente, viene generato un messaggio di errore 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"]}'

Più espressioni in un elenco

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

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

Per risolvere il problema, esegui una delle seguenti operazioni:

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

    ${[rangeStart, rangeEnd]}

  • Inserisci 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 tabella seguente descrive i diversi problemi e come risolverli.

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

Soluzione:

La versione della chiave non è attivata La versione della chiave Cloud KMS fornita è stata disattivata.

Soluzione: riattiva la versione della chiave Cloud KMS.

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

Soluzione: utilizza un portachiavi Cloud KMS e un flusso di lavoro protetto della stessa regione. Tieni presente che possono trovarsi in progetti diversi. Per ulteriori informazioni, consulta Località Cloud KMS e Località dei flussi di lavoro.

Il limite di quota di Cloud KMS è stato superato Hai 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 ulteriori informazioni, consulta Quote di Cloud KMS.

Entità richiesta non trovata quando si utilizza il 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 quando si tenta di utilizzare il metodo del connettore googleapis.run.v1.namespaces.jobs.create.

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

Per risolvere il problema, assicurati di specificare un argomento location quando chiami il connettore. Per le opzioni di posizione dell'API Cloud Run Admin, consulta endpoint di servizio.

Limiti delle risorse

Se riscontri limiti di risorse o un errore come ResourceLimitError, MemoryLimitExceededError o ResultSizeLimitExceededError, puoi liberare memoria pulendo le variabili. Ad esempio, potresti voler liberare la memoria necessaria per i passaggi successivi. In alternativa, potresti avere 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 separato dall'inizio del testo nella riga precedente da almeno due spazi.

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

- stepName:
  call: sys.log

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

- stepName:
    call: sys.log

Assicurati di utilizzare spazi anziché caratteri di tabulazione per i rientri delle righe.

Passaggi successivi