Risoluzione dei problemi

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

Per saperne di più, consulta Monitoraggio e Debug Workflows.

Errori di deployment

Quando viene eseguito il deployment di un workflow, Workflows verifica che il codice sorgente non contenga errori e corrisponda alla sintassi del linguaggio. Workflows restituisce un errore se ne viene trovato uno. I tipi più comuni di errori di deployment sono:

  • Riferimento a una variabile, un passaggio o un subworkflow non definiti
  • Sintassi errata
    • Rientro non corretto
    • {, }, ", - o : mancanti o estranei

Ad esempio, il seguente codice sorgente genera un errore di deployment perché la dichiarazione 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 di console Google Cloud e gcloud CLI.

Console

Quando si verifica un errore di deployment, Workflows visualizza il messaggio di errore in un banner nella pagina Modifica workflow: 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 workflow. In questo caso, fai riferimento a varA anziché a varC.

Errori di autorizzazione del account di servizio HTTP 403

Potresti riscontrare un errore HTTP 403 (PERMISSION_DENIED) durante l'esecuzione di un workflow o durante il deployment o l'aggiornamento di un workflow.

Autorizzazione negata durante l'esecuzione di un workflow

L'esecuzione del workflow non va a buon fine quando un server HTTP risponde con un codice di errore 403 perché il account di servizio del workflow non dispone dell'autorizzazione per accedere a una risorsa di destinazione. Ad esempio:

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 workflow è associato a un account di servizio Identity and Access Management (IAM) al momento della creazione. Per risolvere il problema, concedi al account di servizio del workflow uno o più ruoli IAM che contengono le autorizzazioni minime necessarie per accedere alle risorse utilizzate dal workflow. Ad esempio, per consentire al workflow di inviare log a Cloud Logging, assicurati che al account di servizio che esegue il workflow sia concesso un ruolo che includa l'autorizzazione logging.logEntries.create. Per saperne di più, consulta Concedi l'autorizzazione dei workflow per l'accesso alle risorse Google Cloud .

Autorizzazione negata durante il deployment o l'aggiornamento di un workflow

Quando esegui il deployment o l'aggiornamento di un workflow, la richiesta potrebbe non riuscire con un errore HTTP 403 (PERMISSION_DENIED) se non disponi dell'autorizzazione per agire come account di servizio del workflow. Ad esempio:

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

o

permission iam.serviceAccounts.ActAs is required on the workflow's new/current
service account to set it or the workflow source contents

Per risolvere questo problema, concedi all'entità che esegue il deployment o l'aggiornamento del workflow un ruolo che includa l'autorizzazione iam.serviceAccounts.actAs, ad esempio Service Account User (roles/iam.serviceAccountUser). A seconda dell'operazione, concedi questo ruolo nel seguente account di servizio:

  • Aggiornamento solo del codice sorgente del workflow (senza aggiornare il service account): concedi il ruolo al account di servizio esistente associato al workflow.
  • Creazione di un workflow, aggiornamento del account di servizio o aggiornamento sia del codice sorgente che del service account: concedi il ruolo al nuovo service account che stai associando al workflow.

Per saperne di più, consulta Autorizzazioni dei service account.

Errori HTTP 404 No such object o Not found

Quando utilizzi il connettore Cloud Storage, l'esecuzione del workflow 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,
  ...
}

Per garantire la sicurezza del percorso, devi codificare gli URL dei nomi degli oggetti. Puoi utilizzare le funzioni url_encode e url_encode_plus per codificare i caratteri applicabili quando vengono visualizzati nel nome dell'oggetto o nella stringa di query di un URL di 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 codifichi l'URL del nome dell'oggetto e il bucket di archiviazione contiene cartelle, la richiesta non andrà a buon fine. Per saperne di più, 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 workflow attive che possono essere eseguite contemporaneamente. Una volta esaurita questa quota, se il backlog delle esecuzioni è disabilitato o se viene raggiunta la quota per le esecuzioni in backlog, le nuove esecuzioni non vanno a buon fine e viene restituito un codice di stato HTTP 429 Too many requests.

Il backlog delle esecuzioni consente di mettere in coda le esecuzioni del workflow una volta raggiunta la quota di esecuzioni simultanee. Per impostazione predefinita, il backlog di 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 workflow, il backlogging delle esecuzioni è disabilitato 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 Gestisci il backlog di esecuzione.

Puoi anche abilitare una coda di Cloud Tasks per eseguire i workflow secondari a una frequenza definita da te e ottenere una frequenza di esecuzione migliore. In questo caso, ti consigliamo di disabilitare esplicitamente il backlogging dell'esecuzione.

Errori di autorizzazione dei 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 workflow, assicurati che il vincolo booleano iam.disableCrossProjectServiceAccountUsage non sia applicato al tuo progetto e di aver configurato correttamente il account di servizio. Per saperne di più, consulta Esegui il deployment di un workflow con un service account tra progetti.

Il nome della risorsa deve essere conforme a RFC 1123

L'esecuzione del workflow 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 delle etichette DNS definito in RFC 1123 e che, quando assegni le variabili, concateni correttamente stringhe ed espressioni.

Ad esempio, non puoi assegnare una variabile come questa: - string: hello-${world}. Segui, invece, questi passaggi:

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 i due punti vengono interpretati come definizione di una mappa. Sebbene sia possibile eseguire il deployment e l'esecuzione del workflow, l'output non sarà quello previsto.

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

Avviso di creazione del workflow

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

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

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

Chiavi di 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, non è possibile eseguire il deployment del workflow. Ad esempio, se provi a eseguire il deployment del seguente codice sorgente, viene generato un 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 di intervallo di iterazione riportato di seguito non è un codice YAML valido:

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

Per risolvere il problema, esegui una delle seguenti operazioni:

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

    ${[rangeStart, rangeEnd]}

  • Racchiudi ogni espressione tra virgolette singole:

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

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

Chiavi di crittografia gestite dal cliente (CMEK)

Potresti riscontrare errori durante l'utilizzo di Cloud KMS con Workflows. La tabella seguente descrive i diversi problemi e come risolverli.

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 delle chiavi automatizzate non corrisponde alla risorsa da proteggere La regione della chiave automatizzata KMS fornita è diversa da quella del workflow.

Soluzione: utilizza un keyring Cloud KMS e un flusso di lavoro protetto della stessa regione. Tieni presente che possono trovarsi in progetti diversi. Per saperne di più, consulta Località di Cloud KMS e Località di Workflows.

Limite di quota di Cloud KMS superato Hai raggiunto il limite della quota per le richieste Cloud KMS.

Soluzione: limita il numero di chiamate Cloud KMS o aumenta il limite di quota. Per saperne di più, consulta Quote di Cloud KMS.

Entità richiesta non trovata quando si utilizza il connettore Cloud Run

L'esecuzione del workflow non riesce 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 località 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 i metodi di elenco.

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

Limiti delle risorse

Se riscontri limiti delle risorse o un errore come ResourceLimitError, MemoryLimitExceededError o ResultSizeLimitExceededError, puoi liberare memoria cancellando 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.

Indentazione 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 di almeno due spazi rispetto all'inizio del testo nella riga precedente.

Ad esempio, di seguito è riportata una specifica errata di un elemento dell'elenco contenente una mappa con elementi stepName e call:

- stepName:
  call: sys.log

Devi 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 di tabulazione, per rientrare le righe.

Passaggi successivi