Risoluzione dei problemi

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

Per saperne di più, consulta le sezioni relative al monitoraggio e Workflows di debugging.

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 trovato uno. I tipi più comuni degli errori di deployment sono:

  • Riferimento a una variabile, un passaggio o 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}

Nella seguente console Google Cloud viene utilizzato questo codice sorgente errato ed esempi della 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 un deployment non riuscito. Il messaggio di errore segnala il problema nel codice sorgente, specificando l'origine dell'errore, ove 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 varA anziché varC.

Errori di autorizzazione per l'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 di 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 al servizio uno o più ruoli IAM che contengono il numero autorizzazioni necessarie 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 ulteriori informazioni, consulta Concedere un'autorizzazione dei flussi di lavoro per l'accesso alle risorse Google Cloud.

Errori HTTP 429 Too many requests

Esiste un numero massimo di flussi di lavoro attivi 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 si crea un'esecuzione utilizzando executions.run oppure executions.create connettore in un flusso di lavoro, il backlogging dell'esecuzione è disattivato per impostazione predefinita. Puoi e la configurazione tramite l'impostazione esplicita del nome disableConcurrencyQuotaOverflowBuffering su false.
  • Per le esecuzioni attivate da Pub/Sub, il backlogging delle esecuzioni è è disattivata e non può essere configurata.

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

Puoi anche abilita una coda di Cloud Tasks per eseguire flussi di lavoro figlio a un tasso da te definito e di ottenere un tasso di esecuzione migliore; in questo caso, potresti voler usare esplicitamente disabilita il backlogging dell'esecuzione.

Errori di autorizzazione per gli account di servizio tra progetti

Se ricevi un errore PERMISSION_DENIED quando tenti di utilizzare un tra progetti per il deployment di un flusso di lavoro, assicurati che Il vincolo booleano iam.disableCrossProjectServiceAccountUsage non è applicato per il 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 di 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 comportamenti imprevisti quando I due punti sono interpretati come la definizione di una 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 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 della mappa con caratteri non alfanumerici (ad esempio, il punto esclamativo in "special!key": value), devi racchiudere il nome della chiave citazioni. 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, token recognition error viene lanciata:

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

Puoi risolvere il problema effettuando una delle seguenti operazioni:

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

    ${[rangeStart, rangeEnd]}

  • Inserisci ogni espressione tra virgolette singole:

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

Il risultato sarà 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 come risolverli.

Problema Descrizione
L'autorizzazione cloudkms.cryptoKeyVersions.useToEncrypt è stata negata La chiave Cloud KMS fornita non esiste oppure 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 dalla regione del flusso di lavoro.

Soluzione: utilizza un keyring di Cloud KMS e della stessa regione. Tieni presente che possono trovarsi in progetti diversi. Per ulteriori informazioni, vedi 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 della quota. Per ulteriori informazioni, vedi 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 di 404 quando provi a usare il metodo del connettore, googleapis.run.v1.namespaces.jobs.create

Questo metodo richiede la specifica della 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; ma questa posizione supporta solo i metodi 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, vedi endpoint di servizio.

Limiti delle risorse

Se riscontri limiti delle risorse o un come ResourceLimitError, MemoryLimitExceededError o ResultSizeLimitExceededError, puoi liberare memoria cancellazione delle variabili. Ad esempio, potresti voler liberare la memoria necessaria per i passaggi successivi. Oppure potresti ricevere chiamate con risultati che non ti interessano e omettere del tutto i risultati.

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 far rientrare le righe.

Passaggi successivi