Questa pagina mostra come risolvere i problemi che potresti riscontrare durante l'utilizzo di Workflows.
Per saperne di più, consulta Monitoraggio ed esecuzione del debug di Workflows.
Errori di deployment
Quando viene eseguito il deployment di un workflow, Workflows verifica che il codice sorgente non contenga errori e che corrisponda alla sintassi del linguaggio. Se viene rilevato un errore, Workflows lo restituisce. I tipi più comuni di errori di deployment sono:
- Riferimento a una variabile, un passaggio o un subworkflow non definiti
- Sintassi errata
- Rientro errato
- Mancanza o presenza di
{,},",-, o:
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 negli esempi di Google Cloud console e gcloud CLI riportati di seguito.
Console
Quando si verifica un errore di deployment, Workflows visualizza il messaggio di errore
in un banner nella pagina Modifica workflow:
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
L'esecuzione del workflow 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 workflow è associato a un account di servizio IAM al momento della creazione. Per risolvere il problema, devi concedere al service account uno o più ruoli IAM che contengano le autorizzazioni minime richieste per gestire il workflow. Ad esempio, se vuoi consentire al workflow di inviare log a Cloud Logging, assicurati che al account di servizio che esegue il workflow sia stato concesso un ruolo che includa l'autorizzazione logging.logEntries.create. Per saperne di più, consulta
Concedere a un workflow l'autorizzazione ad accedere alle risorse Google Cloud .
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, ... }
Devi codificare gli URL dei nomi degli oggetti in modo che siano sicuri per i percorsi. Puoi utilizzare le
url_encode e
url_encode_plus
funzioni per codificare i caratteri applicabili quando vengono visualizzati nel nome dell'oggetto
o nella stringa di query di un URL della 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 sui nomi 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, e se la coda di esecuzione è 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 workflow una volta raggiunta la quota di esecuzioni simultanee. Per impostazione predefinita, la coda di esecuzione è attivata per tutte le richieste (incluse quelle attivate da Cloud Tasks) con le seguenti eccezioni:
- Quando crei un'esecuzione utilizzando un
executions.runoexecutions.createconnettore in un workflow, la coda di esecuzione è disattivata per impostazione predefinita. Puoi configurarla impostando esplicitamente il campodisableConcurrencyQuotaOverflowBufferingdell'esecuzione sufalse. - Per le esecuzioni attivate da Pub/Sub, la coda di esecuzione è disattivata e non può essere configurata.
Per saperne di più, consulta Gestire la coda di esecuzione.
Puoi anche abilitare una coda di Cloud Tasks per eseguire i workflow secondari a una velocità che definisci e ottenere una velocità di esecuzione migliore; in questo caso, potresti voler disattivare esplicitamente il backlogging dell'esecuzione.
Errori di autorizzazione del 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 Eseguire 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 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 in questo modo: - 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. Anche se è possibile eseguire il deployment e l'esecuzione del workflow, l'output non sarà quello previsto.
Se crei un workflow utilizzando la Google Cloud console, il workflow non può essere visualizzato graficamente nella Google Cloud console e potresti ricevere un avviso simile al seguente:
Puoi risolvere il problema racchiudendo l'espressione YAML tra virgolette singole:
Consigliato: '${"a: " +string(a)}'
Non consigliato: ${"a: " +string(a)}
Chiavi della 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 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 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 seguente, non è un codice YAML valido:
[${rangeStart}, ${rangeEnd}])
Puoi risolvere il problema 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 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 disattivata.
Soluzione: Riattiva la versione della chiave Cloud KMS. |
| La regione del portachiavi non corrisponde alla risorsa da proteggere | La regione del portachiavi KMS fornita è diversa dalla regione del
workflow.
Soluzione: utilizza un portachiavi Cloud KMS e un workflow protetto workflow della stessa regione. (Tieni presente che possono trovarsi in progetti diversi.) Per saperne di più, consulta Località di Cloud KMS e Località di Workflows. |
| 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 saperne di più, consulta Quote di Cloud KMS. |
Entità richiesta non trovata quando si utilizza il connettore Cloud Run
L'esecuzione del workflow non va a buon fine quando un server HTTP risponde con un codice di errore
di 404 quando tenti 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
Endpoint di servizio.
Limiti delle risorse
Se riscontri limiti di 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.
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 di almeno due spazi da l'inizio del testo nella riga precedente.Ad esempio, il seguente codice specifica in modo errato un elemento di elenco contenente una mappa con gli 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 gli spazi anziché i caratteri di tabulazione per rientrare le righe.