Risolvi i problemi di Cloud Functions (1ª generazione.)
Questo documento mostra come risolvere i messaggi di errore e i problemi relativi all'utilizzo di Cloud Functions (1ª generazione.).
Deployment
Questa sezione elenca i problemi che potresti riscontrare nell'implementazione fornisce suggerimenti su come risolverli. Molti dei problemi che che potrebbero incontrare durante il deployment sono correlati ruoli e autorizzazioni oppure configurazione errata.
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
)
per l'esecuzione di azioni amministrative. Per impostazione predefinita, a questo account è assegnato il
Ruolo cloudfunctions.serviceAgent
di Cloud Functions. Per eseguire il deployment
funzioni basate su eventi,
il servizio Cloud Functions
accedere a Pub/Sub
per configurare argomenti e sottoscrizioni. Se il ruolo assegnato al servizio
le modifiche all'account e le autorizzazioni appropriate
non vengono aggiornate,
il servizio Cloud Functions non può accedere a Pub/Sub e al deployment
non riesce.
Il messaggio di errore
Console
Failed to configure trigger PubSub projects/PROJECT_ID/topics/FUNCTION_NAME
gcloud
ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Failed to configure trigger PubSub projects/PROJECT_ID/topics/FUNCTION_NAME
La soluzione
Puoi reimpostare il tuo account di servizio
al ruolo predefinito cloudfunctions.serviceAgent
.
L'account di servizio di runtime predefinito non esiste
Quando un servizio gestito dall'utente account non è specificato, Cloud Functions (1ª generazione.) utilizza il servizio App Engine account di predefinito. I deployment non riescono se elimini l'account predefinito senza specificare un gestito dall'utente.
Il messaggio di errore
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[Default service account 'test-project-356312@appspot.gserviceaccount.com' doesn't exist. Please recreate this account or specify a different account. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.]
La soluzione
Per risolvere il problema, segui una delle seguenti soluzioni:
Specifica un valore account di servizio di runtime gestito dall'utente quando esegui il deployment della funzione.
Ricrea l'account di servizio predefinito PROJECT_ID@appspot.gserviceaccount.com per il tuo progetto.
Annulla l'eliminazione dell'account di servizio predefinito.
L'utente non dispone delle autorizzazioni 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 servizio di runtime
Google Cloud può essere
un account di servizio predefinito o
un account di servizio gestito dall'utente. Per Cloud Functions
per utilizzare un account di servizio di runtime, il deployment deve avere
iam.serviceAccounts.actAs
per quell'account di servizio. Un utente che
un account di servizio di runtime non predefinito viene concesso automaticamente
ma gli altri utenti di deployment devono poter disporre di questa autorizzazione da un utente con
le autorizzazioni corrette.
Un utente a cui è stato assegnato il ruolo Visualizzatore progetto, Sviluppatore Cloud Functions o
È necessario anche assegnare il ruolo Amministratore Cloud Functions
Autorizzazione iam.serviceAccounts.actAs
per l'account di servizio di runtime.
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
Si verifica il seguente errore per l'account di servizio predefinito:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller USER is missing permission 'iam.serviceaccounts.actAs' on service account PROJECT_ID@appspot.gserviceaccount.com. Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account PROJECT_ID@appspot.gserviceaccount.com. You can do that by running 'gcloud iam service-accounts add-iam-policy-binding
PROJECT_ID@appspot.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser' where MEMBER has a prefix like 'user:' or 'serviceAccount:'.
Si verifica il seguente errore per l'account di servizio non predefinito:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller USER is missing permission 'iam.serviceaccounts.actAs' on service account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. You can do that by running 'gcloud iam service-accounts add-iam-policy-binding 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
Assegnare l'utente
Ruolo roles/iam.serviceAccountUser
nel servizio predefinito o gestito dall'utente
. Questo ruolo include l'autorizzazione iam.serviceAccounts.actAs
.
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 Functions possono essere
attivate da eventi
dai bucket Cloud Storage nello stesso progetto Google Cloud. Nel
Inoltre, l'account di servizio dell'agente di servizio Cloud Functions
(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) richiede un
cloudfunctions.serviceAgent
per il tuo progetto.
Il messaggio di errore
Console
Deployment failure: Insufficient permissions to (re)configure a trigger
(permission denied for bucket BUCKET_ID). Please, give owner permissions
to the editor role of the bucket and try again.
gcloud
ERROR: (gcloud.functions.deploy) OperationError: code=7, message=Insufficient
permissions to (re)configure a trigger (permission denied for bucket BUCKET_ID).
Please, give owner permissions to the editor role of the bucket and try again.
La soluzione
Per risolvere questo errore, reimposta l'account di servizio dell'agente di servizio al ruolo predefinito.
L'utente con il ruolo di Editor di progetto non può rendere pubblica una funzione
Il ruolo Editor di progetto dispone di autorizzazioni ampie per gestire le risorse all'interno di progetto, ma non concede intrinsecamente la possibilità di Cloud Functions è pubblico. Devi concedere il ruolo cloudfunctions.functions.setIamPolicy` per l'utente o il servizio che esegue il deployment della funzione.
Il messaggio di errore
gcloud
ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME (or resource may not exist).]
La soluzione
Per risolvere questo errore, segui una delle seguenti soluzioni:
Assegna al deployer Proprietario progetto o nel ruolo Amministratore Cloud Functions, entrambi contenenti l'elemento
cloudfunctions.functions.setIamPolicy
autorizzazione.Concedi l'autorizzazione manualmente creando un ruolo personalizzato.
Verifica che al progetto sia applicata in modo forzato la condivisione limitata al dominio.
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 Limitazione limiterà 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
ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[The request has violated one or more Org Policies. Please refer to the respective violations for more information. violations {
type: "constraints/gcp.resourceLocations"
subject: "orgpolicy:projects/PROJECT_ID"
description: "Constraint constraints/gcp.resourceLocations violated for projects/PROJECT_ID attempting GenerateUploadUrlActionV1 with location set to RESTRICTED_LOCATION. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
}
La soluzione
Aggiungi o rimuovi le località dagli elenchi allowed_values
o denied_values
della
delle località delle risorse per un deployment senza problemi.
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à è pensato per eseguire l'ambito globale della funzione, che potrebbero generare un'eccezione, un arresto anomalo o un timeout. Ambito globale è la fase in cui solitamente carichi nelle librerie e inizializzi i client.
Il messaggio di errore
Console
Deployment failure: Function failed on loading user code. This is likely due to a bug in the user code.
gcloud
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function
failed on loading user code. This is likely due to a bug in the user code.
Nei log di Cloud Logging:
"Function failed on loading user code. This is likely due to a bug in the user code."
La soluzione
Per risolvere il problema, segui una delle seguenti soluzioni:
Per un messaggio di errore più dettagliato, esamina la build della funzione log e i tuoi runtime della funzione i log.
Se non è chiaro perché la funzione non è riuscita a eseguire il suo ambito globale, valuta temporaneamente il codice nella chiamata della richiesta, utilizzando l'inizializzazione lazy del globale variabili. Ciò ti consente di aggiungere ulteriori istruzioni di log per le librerie client, la creazione di un'istanza (soprattutto se chiama altre di archiviazione) o che causa l'arresto anomalo o la creazione di eccezioni.
Aumenta il timeout della funzione.
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) PERMISSION_DENIED: Permission
'cloudfunctions.functions.sourceCodeSet' denied on resource
'projects/PROJECT_ID/locations/LOCATION` (or resource may not exist)
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 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-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-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 build richiede l'autorizzazione per leggere dal bucket di origine e le autorizzazioni di lettura e scrittura per il repository Artifact Deployment. Puoi riscontra questo errore a causa di una modifica nel comportamento predefinito del 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.
- Aggiungi il parametro
Ruolo Account di servizio Cloud Build
(
roles/cloudbuild.builds.builder
) all'account di servizio Compute predefinito. - Rivedi le indicazioni di Cloud Build sulle modifiche all'account di servizio predefinito e disattiva queste modifiche.
Account di servizio di Build disabilitato
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 disattiva 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 limitazione abilitata per Consenti chiamate non autenticate Accesso agli utenti finali e agli account di servizio che non dispongono di autorizzazioni appropriate.
Visitare l'URL Cloud Functions in un browser non aggiunge l'intestazione di autenticazione automatica.
Il messaggio di errore
Codice di risposta di errore HTTP: 403 accesso negato
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 questo errore, segui una delle seguenti soluzioni:
Assegna all'utente il ruolo Invoker di Cloud Functions.
Esegui di nuovo il deployment della funzione per consentire chiamate non autenticate, se questa funzionalità è supportata dalla tua organizzazione. Questo può essere utile a scopo di test.
Errore di autorizzazione di pubblicazione dovuto alla configurazione di allow internal traffic only
Le impostazioni in entrata limitano se una funzione HTTP può essere richiamata dalle risorse al di fuori del perimetro di servizio del progetto Google Cloud o dei Controlli di servizio VPC. Quando configuri l'impostazione Consenti solo il traffico interno per il traffico in entrata rete, questo messaggio di errore indica che solo le richieste provenienti Reti VPC nello stesso progetto o perimetro dei Controlli di servizio VPC sono consentiti.
Il messaggio di errore
Codice di risposta di errore HTTP: 404 NOT FOUND
Corpo della risposta di errore HTTP:
404 Page not found
La soluzione
Per risolvere questo errore, segui una delle seguenti soluzioni:
Assicurati che la richiesta provenga dal progetto Google Cloud o dai Controlli di servizio VPC perimetro di servizio.
Modifica le impostazioni di traffico in entrata in consenti tutto il traffico per la funzione.
Il codice sorgente di Cloud Functions può generare un errore 404 a causa di URL della funzione, metodi HTTP o errori logici non corretti.
La chiamata della funzione non dispone di credenziali di autenticazione valide
Funzioni configurate con accesso limitato richiedono un token ID. La chiamata alla funzione non va a buon fine se utilizzi token di accesso o token di aggiornamento.
Il messaggio di errore
Codice di risposta di errore HTTP: 401 Non autorizzato
Corpo della risposta di errore HTTP:
Your client does not have permission to the requested URL </FUNCTION_NAME>
La soluzione
Per risolvere questo errore, segui una delle seguenti 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, devono 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 nel modo seguente:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME
Per ulteriori informazioni, consulta la sezione Autenticazione per le chiamate .
La funzione si interrompe a metà esecuzione o continua in esecuzione al termine del codice
Alcuni runtime di Cloud Functions consentono agli utenti di eseguire attività asincrone. Se le tue crea tali attività, deve anche attendere esplicitamente che vengano completato. In caso contrario, la funzione potrebbe interrompere l'esecuzione nel l'ora sbagliata.
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 viene interrotta al termine di queste attività e continua deve essere eseguita fino alla scadenza del periodo di timeout.
La soluzione
Se la funzione viene terminata in anticipo, devi assicurarti che le attività asincrone vengono completate prima che la funzione esegua una qualsiasi delle le seguenti azioni:
- Restituzione di un valore
- Risoluzione o rifiuto di un oggetto
Promise
restituito (solo funzioni Node.js) - Generare eccezioni ed errori non rilevati
- Invio di una risposta HTTP
- Chiamata a una funzione di callback
Se la funzione non viene terminata dopo aver completato le attività asincrone, deve verificare che la funzione segnali correttamente Cloud Functions al termine dell'operazione. In particolare, assicurati di eseguire una delle operazioni elencate nell'elenco precedente non appena la funzione è stata completata e le sue attività asincrone.
Errore di runtime durante l'accesso alle risorse protette dai Controlli di servizio VPC
Per impostazione predefinita, Cloud Functions utilizza indirizzi IP pubblici per effettuare richieste in uscita
ad altri servizi. Funzioni che non rientrano nei Controlli di servizio VPC
il perimetro potrebbe ricevere risposte HTTP 403
quando tenti
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 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" ...
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 l'accesso all'account di servizio di runtime della funzione al perimetro. Per farlo, puoi creare un livello di accesso e aggiungerlo al perimetro di servizio oppure creando un criterio in entrata nel perimetro. Per saperne di più, consulta Utilizzo dei 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 di richieste di coda in attesa
Le seguenti condizioni possono essere associate agli errori di scalabilità.
- Un enorme aumento improvviso del traffico.
- Inizio a freddo lungo.
- Tempi di elaborazione lunghi delle richieste.
- Elevato tasso di errori delle funzioni.
- Stai raggiungendo il limite massimo di istanze.
- Fattori temporanei attribuiti al servizio Cloud Functions.
In ogni caso, Cloud Functions potrebbe 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.
Cloud Functions prevede i seguenti livelli di gravità:
* `severity=WARNING` ( Response code: 429 ) Cloud Functions cannot scale due
to the [`max-instances`](/functions/docs/configuring/max-instances) limit you set
during configuration.
* `severity=ERROR` ( Response code: 500 ) Cloud Functions intrinsically
cannot manage the rate of traffic.
La soluzione
- Per le funzioni basate su trigger HTTP, implementa la funzione esponenziale
il backoff e i nuovi tentativi per le richieste che non devono essere ignorate. Se
l'attivazione di Cloud Functions da Workflows,
puoi usare la sintassi
try/retry
per raggiungere questo obiettivo. - Per le funzioni in background o basate su eventi, Cloud Functions supporta consegna "at-least-once". 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. Per ulteriori informazioni, consulta Abilitare i nuovi tentativi delle funzioni basate su eventi.
- Se la causa principale del problema è un periodo di gravi errori temporanei attribuite esclusivamente a Cloud Functions o se hai bisogno di assistenza per risolvere il problema, contatta l'assistenza clienti Google Cloud.
Logging
La sezione seguente illustra i problemi relativi al logging e come risolverli.
Le voci di log non hanno livelli di gravità dei log errati o sono errati
Cloud Functions include il logging del runtime per impostazione predefinita. Log scritti in
stdout
o stderr
compaiono automaticamente nel
Console Google Cloud.
Tuttavia, queste voci di log, per impostazione predefinita, contengono solo messaggi di tipo stringa.
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
Potrebbe essere opportuno personalizzare la gestione e la registrazione delle 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.
L'aggiunta di un blocco try
può causare un effetto collaterale non intenzionale
con la configurazione retry on failure
. Nuovo tentativo di eventi non riusciti
potrebbe non funzionare.
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.
La soluzione
Invia voci di log inferiori a questo limite.
Log mancanti nonostante Cloud Functions restituisca errori
Cloud Functions invia i flussi di log delle Cloud Function a un bucket predefinito. Quando crei un progetto, Cloud Functions crea e abilita il bucket predefinito. Se il bucket predefinito è disabilitato o se i log della funzione Cloud Function si trovano nella filtro di esclusione, i log non verranno visualizzati in Esplora log.
La soluzione
Abilita i log predefiniti e assicurati che non sia impostato alcun filtro di esclusione.
I log di Cloud Functions 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 sono ancora state scritte e potrebbero essere visualizzate in seguito. È inoltre possibile è possibile che alcuni log vadano persi e non siano visibili in Esplora log.
La soluzione
Usa l'interfaccia della libreria client per svuotare le voci di log presenti nel buffer prima di uscire
la funzione o utilizzare la libreria per scrivere le voci di log in modo sincrono. Puoi anche
scrivere i log in modo sincrono direttamente in stdout
o stderr
.
I log di Cloud Functions non vengono visualizzati utilizzando il sink del router dei log
Il router dei log acquisisce le voci di log del route verso varie destinazioni.
Le impostazioni includono i filtri di esclusione, che definiscono le voci che possono essere ignorate.
La soluzione
Rimuovi il filtro di esclusione impostato per resource.type="cloud_functions"
.
Connessioni al database
Molti errori del database
associate 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, vedi
Best practice per 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 Cloud Function non vanno a buon fine 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
VPC connector projects/xxxxx/locations/REGION/connectors/xxxx
is not ready yet or does not exist.
Quando viene eseguito il deployment di Cloud Functions con un connettore in stato non valido a causa della mancanza dell'autorizzazione sull'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 rieseguire 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 ed eliminare il connettore originale. Questo metodo evita che le reti un'interruzione del servizio.
Assicurati che il deployment di Cloud Functions e del connettore associato venga eseguito nella stessa regione.
Per la configurazione del VPC condiviso :
Assicurati che gli account di servizio
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
eservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
utilizzati dal connettore VPC per eseguire il provisioning di risorse nel progetto, autorizzazioni mancanti. 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. In caso contrario, il camporoles/compute.networkAdmin
è obbligatorio.Se il connettore viene creato nel progetto host, assicurati che il ruolo
Serverless VPC Access User
sia concesso suCloud Functions Service Agent
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 potresti dover ricreare il connettore dopo aver aggiornato le autorizzazioni.
Il traffico SMTP verso indirizzi IP di destinazione esterni che utilizzano la porta TCP 25 è bloccato
Per maggiore sicurezza, Google Cloud blocca le connessioni alla porta di destinazione TCP 25
quando invii email da Cloud Functions.
La soluzione
Per sbloccare queste connessioni, scegli una delle seguenti opzioni:
Connettiti al server SMTP su una porta diversa, ad esempio la porta TCP
587
o465
.