Scopri i passaggi per la risoluzione dei problemi, utili in caso di problemi nell'utilizzo di Pub/Sub.
Impossibile creare un argomento
Verifica di disporre delle autorizzazioni necessarie
permessi.
Per creare un argomento Pub/Sub, devi disporre del
ruolo Pub/Sub Editor (roles/pubsub.editor) di Identity and Access Management
nel progetto. Se non hai questo ruolo, contatta l'amministratore.
Per ulteriori informazioni sulla risoluzione dei problemi relativi agli argomenti, consulta le seguenti pagine:
Impossibile creare una sottoscrizione
Verifica di aver eseguito le seguenti operazioni:
Verifica di disporre delle autorizzazioni necessarie permessi. Per creare una sottoscrizione Pub/Sub, devi disporre del ruolo Pub/Sub Editor (roles/pubsub.editor) di IAM nel progetto. Se non hai questo ruolo, contatta l'amministratore.
Hai specificato un nome per la sottoscrizione.
Hai specificato il nome di un argomento esistente a cui vuoi collegare la sottoscrizione.
Se crei una sottoscrizione push, hai specificato
https://in minuscolo (nonhttp://oHTTPS://) come protocollo per l'URL di ricezione nel campopushEndpoint.
Per ulteriori informazioni sulla risoluzione dei problemi relativi alle sottoscrizioni, consulta le seguenti pagine:
Risoluzione dei problemi relativi a pull, push, BigQuery, o Cloud Storage
Risoluzione dei problemi relativi alle sottoscrizioni con trasformazioni di singoli messaggi
Risolvere i problemi relativi alle autorizzazioni
Le autorizzazioni Pub/Sub controllano quali utenti e service account possono eseguire azioni sulle risorse Pub/Sub. Quando le autorizzazioni non sono configurate correttamente, possono verificarsi errori di autorizzazione negata e interrompere il flusso di messaggi. I log di controllo forniscono un record dettagliato di tutte le modifiche delle autorizzazioni, consentendoti di identificare l'origine di questi problemi.
Per risolvere i problemi relativi alle autorizzazioni Pub/Sub con i log di controllo:
Ottieni le autorizzazioni necessarie per visualizzare Esplora log.
Per saperne di più, consulta Prima di iniziare.
Nella Google Cloud console, vai alla pagina Esplora log.
Seleziona un progetto, una cartella o un'organizzazioneesistente Google Cloud .
Di seguito è riportato un elenco di filtri che puoi utilizzare per trovare i log pertinenti:
resource.type="pubsub_topic" OR resource.type="pubsub_subscription":utilizza questa query come punto di partenza quando risolvi qualsiasi problema che potrebbe comportare modifiche alle configurazioni di argomenti o sottoscrizioni o al controllo dell'accesso. Puoi combinarla con altri filtri per perfezionare ulteriormente la ricerca.protoPayload.methodName="google.iam.v1.SetIamPolicy": utilizza questa query quando sospetti che un problema sia causato da autorizzazioni errate o mancanti Ti aiuta a monitorare chi ha apportato modifiche alla policy IAM e quali sono state queste modifiche. Questo può essere utile per risolvere problemi come utenti che non riescono a pubblicare argomenti o sottoscrivere sottoscrizioni, applicazioni a cui è stato negato l'accesso alle risorse Pub/Sub o modifiche impreviste al controllo dell'accesso.protoPayload.status.code=7: utilizza questa query quando riscontri errori esplicitamente correlati alle autorizzazioni. In questo modo puoi individuare le azioni che non vanno a buon fine e chi le sta tentando. Puoi combinare questa query con le precedenti per identificare la risorsa specifica e la modifica della policy IAM che potrebbe causare la negazione dell'autorizzazione.
Analizza i log per determinare fattori come il timestamp dell'evento, l'entità che ha apportato la modifica e il tipo di modifiche apportate.
In base alle informazioni raccolte dai log di controllo, puoi intraprendere azioni correttive.
Risolvere i problemi relativi alle autorizzazioni di Terraform
Quando utilizzi Pub/Sub con Terraform, concedi esplicitamente i ruoli richiesti nel codice Terraform. Ad esempio, per la pubblicazione, il account di servizio dell'applicazione deve avere il ruolo roles/pubsub.publisher. Se questo ruolo non è definito esplicitamente nel codice Terraform, un futuro terraform apply potrebbe rimuoverlo. Questo accade spesso durante gli aggiornamenti non correlati, causando l'improvvisa interruzione di un'applicazione affidabile con errori PERMISSION_DENIED.
La definizione esplicita del ruolo nel codice impedisce queste regressioni accidentali.
La sottoscrizione è stata eliminata
Le sottoscrizioni Pub/Sub possono essere eliminate in due modi principali:
Un utente o un account di servizio con autorizzazioni sufficienti elimina intenzionalmente la sottoscrizione.
Una sottoscrizione viene eliminata automaticamente dopo un periodo di inattività, che per impostazione predefinita è di 31 giorni. Per ulteriori informazioni sulla policy di scadenza delle sottoscrizioni, consulta Periodo di scadenza.
Per risolvere i problemi relativi a una sottoscrizione eliminata, segui questi passaggi:
Nella Google Cloud console, vai alla pagina Sottoscrizioni Pub/Sub e verifica che la sottoscrizione non sia più elencata. Per ulteriori informazioni su come elencare le sottoscrizioni, consulta Elencare una sottoscrizione.
Esamina i log di controllo. Vai a Esplora log. Utilizza il filtro
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription"per trovare le sottoscrizioni eliminate. Esamina i log per determinare se qualcuno ha eliminato la sottoscrizione o se è stata eliminata a causa dell'inattività.InternalExpireInactiveSubscriptionindica che una sottoscrizione è stata eliminata a causa dell'inattività. Per ulteriori informazioni su come utilizzare i log di controllo per la risoluzione dei problemi, consulta Risolvere i problemi di Pub/Sub con i log di controllo.
Errore 403 (Forbidden)
Un errore 403 in genere indica che non disponi delle autorizzazioni corrette per eseguire un'azione. Ad esempio, potresti ricevere un errore 403 User not authorized quando tenti di pubblicare un argomento o di eseguire il pull da una sottoscrizione.
Se ricevi questo errore:
- Assicurati di aver abilitato l'API Pub/Sub nella Google Cloud console.
Assicurati che l'entità che effettua la richiesta disponga delle autorizzazioni richieste per le risorse API Pub/Sub pertinenti, soprattutto se utilizzi l'API Pub/Sub per la comunicazione tra progetti.
Se utilizzi Dataflow, assicurati che sia
{PROJECT_NUMBER}@cloudservices.gserviceaccount.comsia il service account Compute Engine{PROJECT_NUMBER}-compute@developer.gserviceaccount.comdispongano delle autorizzazioni richieste per la risorsa API Pub/Sub pertinente. Per ulteriori informazioni, consulta Sicurezza e autorizzazioni di Dataflow.Se utilizzi App Engine, controlla la pagina Autorizzazioni del progetto per verificare se un service account App Engine è elencato come Editor Pub/Sub. In caso contrario, aggiungi il service account App Engine come Editor Pub/Sub. In genere, il service account App Engine ha il formato
<project-id>@appspot.gserviceaccount.com.Puoi utilizzare i log di controllo per risolvere i problemi relativi alle autorizzazioni.
Altri codici di errore comuni
Per un elenco di altri codici di errore comuni relativi all'API Pub/Sub e alle relative descrizioni, consulta Codici di errore.
Timeout di connessione, latenza o errori di rete
Potresti riscontrare errori intermittenti o persistenti quando le tue applicazioni client Pub/Sub tentano di connettersi ai Google Cloud servizi. Questi problemi possono manifestarsi come:
- Ritardi significativi durante la pubblicazione dei messaggi, che potrebbero causare backlog delle applicazioni.
- Errori di timeout, ad esempio gRPC
DEADLINE_EXCEEDED,code = DeadlineExceededojava.net.SocketTimeoutException. - Errori di I/O di rete, ad esempio
UNAVAILABLE: io exceptionoConnection refusedquando tenti di raggiungere servizi comepubsub.googleapis.comooauth2.googleapis.com.
Questi problemi di connettività possono verificarsi anche senza modifiche alla configurazione di Pub/Sub o al codice dell'applicazione. Questo si verifica spesso quando i firewall on-premise o VPC utilizzano elenchi consentiti di indirizzi IP hardcoded per le API di Google. I servizi Google, inclusi Pub/Sub e le relative dipendenze come i servizi di autenticazione, utilizzano un intervallo dinamico di indirizzi IP. Se il firewall non tiene conto dei nuovi indirizzi IP, può bloccare il traffico verso i nuovi indirizzi IP, causando errori di connessione e autenticazione.
Per garantire una connettività stabile, evita le regole firewall basate su IP statici per i servizi Google. In alternativa:
- Configura il firewall in modo da consentire il traffico utilizzando gli intervalli di indirizzi IP pubblicati da Google per i domini predefiniti anziché gli indirizzi hardcoded. Per scoprire come ottenere questi intervalli e automatizzare gli aggiornamenti delle regole firewall, consulta Indirizzi IP per i domini predefiniti.
- Abilita l'accesso privato Google, che consente alle istanze all'interno della rete VPC di raggiungere le API di Google e i servizi senza attraversare la rete internet pubblica, semplificando la gestione del firewall.
JWT non valido: il token deve essere un token di breve durata
Se ricevi un errore come Invalid JWT: Token must be a short-lived token (60
minutes) and in a reasonable timeframe quando l'applicazione interagisce con l'
API Pub/Sub, in genere indica un problema con la tempistica delle
credenziali di autenticazione.
Questo errore si verifica durante la convalida del token JWT (JSON Web Token) utilizzato per autenticare le richieste API. Una causa comune è una differenza di tempo significativa (distorsione temporale) tra il computer client che esegue la libreria Pub/Sub e i server di autenticazione di Google. Poiché i JWT hanno una finestra di validità limitata, le discrepanze dell'orologio possono far sì che vengano trattati come scaduti o non ancora validi.
Per risolvere il problema, sincronizza l'orologio del computer client:
Verifica che la data, l'ora e il fuso orario del computer siano corretti.
Utilizza un servizio Network Time Protocol (NTP) per mantenere sincronizzata l'ora di sistema e verifica che il servizio sia in esecuzione e configurato correttamente.
Utilizzo di quantità eccessive di operazioni amministrative
Se noti di utilizzare una quantità eccessiva della tua
quota per le operazioni amministrative,
potresti dover eseguire il refactoring del codice. Ad esempio, considera questo pseudocodice. In questo esempio, viene utilizzata un'operazione amministrativa (GET) per verificare la presenza di una sottoscrizione prima di tentare di utilizzare le relative risorse. Sia GET che CREATE sono operazioni amministrative:
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
Un pattern più efficiente consiste nel provare a utilizzare i messaggi della sottoscrizione (supponendo che tu possa essere ragionevolmente sicuro del nome della sottoscrizione). In questo approccio ottimistico, ottieni o crei la sottoscrizione solo se si verifica un errore. Considera questo esempio:
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}
Puoi utilizzare i seguenti esempi di codice per implementare questo pattern nel linguaggio che preferisci:
Vai
L'esempio seguente utilizza la versione principale della libreria client Go Pub/Sub (v2). Se utilizzi ancora la libreria v1, consulta la guida alla migrazione alla v2. Per visualizzare un elenco di esempi di codice della versione 1, consulta gli esempi di codice deprecati.
Prima di provare questo esempio, segui le istruzioni di configurazione di Go in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Java.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Node.ts
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js in guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub Python.
C++
Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C++ .