Risolvi i problemi relativi a Cloud Run Functions
Questo documento mostra come risolvere i problemi relativi ai messaggi di errore e risolvere i problemi durante l'utilizzo di Cloud Run Functions. Se hai creato o eseguito il deployment di una funzione utilizzando Cloud Run, consulta Risolvere i problemi di Cloud Run.
Deployment
Questa sezione elenca i problemi che potresti riscontrare con il deployment e fornisce suggerimenti su come risolverli. Molti dei problemi che potresti riscontrare durante il deployment sono correlati a ruoli e autorizzazioni o a una configurazione errata.
Utilizzi Identity and Access Management per autorizzare le identità a eseguire azioni amministrative sulle funzioni create utilizzando l'API Cloud Functions v2, ad esempio utilizzando gcloud functions
, l'API REST o Terraform. Le azioni di amministrazione includono
la creazione, l'aggiornamento e l'eliminazione di funzioni. Per saperne di più, consulta
Autorizzare l'accesso con IAM.
All'utente mancano le autorizzazioni per il account di servizio di runtime durante il deployment di una funzione
Ogni funzione è associata a un account di servizio che funge da identità
quando la funzione accede ad altre risorse. Questo account di servizio di runtime può essere l'account di servizio predefinito o un service account gestito dall'utente. Negli ambienti
in cui più funzioni accedono a risorse diverse, è prassi
comune utilizzare identità per funzione
con service account di runtime denominati anziché il service account di runtime predefinito (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Per utilizzare un account di servizio runtime, l'autore del deployment deve disporre dell'autorizzazione
iam.serviceAccounts.actAs
per quel account di servizio. A un utente che
crea un account di servizio di runtime non predefinito viene concessa automaticamente questa
autorizzazione, ma gli altri autori del deployment devono ottenere questa autorizzazione da un utente.
Assegna l'autorizzazione iam.serviceAccounts.actAs
all'account di servizio di runtime
per l'utente con il ruolo Visualizzatore progetto, Sviluppatore Cloud Functions o
Amministratore Cloud Functions.
Il messaggio di errore
Console
You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.
gcloud
Account di servizio predefinito:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
Account di servizio non predefinito:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
Soluzione
Assegna all'utente il ruolo Utente account di servizio (roles/iam.serviceAccountUser
) nel service account di runtime predefinito o non predefinito. Questo ruolo include l'autorizzazione iam.serviceAccounts.actAs
.
Al account di servizio di deployment mancano le autorizzazioni Pub/Sub durante il deployment di una funzione basata su eventi
Il servizio Cloud Functions utilizza il service account dell'agente di servizio Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)
quando esegue azioni amministrative. Per impostazione predefinita, a questo account viene assegnato il ruolo
cloudfunctions.serviceAgent
di Cloud Functions. Per eseguire il deployment
delle funzioni basate su eventi,
il servizio Cloud Functions deve accedere a Pub/Sub
per configurare argomenti e abbonamenti. Se modifichi il ruolo assegnato all'account di servizio senza concedere le autorizzazioni appropriate, il servizio Cloud Functions non può accedere a Pub/Sub e il deployment non va a buon fine.
Il messaggio di errore
Console
Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
Soluzione
Puoi reimpostare il service account sul ruolo predefinito cloudfunctions.serviceAgent.
Il account di servizio runtime predefinito non esiste
Quando non specifichi un service account di runtime gestito dall'utente, Cloud Functions utilizza l'account di servizio Compute predefinito come service account di runtime. I deployment non vanno a buon fine se elimini l'account predefinito senza specificare un account gestito dall'utente.
Il messaggio di errore
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]
Soluzione
Per risolvere il problema, prova una delle seguenti soluzioni:
Specifica un service account di runtime gestito dall'utente prima di eseguire il deployment della funzione.
Recupera l'account di servizio in base all'ID numerico dell'account di servizio predefinito.
L'account di servizio dell'agente di servizio Cloud Functions non dispone delle autorizzazioni del bucket del progetto durante il deployment di una funzione
Le funzioni Cloud Run possono essere attivate solo da eventi provenienti da bucket Cloud Storage nello stesso progetto Google Cloud Platform. Inoltre, il account di servizio dell'agente di servizio Cloud Functions
(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)
necessita di un ruolo cloudfunctions.serviceAgent
nel tuo progetto.
Il messaggio di errore
Console
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
Soluzione
Per risolvere il problema, reimposta questo service account al ruolo predefinito.
L'utente con il ruolo Editor progetto non può rendere pubblica una funzione
Il ruolo Editor progetto dispone di ampie autorizzazioni per gestire le risorse all'interno di un progetto, ma non concede intrinsecamente la possibilità di rendere pubbliche le Cloud Functions. L'utente o il servizio che esegue il deployment della funzione richiederebbe
l'autorizzazione run.services.setIamPolicy
.
Il messaggio di errore
gcloud
ERROR: (gcloud.run.services.add-iam-policy-binding) PERMISSION_DENIED: Permission 'run.services.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME' (or resource may not exist).
Soluzione
Puoi:
Assegna al responsabile del deployment il ruolo Proprietario progetto o Amministratore Cloud Functions.
Concedi l'autorizzazione manualmente creando un ruolo personalizzato.
Verifica se la condivisione limitata per i domini è applicata al progetto.
Il deployment della funzione non riesce quando utilizzi il criterio dell'organizzazione per il limite di utilizzo delle risorse
Se la tua organizzazione utilizza una policy con un vincolo di località delle risorse, limita il deployment delle funzioni nelle regioni limitate dalla policy. Nella console Google Cloud , la regione con limitazioni non sarà disponibile nel menu a discesa delle regioni durante il deployment di una funzione.
Il messaggio di errore
gcloud
ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]
Soluzione
Puoi aggiungere o rimuovere località dagli elenchi allowed_values
o denied_values
di un vincolo di località delle risorse per adattarlo a un deployment riuscito.
Il deployment della funzione non riesce durante l'esecuzione dell'ambito globale della funzione
Questo errore indica che si è verificato un problema con il codice. La pipeline di deployment ha terminato il deployment della funzione, ma non è riuscita nell'ultimo passaggio: l'invio di un controllo di integrità alla funzione. Questo controllo di integrità ha lo scopo di eseguire l'ambito globale di una funzione, che potrebbe generare un'eccezione, arrestarsi in modo anomalo o scadere. L'ambito globale è dove in genere carichi le librerie e inizializzi i client.
Il messaggio di errore
Nei log di Cloud Logging:
Could not create or update Cloud Run service FUNCTION_NAME, Container Healthcheck failed. Revision REVISION_NAMEE is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
Soluzione
Per risolvere il problema, prova una delle seguenti soluzioni:
Per un messaggio di errore più dettagliato, esamina i log di compilazione della funzione.
Se non è chiaro perché la tua funzione non è riuscita a eseguire il suo ambito globale, valuta la possibilità di spostare temporaneamente il codice nell'invocazione della richiesta, utilizzando l'inizializzazione differita delle variabili globali. In questo modo puoi aggiungere istruzioni di log aggiuntive intorno alle librerie client, che potrebbero andare in timeout durante l'istanza (soprattutto se chiamano altri servizi), arrestarsi in modo anomalo o generare eccezioni.
Inoltre, prova ad aumentare il timeout della funzione. Limiti di timeout più lunghi in Cloud Run Functions offrono più spazio per l'inizializzazione e un'allocazione delle risorse più scalabile in un ambiente Cloud Run, il che potrebbe mitigare questo problema se causato dall'esaurimento delle risorse.
Il codice sorgente deve contenere una funzione di punto di ingresso specificata correttamente nel deployment, tramite la console o gcloud.
L'utente con il ruolo Visualizzatore non può eseguire il deployment di una funzione
Gli utenti con il ruolo Visualizzatore progetto o Visualizzatore Cloud Functions hanno accesso di sola lettura alle funzioni e ai relativi dettagli e non possono eseguire il deployment di nuove funzioni. La funzionalità Crea funzione è disattivata nella consoleGoogle Cloud con il seguente errore:
Il messaggio di errore
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']
Soluzione
Assegna all'utente il ruolo Sviluppatore Funzioni Cloud.
Autorizzazioni mancanti per account di servizio di Build
Il messaggio di errore
Nell'errore di deployment della funzione o nei log di build, potresti visualizzare uno dei seguenti errori:
The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.
Step #0 - "fetch": failed to Fetch: failed to download archive gs://gcf-v2-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-v2-sources-PROJECT_NUMBER-LOCATION denied. You must grant Storage Object Viewer permission to PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Step #2 - "build": ERROR: failed to create image cache: accessing cache image "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": connect to repo store "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": GET https://LOCATION-docker.pkg.dev/v2/token?scope=repository%3APROJECT%2Fgcf-artifacts%2FFUNCTION_NAME%2Fcache%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/PROJECT/locations/LOCATION/repositories/gcf-artifacts" (or it may not exist)
Could not build the function due to a missing permission on the build service account. If you didn't revoke that permission explicitly, this could be caused by a change in the organization policies.
Soluzione
Il account di servizio di build deve disporre dell'autorizzazione di lettura dal bucket di origine e delle autorizzazioni di lettura e scrittura per il repository di deployment degli artefatti. Potresti riscontrare questo errore a causa di una modifica del comportamento predefinito di Cloud Build nell'utilizzo dei service account, descritta in Modifica dell'account di servizio Cloud Build.
Per risolvere il problema, utilizza una delle seguenti soluzioni:
- Crea un service account di build personalizzato per i deployment delle funzioni.
- Aggiungi il
ruolo service account Cloud Build
(
roles/cloudbuild.builds.builder
) al service account Compute predefinito. - Consulta le indicazioni di Cloud Build sulle modifiche al account di servizio predefinito e disattiva queste modifiche.
Account di servizio di Build disattivato
Il messaggio di errore
Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.
Soluzione
Per eseguire il deployment di una funzione, è necessario attivare il account di servizio di build. Potresti riscontrare questo errore a causa di una modifica del comportamento predefinito di Cloud Build per l'utilizzo dei service account, descritta in Modifica dell'account di servizio Cloud Build.
Per risolvere il problema, utilizza una delle seguenti soluzioni:
- Crea un service account di build personalizzato per i deployment delle funzioni.
- Abilita il service account Compute predefinito.
- Consulta le indicazioni di Cloud Build sulle modifiche al account di servizio predefinito e disattiva queste modifiche.
Pubblicazione
Questa sezione elenca i problemi di pubblicazione che potresti riscontrare e fornisce suggerimenti su come risolverli.
Errore di autorizzazione di pubblicazione perché la funzione richiede l'autenticazione
Le funzioni HTTP senza l'opzione Consenti chiamate non autenticate abilitata limitano l'accesso agli utenti finali e ai service account che non dispongono delle autorizzazioni appropriate. Questo messaggio di errore indica che il chiamante non dispone dell'autorizzazione per richiamare la funzione.
Il messaggio di errore
Codice di risposta di errore HTTP: 403 accesso negato
Corpo della risposta errore HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
Soluzione
Per risolvere il problema, prova una delle seguenti soluzioni:
Assegna all'utente il ruolo Invoker di Cloud Run Cloud IAM per la funzione specifica.
Esegui di nuovo il deployment della funzione per consentire l'accesso pubblico se questa operazione è supportata dalla tua organizzazione. Questa opzione è utile per i test.
Errore di pubblicazione dovuto alla configurazione di allow internal traffic only
Le impostazioni di ingresso
limitano la possibilità di richiamare una funzione HTTP da risorse
al di fuori del tuo progetto Google Cloud o del perimetro di servizio Controlli di servizio VPC.
Quando configuri l'impostazione Consenti solo traffico interno per il networking in entrata,
questo messaggio di errore indica che sono consentite solo le richieste provenienti da reti VPC
nello stesso progetto o perimetro dei controlli di servizio VPC. Può anche
trattarsi di un errore 404 per l'URL functions.net
predefinito.
Il messaggio di errore
Codice di risposta di errore HTTP: 404 NOT FOUND
Soluzione
Per risolvere questo errore, prova una delle seguenti soluzioni:
Assicurati che la richiesta provenga dal tuo progetto Google Cloud o dal perimetro di servizio dei Controlli di servizio VPC.
Modifica le impostazioni di traffico in entrata per consentire tutto il traffico per la funzione.
Il codice sorgente delle funzioni Cloud Run può anche generare un errore 404 a causa di URL della funzione, metodi HTTP, errori logici e così via errati.
L'invocazione della funzione non dispone di credenziali di autenticazione valide
L'invocazione di una funzione Cloud Run Functions configurata con accesso limitato richiede un token ID. I token di accesso o i token di aggiornamento non funzionano.
Il messaggio di errore
Codice di risposta di errore HTTP: 401 Non autorizzato
Corpo della risposta errore HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
Soluzione
Per risolvere questo errore, segui una di queste soluzioni:
Assicurati che le richieste includano un'intestazione
Authorization: Bearer ID_TOKEN
e che il token sia un token ID, non un token di accesso o di aggiornamento. Se generi questo token manualmente con la chiave privata di un account di servizio, devi scambiare il token JWT autofirmato con un token ID firmato da Google.Richiama la funzione HTTP utilizzando le credenziali di autenticazione nell'intestazione della richiesta. Ad esempio, puoi ottenere un token di identità utilizzando
gcloud
come segue:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEEsegui nuovamente il deployment della funzione per consentire le chiamate non autenticate se questa operazione è supportata dalla tua organizzazione. Questa opzione è utile per i test.
La funzione si interrompe a metà dell'esecuzione o continua a essere eseguita dopo il completamento del codice
Alcuni runtime di Cloud Run functions consentono agli utenti di eseguire attività asincrone. Se la tua funzione crea queste attività, deve anche attendere esplicitamente che vengano completate. In caso contrario, la funzione potrebbe interrompersi al momento sbagliato.
Il comportamento di errore
La funzione presenta uno dei seguenti comportamenti:
- La funzione termina mentre le attività asincrone sono ancora in esecuzione, ma prima che sia trascorso il periodo di timeout specificato.
- La funzione non smette di essere eseguita al termine di queste attività e continua fino allo scadere del periodo di timeout.
Soluzione
Se la funzione termina in anticipo, assicurati che tutte le attività asincrone della funzione siano completate prima che la funzione esegua una delle seguenti azioni:
- Restituzione di un valore
- Risoluzione o rifiuto di un oggetto
Promise
restituito (solo funzioni Node.js) - Generare eccezioni o errori non rilevati
- Invio di una risposta HTTP
- Chiamare una funzione di callback
Se la funzione non viene terminata dopo aver completato le attività asincrone, devi verificare che segnali correttamente le funzioni Cloud Run dopo il completamento. In particolare, assicurati di eseguire una delle operazioni elencate in precedenza non appena la funzione ha terminato le attività asincrone.
Errore di runtime durante l'accesso alle risorse protette dai Controlli di servizio VPC
Per impostazione predefinita, le funzioni Cloud Run utilizzano indirizzi IP pubblici per effettuare richieste in uscita ad altri servizi. Se le tue funzioni non si trovano all'interno di un perimetro di Controlli di servizio VPC, potrebbero ricevere risposte HTTP 403 quando tentano di accedere ai servizi protetti da Controlli di servizio VPC, a causa di negazioni del perimetro di servizio. Google Cloud
Il messaggio di errore
Nei log Risorse controllate, una voce simile alla seguente:
"protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "VPC_SERVICE_CONTROLS", ... "authenticationInfo": { "principalEmail": "CLOUD_FUNCTION_RUNTIME_SERVICE_ACCOUNT", ... "metadata": { "violationReason": "NO_MATCHING_ACCESS_LEVEL", "securityPolicyInfo": { "organizationId": "ORGANIZATION_ID", "servicePerimeterName": "accessPolicies/NUMBER/servicePerimeters/SERVICE_PERIMETER_NAME" ...
Soluzione
Per risolvere questo errore, segui una di queste soluzioni:
La funzione deve instradare tutto il traffico in uscita attraverso la rete VPC. Per ulteriori informazioni, consulta la sezione Deploy di funzioni conformi ai Controlli di servizio VPC.
In alternativa, concedi l'accesso al perimetro all'account di servizio di runtime della funzione. Puoi farlo creando un livello di accesso e aggiungendolo al perimetro di servizio oppure creando un criterio in entrata nel perimetro. Per saperne di più, consulta Utilizzare i Controlli di servizio VPC.
Scalabilità
Questa sezione elenca i problemi di scalabilità e fornisce suggerimenti su come risolverli.
Errori di Cloud Logging relativi agli annullamenti delle richieste di coda in attesa
Gli errori di scalabilità possono verificarsi nei seguenti scenari:
- Un improvviso e notevole aumento del traffico.
- Tempo di avvio a freddo lungo.
- Tempi di elaborazione della richiesta lunghi.
- Tasso di errore elevato della funzione.
- Raggiungimento del limite massimo di istanze e impedimento della scalabilità del sistema.
- Fattori temporanei attribuiti al servizio Cloud Run Functions.
In ogni caso, le funzioni Cloud Run potrebbero non scalare abbastanza rapidamente per gestire il traffico.
Il messaggio di errore
The request was aborted because there was no available instance
severity=WARNING
( codice di risposta: 429) Cloud Run Functions non può scalare a causa del limitemax-instances
che hai impostato durante la configurazione.severity=ERROR
( Response code: 500 ) Cloud Run functions intrinsically cannot manage the rate of traffic.
Soluzione
Per risolvere il problema, risolvi le cause elencate in precedenza.
Per le funzioni basate su trigger HTTP, il client deve implementare il backoff esponenziale e i nuovi tentativi per le richieste che non devono essere eliminate. Se attivi le funzioni Cloud Run da Workflows, puoi utilizzare la sintassi
try/retry
per farlo.Per le funzioni in background o basate su eventi, Cloud Run Functions supporta la consegna at-least-once. Anche senza abilitare esplicitamente il nuovo tentativo, l'evento viene reinvio automatico e l'esecuzione della funzione verrà ritentata. Per saperne di più, consulta Nuovo tentativo per le funzioni basate su eventi.
Se la causa principale del problema è un periodo di errori temporanei più frequenti attribuiti esclusivamente alle funzioni Cloud Run o se hai bisogno di assistenza per il problema, contatta l'assistenza.
Per i problemi relativi agli avvii a freddo, configura il numero minimo di istanze per ridurre il numero di avvii a freddo con un'implicazione di fatturazione più elevata.
Logging
La sezione seguente tratta i problemi relativi alla registrazione e come risolverli.
Le voci di log non hanno livelli di gravità del log o sono errati
Per impostazione predefinita, le funzioni Cloud Run includono il logging di runtime. I log scritti in
stdout
o stderr
vengono visualizzati automaticamente in Cloud Logging.
Tuttavia, per impostazione predefinita, queste voci di log contengono solo messaggi stringa.
Il messaggio di errore
Livelli di gravità mancanti o errati nei log.
Soluzione
Per includere i livelli di gravità dei log, devi inviare una voce di log strutturata.
Gestire o registrare le eccezioni in modo diverso in caso di arresto anomalo
Potresti voler personalizzare la modalità di gestione e registrazione delle informazioni sugli arresti anomali.
Soluzione
Racchiudi la funzione in un blocco try
per personalizzare la gestione delle eccezioni e
la registrazione delle analisi dello stack.
Esempio
import logging
import traceback
def try_catch_log(wrapped_func):
def wrapper(*args, **kwargs):
try:
response = wrapped_func(*args, **kwargs)
except Exception:
# Replace new lines with spaces so as to prevent several entries which
# would trigger several errors.
error_message = traceback.format_exc().replace('\n', ' ')
logging.error(error_message)
return 'Error';
return response;
return wrapper;
#Example hello world function
@try_catch_log
def python_hello_world(request):
request_args = request.args
if request_args and 'name' in request_args:
1 + 's'
return 'Hello World!'
Log troppo grandi in Node.js 10+, Python 3.8, Go 1.13 e Java 11
La dimensione massima per una normale voce di log in questi runtime è 105 KiB.
Soluzione
Invia voci di log più piccole di questo limite.
Log mancanti nonostante le funzioni Cloud Run restituiscano errori
Le funzioni Cloud Run trasmettono i log delle funzioni Cloud Run a un bucket predefinito. Quando crei un progetto, Cloud Run Functions crea e abilita il bucket predefinito. Se il bucket predefinito è disabilitato o se i log della funzione Cloud Run si trovano nel filtro di esclusione, i log non verranno visualizzati in Esplora log.
Soluzione
Attiva i log predefiniti.
I log di Cloud Run Functions non vengono visualizzati in Esplora log
Alcune librerie client di Cloud Logging utilizzano un processo asincrono per scrivere le voci di log. Se una funzione si arresta in modo anomalo o termina in altro modo, è possibile che alcune voci di log non siano ancora state scritte e potrebbero essere visualizzate in un secondo momento. Alcuni log potrebbero essere persi e non possono essere visualizzati in Esplora log.
Soluzione
Utilizza l'interfaccia della libreria client per svuotare le voci di log memorizzate nel buffer prima di uscire dalla funzione oppure utilizza la libreria per scrivere le voci di log in modo sincrono. Puoi anche
scrivere i log in modo sincrono direttamente in stdout
o stderr
.
Log delle funzioni Cloud Run mancanti quando si utilizza il sink del router di log
I sink del router dei log instradano le voci di log a varie destinazioni.
I filtri di esclusione definiscono le voci che puoi ignorare.
Soluzione
Rimuovi il set di filtri di esclusione per resource.type = "cloud_run_revision"
.
Connessioni al database
Quando ci si connette a un database, possono verificarsi diversi problemi, molti
associati al superamento dei limiti di connessione o al timeout. Se nei log viene visualizzato un avviso di Cloud SQL, ad esempio Context deadline exceeded
, potrebbe essere necessario modificare la configurazione della connessione. Per ulteriori informazioni, consulta le
best practice di Cloud SQL.
Networking
Questa sezione elenca i problemi di networking e fornisce suggerimenti su come risolverli.
Connettività di rete
Se tutte le richieste in uscita da una funzione Cloud Run non vanno a buon fine anche dopo aver configurato le impostazioni di uscita, puoi eseguire Connectivity Tests per identificare eventuali problemi di connettività di rete sottostanti. Per saperne di più, vedi Creare ed eseguire test di connettività.
Il connettore di accesso VPC serverless non è pronto o non esiste
Se un connettore di accesso VPC serverless non funziona, potrebbe non utilizzare una maschera di subnet /28
dedicata al connettore come richiesto.
Il messaggio di errore
Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.
Quando le funzioni Cloud Run vengono implementate con un connettore in stato non valido a causa dell'autorizzazione mancante per l'account di servizio agente di servizio API Google PROJECT_NUMBER@cloudservices.gserviceaccount.com
, viene visualizzato il seguente errore:
Il messaggio di errore
Failed to prepare VPC connector. Please try again later.
Soluzione
Elenca le tue subnet
per verificare se il connettore utilizza una maschera di subnet /28
. Se il connettore
non utilizza la maschera di subnet /28
, ricrealo o creane uno nuovo.
Per risolvere il problema, prova una delle seguenti soluzioni:
Se ricrei il connettore, non devi eseguire di nuovo il deployment di altre funzioni. Potresti riscontrare un'interruzione di rete durante la ricreazione del connettore.
Se crei un nuovo connettore alternativo, esegui nuovamente il deployment delle funzioni per utilizzare il nuovo connettore, quindi elimina quello originale. Questo metodo evita l'interruzione della rete.
Assicurati che le funzioni Cloud Run e il relativo connettore siano implementati nella stessa regione.
Per la configurazione del VPC condiviso:
Assicurati che i service account
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
eservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
utilizzati da VPC Connector per il provisioning delle risorse nel progetto non dispongano di autorizzazioni mancanti. Questi service account devono avere il ruoloroles/compute.networkUser
nel progetto host della configurazione VPC condiviso quando il connettore si trova nel progetto di servizio.Se il connettore viene creato nel progetto host, assicurati che il ruolo
Serverless VPC Access User
sia concesso all'agente di servizio Cloud Run nel progetto host.
Se lo stato del connettore mostra l'errore
Connector is in a bad state, manual deletion recommended
e l'agente di servizio delle API di Google non dispone delle autorizzazioni necessarie per eseguire il provisioning delle risorse di calcolo nel progetto del connettore, concediroles/compute.admin
al account di servizioPROJECT_NUMBER@cloudservices.gserviceaccount.com
. In alcuni casi, potrebbe essere necessario ricreare il connettore dopo aver aggiunto queste autorizzazioni.
Il traffico SMTP verso indirizzi IP di destinazione esterni che utilizzano la porta TCP 25 è bloccato
Per una maggiore sicurezza, Google Cloud blocca le connessioni alla porta TCP di destinazione 25
quando invia email dalle funzioni.
Soluzione
Per sbloccare queste connessioni, segui una di queste soluzioni:
Connettiti al server SMTP su una porta diversa, ad esempio la porta TCP
587
o465
.
Errore 404 per l'URL functions.net
predefinito
La disattivazione dell'URL run.app
in Cloud Run impedisce anche l'accesso
all'URL cloudfunctions.net
predefinito per Cloud Run Functions 2ª generazionen). Questo errore
può essere causato anche da un errore di pubblicazione dovuto alla configurazione che consente solo il traffico interno.
Il messaggio di errore
Codice di risposta di errore HTTP: 404 NOT FOUND
Soluzione
Per riattivare l'URL cloudfunctions.net
predefinito per le funzioni Cloud Run (2ª generazione.),
devi riattivare l'URL run.app
in Cloud Run
sostituendo il file service.yaml
con una nuova configurazione in cui
annotations:run.googleapis.com/default-url-disabled: false