Risolvere i problemi relativi alle funzioni Cloud Run
Questo documento mostra come risolvere i problemi indicati dai messaggi di errore e risolvere i problemi relativi all'utilizzo delle funzioni Cloud Run.
Deployment
Questa sezione elenca i problemi che potresti riscontrare durante il deployment e fornisce suggerimenti su come risolverli. Molti dei problemi che potresti riscontrare durante il deployment sono correlati ai ruoli autorizzazioni o 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
e creazione, aggiornamento ed eliminazione di funzioni. Per ulteriori informazioni, consulta
Autorizzare l'accesso con IAM.
Mancano le autorizzazioni dell'utente per l'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 runtime
di servizio possono essere
l'account di servizio predefinito
o un account di servizio gestito dall'utente. Negli ambienti in cui più funzioni accedono a risorse diverse, è prassi comune utilizzare identità per funzione con account di servizio di runtime denominati anziché l'account di servizio di runtime predefinito (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Per utilizzare un account di servizio di runtime, il deployment deve disporre
iam.serviceAccounts.actAs
per quell'account di servizio. A un utente che crea un account servizio di runtime non predefinito viene concessa automaticamente questa autorizzazione, ma gli altri responsabili del deployment devono disporre di questa autorizzazione concessa da un utente.
Assegna l'autorizzazione iam.serviceAccounts.actAs
all'account di servizio di runtime
per l'utente con il Visualizzatore progetto, lo sviluppatore Cloud Functions oppure
Amministratore di 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
Service account 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:'
Service account 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:'
La soluzione
Assegna all'utente il ruolo Utente account di servizio (roles/iam.serviceAccountUser
) nell'account di servizio di runtime predefinito o non predefinito. Questo ruolo include l'autorizzazione iam.serviceAccounts.actAs
.
L'account di servizio del deployment non dispone delle autorizzazioni Pub/Sub durante il deployment di una funzione basata su eventi
Il servizio Cloud Functions utilizza il servizio dell'agente di servizio Cloud Functions
account (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)
quando si eseguono azioni amministrative. Per impostazione predefinita, a questo account viene assegnato il ruolo cloudfunctions.serviceAgent
di Cloud Functions. Per eseguire il deployment
funzioni basate su eventi,
il servizio Cloud Functions deve accedere a Pub/Sub
per configurare argomenti e sottoscrizioni. 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"]
La soluzione
Puoi reimpostare l'account di servizio sul ruolo predefinito cloudfunctions.serviceAgent.
L'account di servizio di runtime predefinito non esiste
Se non specifichi un servizio di runtime gestito dall'utente account, Cloud Functions utilizza il servizio di computing predefinito come il di account di servizio di runtime. I deployment non riescono 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.]
La soluzione
Per risolvere il problema, segui una di queste soluzioni:
Specifica un valore account di servizio di runtime gestito dall'utente prima di eseguire il deployment della funzione.
Annulla l'eliminazione dell'account di servizio tramite l'ID numerico dell'account di servizio predefinito.
All'account di servizio dell'agente di servizio Cloud Functions mancano le autorizzazioni del bucket di progetto durante il deployment di una funzione
Le funzioni Cloud Run possono essere attivate solo da
eventi dai bucket Cloud Storage
lo stesso progetto Google Cloud Platform. Inoltre, il servizio Cloud Functions
Account di servizio agente
(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)
richiede 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"]
La soluzione
Per risolvere il problema, reimposta questo account di servizio sul ruolo predefinito.
L'utente con il ruolo di Editor di progetto non può rendere pubblica una funzione
Il ruolo Editor di progetto dispone di ampie autorizzazioni per gestire le risorse all'interno di un progetto, ma non concede intrinsecamente la possibilità di rendere pubblico Cloud Functions. L'utente o il servizio che esegue il deployment della funzione richiede 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).
La soluzione
Puoi:
Assegna al deployer Proprietario progetto o Ruolo Amministratore Cloud Functions.
Concedi l'autorizzazione manualmente creando un ruolo personalizzato.
Verifica se la condivisione limitata per i domini è impostata per il progetto.
Il deployment delle funzioni non riesce quando si utilizza il criterio dell'organizzazione per la restrizione sulla località delle risorse
Se la tua organizzazione utilizza una località delle risorse vincolo limita il deployment delle funzioni nelle regioni limitate dal . Nella console Google Cloud, la regione con restrizioni non sarà disponibile il menu a discesa della regione 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".]
La soluzione
Puoi aggiungere o rimuovere località dagli elenchi allowed_values
o denied_values
di un vincolo delle località delle risorse per adattarlo al deployment.
Il deployment della funzione non riesce durante l'esecuzione dell'ambito globale della funzione
Questo errore indica un problema con il codice. Il deployment pipeline ha terminato il deployment della funzione, ma non è riuscita nell'ultimo passaggio, l'invio un controllo di integrità della funzione. Questo controllo di integrità è progettato per eseguire lo ambito globale di una funzione, che potrebbe generare un'eccezione, un arresto anomalo o un timeout. Lo scopo globale è dove carichi comunemente le librerie e inizili 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.
La soluzione
Per risolvere il problema, segui una di queste soluzioni:
Per un messaggio di errore più dettagliato, esamina la query log di build e la chiave log del runtime.
Se non è chiaro perché la funzione non sia riuscita a eseguire il suo ambito globale, considera lo spostamento temporaneo del codice nella chiamata della richiesta utilizzando inizializzazione lazy delle variabili globali. In questo modo puoi aggiungere istruzioni di log aggiuntive alle librerie client, che potrebbero avere un timeout durante l'inizializzazione (in particolare se chiamano altri servizi), arrestarsi in modo anomalo o generare eccezioni.
Inoltre, prova ad aumentare il timeout della funzione. Limiti di timeout più lunghi nelle funzioni di Cloud Run offre più spazio per l'inizializzazione e più un'allocazione scalabile delle risorse in un ambiente Cloud Run, per mitigare questo problema se causato dall'esaurimento delle risorse.
Il codice sorgente deve contenere una funzione punto di ingresso correttamente specificato nel deployment, tramite 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 in sola lettura alle funzioni e ai relativi dettagli e non può eseguire il deployment nuove funzioni. La funzionalità Crea funzione non è selezionabile Console Google 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']
La soluzione
Assegna il ruolo utente Sviluppatore Cloud Functions.
Autorizzazioni mancanti per l'account di servizio di Build
Il messaggio di errore
Nell'errore di deployment della funzione o nei log di build, potresti vedere uno dei seguenti i 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.
La soluzione
L'account di servizio di compilazione deve disporre dell'autorizzazione di lettura dal bucket di origine e delle autorizzazioni di lettura e scrittura per il repository di deployment degli elementi. Potresti riscontrare questo errore a causa di una modifica del comportamento predefinito per l'utilizzo degli account di servizio da parte di Cloud Build, descritta in Modifica dell'account di servizio Cloud Build.
Per risolvere il problema, utilizza una di queste soluzioni:
- Crea un account di servizio di Build personalizzato per i deployment delle funzioni.
- Aggiungi il parametro
Ruolo Account di servizio Cloud Build
(
roles/cloudbuild.builds.builder
) all'account di servizio Compute predefinito. - Consulta le indicazioni di Cloud Build sulle modifiche all'account di servizio predefinito e disattiva queste modifiche.
Service account 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.
La soluzione
L'account di servizio di build deve essere abilitato per poter eseguire il deployment di una funzione. Potresti riscontrare questo errore a causa di una modifica nel comportamento predefinito del modo in cui Cloud Build utilizza gli account di servizio, descritti in Modifica dell'account di servizio Cloud Build.
Per risolvere il problema, utilizza una delle seguenti soluzioni:
- Crea un account di servizio di Build personalizzato per i deployment delle funzioni.
- Abilita l'account di servizio Compute predefinito.
- Rivedi le indicazioni di Cloud Build sulle modifiche all'account di servizio predefinito e disattivare queste modifiche.
Pubblicazione
In questa sezione sono elencati i problemi di pubblicazione che potresti riscontrare suggerimenti su come risolverli.
Errore di autorizzazione di pubblicazione a causa della funzione che richiede l'autenticazione
Funzioni HTTP senza abilitata l'opzione Consenti chiamate non autenticate, limita l'accesso agli utenti finali e agli account di servizio che non dispongono autorizzazioni. Questo messaggio di errore indica che il chiamante non dispone dell'autorizzazione per richiamare la funzione.
Il messaggio di errore
Codice di risposta dell'errore HTTP: 403 Forbidden
Corpo della risposta di errore HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
La soluzione
Per risolvere il problema, segui una delle seguenti soluzioni:
Assegna all'utente il ruolo Cloud IAM Invoker di Cloud Run. per la funzione specifica.
Esegui nuovamente il deployment della funzione per consentire le chiamate non autenticate, se questa opzione è supportata dalla tua organizzazione. È utile per i test.
Errore di pubblicazione a causa della configurazione di allow internal traffic only
Le impostazioni di ingresso
limitano la possibilità che una funzione HTTP venga invocata da risorse
al di fuori del progetto Google Cloud o del perimetro di servizio VPC Service Controls.
Quando configuri l'impostazione Consenti solo traffico interno per la rete di ingresso, questo messaggio di errore indica che sono consentite solo le richieste provenienti da reti VPC nello stesso progetto o perimetro di Controlli di servizio VPC. Può anche essere un errore 404 per l'URL functions.net
predefinito.
Il messaggio di errore
Codice di risposta di errore HTTP: 404 NOT FOUND
La soluzione
Per risolvere questo errore, segui una delle seguenti soluzioni:
Assicurati che la richiesta provenga dal tuo progetto Google Cloud o dal perimetro di servizio VPC Service Controls.
Modifica le impostazioni di ingresso in modo da consentire tutto il traffico per la funzione.
Il codice sorgente delle funzioni Cloud Run può anche generare un codice 404 a causa di URL della funzione, metodi HTTP, errori logici e così via errati.
La chiamata della funzione non dispone di credenziali di autenticazione valide
Per richiamare una funzione Cloud Run configurata con accesso limitato è necessario un token ID. Token di accesso o token di aggiornamento non funzionano.
Il messaggio di errore
Codice di risposta di errore HTTP: 401 Non autorizzato
Corpo della risposta all'errore HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
La 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 lo generi manualmente con la chiave privata di un account di servizio, devi scambiare il token JWT autofirmato con un token di identità firmato da Google. Per Per ulteriori informazioni, consulta Autenticazione per le chiamate.Richiamare la funzione HTTP utilizzando le credenziali di autenticazione nella richiesta intestazione. Ad esempio, puoi ottenere un token di identità utilizzando
gcloud
come segue: Per saperne di più, consulta Autenticazione per l'invocazione.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 opzione è supportata dalla tua organizzazione. È utile per i test.
La funzione si interrompe a metà esecuzione o continua in esecuzione al termine del codice
Alcuni runtime di Cloud Run Functions consentono agli utenti di eseguire attività asincrone. Se la funzione crea queste attività, deve anche attendere esplicitamente il loro completamento. In caso contrario, la funzione potrebbe interrompere l'esecuzione al momento sbagliato.
Il comportamento dell'errore
La funzione mostra uno dei seguenti comportamenti:
- La funzione termina mentre le attività asincrone sono ancora in esecuzione, prima che sia trascorso il periodo di timeout specificato.
- L'esecuzione della funzione non si interrompe al termine di queste attività e continua affinché sia trascorso il periodo di timeout.
La soluzione
Se la funzione termina in anticipo, devi assicurarti che tutte le attività asincrone della funzione siano completate prima che la funzione esegua una delle seguenti azioni:
- Restituire un valore
- Risoluzione o rifiuto di un oggetto
Promise
restituito (solo funzioni Node.js) - Generazione di eccezioni o errori non rilevati
- Invio di una risposta HTTP
- Chiamare una funzione di callback
Se la funzione non riesce a terminare dopo aver completato le attività asincrone, devi verificare che segnali correttamente le funzioni Cloud Run al termine. In particolare, assicurati di eseguire una delle elencate in precedenza non appena la funzione ha terminato lo stato attività di machine learning.
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 inviare richieste in uscita ad altri servizi. Se le tue funzioni non si trovano all'interno di un Controlli di servizio VPC il perimetro potrebbe ricevere risposte HTTP 403 durante il tentativo per accedere ai servizi Google Cloud protetti dai Controlli di servizio VPC a causa del perimetro di servizio rifiuti.
Il messaggio di errore
Nei log delle risorse sottoposte a controllo, una voce come la 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" ...
La soluzione
Per risolvere questo errore, segui una delle seguenti soluzioni:
La funzione deve instradare tutto il traffico in uscita attraverso la rete VPC. Per ulteriori informazioni, consulta la sezione Eseguire il deployment di funzioni conformi ai Controlli di servizio VPC.
In alternativa, concedi al service account di runtime della funzione l'accesso al perimetro. Puoi farlo creando un livello di accesso e aggiungendolo al perimetro di servizio oppure creando un criterio in entrata nel perimetro. Per ulteriori informazioni, consulta Utilizzare i Controlli di servizio VPC con funzioni esterne a un perimetro.
Scalabilità
Questa sezione elenca i problemi di scalabilità e fornisce suggerimenti su come risolverli.
Errori di Cloud Logging relativi all'interruzione delle richieste in coda in attesa
Gli errori di scalabilità possono verificarsi nei seguenti scenari:
- Un enorme aumento improvviso del traffico.
- Inizio a freddo lungo.
- Tempo di elaborazione delle richieste lungo.
- Tasso di errore elevato della funzione.
- Raggiungere il limite massimo di istanze e impedire la scalabilità del sistema.
- Fattori temporanei attribuiti al servizio Funzioni Cloud Run.
In ogni caso, le funzioni di Cloud Run potrebbero non fare lo scale up abbastanza rapidamente per gestire per via del traffico.
Il messaggio di errore
The request was aborted because there was no available instance
severity=WARNING
(codice di risposta: 429) Le funzioni Cloud Run non possono essere scalate a causa del limite dimax-instances
impostato durante la configurazione.severity=ERROR
(codice di risposta: 500) Le funzioni Cloud Run non possono gestire intrinsecamente la frequenza del traffico.
La soluzione
Per risolvere il problema, risolvi le cause elencate in precedenza.
Per le funzioni basate su trigger HTTP, chiedi al client di implementare il backoff e i tentativi di nuovo accesso esponenziali per le richieste che non devono essere ignorate. Se l'attivazione di funzioni Cloud Run da Workflows, puoi usare la sintassi
try/retry
per raggiungere questo obiettivo.Per le funzioni in background o basate su eventi, le funzioni Cloud Run supportano la consegna almeno una volta. Anche senza l'attivazione esplicita di nuovi tentativi, l'evento viene automaticamente verrà pubblicato di nuovo e verrà effettuato un nuovo tentativo di esecuzione della funzione. Consulta Ripetere le funzioni basate su eventi per ulteriori informazioni.
Se la causa principale del problema è un periodo di gravi errori temporanei attribuite esclusivamente alle funzioni di Cloud Run o se hai bisogno di assistenza per risolvere 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 impatto maggiore sulla fatturazione.
Logging
La sezione seguente illustra i problemi relativi al logging e come risolverli.
Le voci dei log non hanno livelli di gravità o sono errati
Le funzioni Cloud Run includono il logging di runtime per impostazione predefinita. Log scritti in
stdout
o stderr
vengono visualizzati automaticamente in Cloud Logging.
Tuttavia, per impostazione predefinita, queste voci di log contengono solo messaggi di stringa.
Il messaggio di errore
Nessun livello di gravità o livelli errati nei log.
La soluzione
Per includere le gravità dei log, devi inviare un voce di log strutturato.
Gestire o registrare le eccezioni in modo diverso in caso di arresto anomalo
Può essere utile personalizzare il modo in cui gestisci e registri le informazioni sugli arresti anomali.
La soluzione
Aggrega la funzione in un blocco try
per personalizzare la gestione delle eccezioni e
e logging 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 e versioni successive, Python 3.8, Go 1.13 e Java 11
La dimensione massima per una normale voce di log in questi runtime è 105 KiB.
La soluzione
Invia voci di log di dimensioni inferiori a questo limite.
Log mancanti nonostante le funzioni Cloud Run restituiscano errori
Le funzioni Cloud Run trasmettono in streaming i log delle funzioni Cloud Run a un bucket predefinito. Quando crei un progetto, le funzioni Cloud Run creano e abilitano il bucket predefinito. Se il bucket predefinito è disabilitato o se i log delle funzioni Cloud Run sono nel filtro di esclusione, i log non verranno visualizzati in Esplora log.
La soluzione
Abilita i log predefiniti.
I log delle funzioni Cloud Run non vengono visualizzati in Esplora log
Alcune librerie client di Cloud Logging utilizzano un processo asincrono per scrivere il log le voci corrispondenti. 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 non possono essere visualizzati in Esplora log.
La soluzione
Utilizza l'interfaccia della libreria client per svuotare le voci di log in 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 Log Router
I sink del router dei log indirizzano le voci di log a varie destinazioni.
I filtri di esclusione definiscono le voci che puoi ignorare.
La soluzione
Rimuovi il filtro di esclusione impostato per resource.type = "cloud_run_revision"
.
Connessioni al database
Esistono diversi problemi che possono verificarsi durante la connessione a un database, molti associati al superamento dei limiti di connessione o al timeout. Se noti un deployment di Cloud SQL
nei log, ad esempio Context deadline exceeded
, potresti aver bisogno
per regolare la configurazione della connessione. Per ulteriori informazioni, consulta le best practice di Cloud SQL.
Networking
Questa sezione elenca i problemi di rete e fornisce suggerimenti su come risolverli.
Connettività di rete
Se tutte le richieste in uscita da una funzione Cloud Run hanno esito negativo anche dopo configuri le impostazioni di traffico in uscita, puoi eseguire Connectivity Tests per identificare problemi di connettività di rete. Per ulteriori informazioni, vedi Crea ed esegui Connectivity Tests.
Il connettore di accesso VPC serverless non è pronto o non esiste
In caso di errore di un connettore di accesso VPC serverless, potrebbe non essere
utilizzando una subnet mask /28
dedicata al connettore, come obbligatorio.
Il messaggio di errore
Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.
Quando viene eseguito il deployment delle funzioni Cloud Run con un connettore in stato non valido a causa della mancanza dell'autorizzazione nell'account di servizio dell'agente di servizio delle API di Google PROJECT_NUMBER@cloudservices.gserviceaccount.com
, si verifica il seguente errore:
Il messaggio di errore
Failed to prepare VPC connector. Please try again later.
La soluzione
Elenca le subnet
per verificare se il connettore utilizza una subnet mask /28
. Se il connettore non utilizza la subnet mask /28
, ricrea o crea un nuovo connettore.
Per risolvere il problema, segui una delle seguenti soluzioni:
Se ricrei il connettore, non devi eseguire nuovamente il deployment di altre funzioni. Potrebbe verificarsi un'interruzione di rete perché il connettore viene ricreato.
Se crei un nuovo connettore alternativo, esegui nuovamente il deployment delle funzioni per utilizzare nuovo connettore ed eliminare quello originale. Questo metodo evita l'interruzione della rete.
Assicurati che le funzioni Cloud Run e il relativo connettore associato siano dipiazzati nella stessa regione.
Per la configurazione del VPC condiviso:
Assicurati che agli account di servizio
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 manchino le autorizzazioni. Questi account di servizio devono avere il ruoloroles/compute.networkUser
nel progetto host della configurazione del 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 ad 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 API di Google non dispone delle autorizzazioni necessarie per eseguire il provisioning delle risorse di computing nel progetto del connettore, concediroles/compute.admin
all'account di servizioPROJECT_NUMBER@cloudservices.gserviceaccount.com
. In alcuni casi, il connettore potrebbe dover essere ricreato dopo l'aggiunta di 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 di destinazione TCP 25
quando invii email dalle funzioni.
La 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 disabilitazione dell'URL run.app
in Cloud Run impedisce anche l'accesso a
l'URL cloudfunctions.net
predefinito per le funzioni Cloud Run (2ª generazione.). Questo errore può essere causato anche da un errore di pubblicazione a causa della configurazione che consente solo il traffico interno.
Il messaggio di errore
Codice di risposta di errore HTTP: 404 NOT FOUND
La soluzione
Per riattivare l'URL cloudfunctions.net
predefinito per le funzioni Cloud Run (2ª gen.),
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