Risolvere i problemi relativi a Cloud Run Functions

Questo documento spiega come risolvere i problemi relativi ai 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 relativi a ruoli e autorizzazioni o a una configurazione errata.

Utilizza 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 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 account di servizio di runtime può 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, l'eseguitore del deployment deve disporre dell'autorizzazioneiam.serviceAccounts.actAs per quell'account di servizio. A un utente che crea un account di 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 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:'

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.

Nell'account di servizio di deployment mancano le autorizzazioni Pub/Sub durante il deployment di una funzione basata su eventi

Il servizio Cloud Functions utilizza l'account di servizio 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 di 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"]

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 account di servizio di runtime gestito dall'utente, Cloud Functions utilizza l'account di servizio Compute predefinito come 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:

Le autorizzazioni del bucket del progetto mancano nell'account di servizio dell'agente di servizio Cloud Functions durante il deployment di una funzione

Le funzioni Cloud Run possono essere attivate solo da eventi dei bucket Cloud Storage nello stesso progetto Google Cloud Platform. Inoltre, l'account di servizio Agente di servizio Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) richiede un ruolo cloudfunctions.serviceAgent nel 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 Editor del progetto non può rendere pubblica una funzione

Il ruolo Editor del progetto dispone di autorizzazioni ampie per gestire le risorse all'interno di un progetto, ma non concede intrinsecamente la possibilità di rendere pubbliche 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:

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 un criterio di vincolo della località delle risorse, limita il deployment delle funzioni nelle regioni limitate dal criterio. 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".]

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 che si è verificato un problema con il codice. La pipeline di deployment ha completato il deployment della funzione, ma non è riuscita nell'ultimo passaggio, ovvero l'invio di un controllo di integrità alla 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 i log di compilazione e i log di runtime della funzione.

  • Se non è chiaro perché la funzione non è riuscita a eseguire il suo ambito globale, valuta la possibilità di spostare temporaneamente il codice nell'invocazione della richiesta utilizzando l'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 Cloud Run offrono più tempo per l'inizializzazione e consentono un'allocazione delle risorse più scalabile in un ambiente Cloud Run, potenzialmente attenuando 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 non è selezionabile nella console Google Cloud e viene visualizzato 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 all'utente il ruolo Sviluppatore di Funzioni Cloud.

Autorizzazioni mancanti per l'account di servizio di Build

Il messaggio di errore

Nell'errore di deployment della funzione o nei log di compilazione, 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.

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:

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.

La soluzione

Per eseguire il deployment di una funzione, è necessario attivare l'account di servizio di compilazione. 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:

Pubblicazione

Questa sezione elenca i problemi di pubblicazione che potresti riscontrare e fornisce suggerimenti su come risolverli.

Errore di autorizzazione di pubblicazione a causa della funzione che richiede l'autenticazione

Le funzioni HTTP senza l'opzione Consenti chiamate non autenticate abilitata limitano l'accesso agli utenti finali e agli account di servizio 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 dell'errore HTTP: 403 accesso negato

Corpo della risposta all'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 di queste soluzioni:

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 Controlli di servizio VPC. 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 dell'errore HTTP: 404 NOT FOUND

La soluzione

Per risolvere questo errore, segui una di queste soluzioni:

  • Assicurati che la richiesta provenga dal tuo progetto Google Cloud o dal perimetro di servizio Controlli di servizio VPC.

  • 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.

L'invocazione della funzione non dispone di credenziali di autenticazione valide

Per richiamare una funzione Cloud Run configurata con accesso limitato è necessario un token ID. I token di accesso o i token di aggiornamento non funzionano.

Il messaggio di errore

Codice di risposta dell'errore HTTP: 401 Accesso 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 maggiori informazioni, consulta Eseguire l'autenticazione per l'invocazione.

    Richiama la funzione HTTP utilizzando le credenziali di autenticazione nell'header 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_NAME
    Per saperne di più, consulta Autenticazione per l'invocazione .

  • Ridistribuisci la funzione per consentire le chiamate non autenticate, se questa opzione è supportata dalla tua organizzazione. Questo è utile per i test.

