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: 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
oppureexecutions.create
connettore in un flusso di lavoro, il backlogging dell'esecuzione è disattivato per impostazione predefinita. Puoi e la configurazione tramite l'impostazione esplicita del nomedisableConcurrencyQuotaOverflowBuffering
sufalse
. - 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:
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.