La funzione si interrompe durante l'esecuzione o continua a funzionare 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 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 interrompe l'esecuzione al termine di queste attività e continua a funzionare fino al termine del periodo di timeout.

La soluzione

Se la funzione termina in modo anomalo, devi assicurarti che tutte le attività asincrone della funzione siano completate prima che la funzione esegua una delle seguenti azioni:

  • Restituire un valore
  • Risolvere o rifiutare 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 operazioni elencate in precedenza non appena la funzione ha completato 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 inviare richieste in uscita ad altri servizi. Se le 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 Google Cloud protetti da Controlli di servizio VPC a causa di rifiuti del perimetro di servizio.

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 di queste soluzioni:

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

I problemi di scalabilità possono verificarsi nei seguenti scenari:

  • Un enorme aumento improvviso del traffico.
  • Tempo di avvio 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 Cloud Run Functions.

In ogni caso, le funzioni Cloud Run potrebbero non scalare abbastanza velocemente per gestire il 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 di max-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 attivi le funzioni Cloud Run dai flussi di lavoro, puoi utilizzare la sintassi try/retry per farlo.

  • Per le funzioni in background o basate su eventi, le funzioni Cloud Run supportano la consegna almeno una volta. Anche senza attivare esplicitamente il nuovo tentativo, l'evento viene reintegrato automaticamente e verrà eseguito un nuovo tentativo di esecuzione della funzione. Per ulteriori informazioni, consulta Nuovo tentativo per le funzioni basate su eventi.

  • Quando la causa principale del problema è un periodo di errori transitori elevati 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 impatto maggiore sulla fatturazione.

Logging

La sezione seguente illustra i problemi relativi alla registrazione 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. I 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 una voce di log strutturata.

Gestire o registrare le eccezioni in modo diverso in caso di arresto anomalo

Ti consigliamo di personalizzare la gestione e la registrazione delle informazioni sugli arresti anomali.

La soluzione

Inserisci la funzione in un blocco try per personalizzare la gestione delle eccezioni e la registrazione delle tracce 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 di una voce di log normale in questi ambienti di 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 in un bucket predefinito. Quando crei un progetto, le funzioni Cloud Run creano e attivano 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

Attiva 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 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 essere visibili 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.

Screenshot di Console Log Router con i dettagli della destinazione di visualizzazione evidenziati

I filtri di esclusione definiscono le voci che puoi ignorare.

La soluzione

Rimuovi il set di filtri di esclusione 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 nei log viene visualizzato un avviso 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 rete e fornisce suggerimenti su come risolverli.

Connettività di rete

Se tutte le richieste in uscita di 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 ulteriori informazioni, consulta 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, è possibile che non utilizzi una maschera di sottorete /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 dipiattate con un connettore in uno stato non valido a causa dell'assenza dell'autorizzazione nell'account di servizio dell'agente di servizio API 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 di queste soluzioni:

  • Se ricrei il connettore, non devi eseguire nuovamente il deployment di altre funzioni. Potresti riscontrare un'interruzione della rete durante la ricostituzione del connettore.

  • Se crei un nuovo connettore alternativo, esegui il redeployment delle funzioni per utilizzare il nuovo connettore ed elimina il connettore originale. Questo metodo evita l'interruzione della rete.

  • Assicurati che le funzioni Cloud Run e il relativo connettore associato siano di cui è stato eseguito il deployment nella stessa regione.

  • Per la configurazione del VPC condiviso:

    • Assicurati che agli account di servizio SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com e service-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 service account devono avere il ruolo roles/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 all'agente di servizio delle API di Google mancano le autorizzazioni necessarie per il provisioning delle risorse di calcolo nel progetto del connettore, concedi roles/compute.admin all'account di servizio PROJECT_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:

Errore 404 per l'URL functions.net predefinito

La disattivazione dell'URL run.app in Cloud Run impedisce anche l'accesso all'URL run.app predefinito per le funzioni Cloud Run (2ª generazione.).cloudfunctions.net 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 dell'errore HTTP: 404 NOT FOUND

La 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