Hier finden Sie nützliche Informationen über die schrittweise Fehlerbehebung in Verbindung mit Pub/Sub.
Thema kann nicht erstellt werden
Prüfen Sie, ob Sie die erforderlichen
Berechtigungen haben.
Zum Erstellen eines Pub/Sub-Themas benötigen Sie
die IAM-Rolle „Pub/Sub Identity and Access Management“ (roles/pubsub.editor)
für das Projekt. Wenn Sie diese Rolle nicht haben, wenden Sie sich an Ihren Administrator.
Weitere Informationen zur Fehlerbehebung bei Themen finden Sie auf den folgenden Seiten:
Abo kann nicht erstellt werden
Prüfen Sie, ob Sie Folgendes getan haben:
Prüfen Sie, ob Sie die erforderlichen Berechtigungen haben. Zum Erstellen eines Pub/Sub-Abos benötigen Sie die IAM-Rolle „Pub/Sub Editor“ (`roles/pubsub.editor`) für das Projekt. Wenn Sie diese Rolle nicht haben, wenden Sie sich an Ihren Administrator.
Geben Sie einen Namen für das Abo an.
Geben Sie den Namen eines vorhandenen Themas an, dem Sie das Abo zuordnen möchten.
Wenn Sie ein Push-Abo erstellen, geben Sie im Feld
pushEndpointin Kleinbuchstabenhttps://(und nichthttp://oderHTTPS://) als Protokoll für Ihre Empfangs-URL ein.
Weitere Informationen zur Fehlerbehebung bei Abos finden Sie auf den folgenden Seiten:
Fehlerbehebung bei Pull, Push, BigQuery, oder Cloud Storage-Abos
Fehlerbehebung bei Abos mit Transformationen für einzelne Nachrichten
Fehlerbehebung bei Berechtigungsproblemen
Mit Pub/Sub-Berechtigungen wird gesteuert, welche Nutzer und Dienstkonten Aktionen für Ihre Pub/Sub-Ressourcen ausführen können. Wenn Berechtigungen falsch konfiguriert sind, kann dies zu Fehlern aufgrund fehlender Berechtigungen führen und den Nachrichtenfluss unterbrechen. Audit-Logs enthalten eine detaillierte Aufzeichnung aller Berechtigungsänderungen, sodass Sie die Ursache dieser Probleme ermitteln können.
So beheben Sie Pub/Sub-Berechtigungsprobleme mit Audit-Logs:
Rufen Sie die erforderlichen Berechtigungen auf, um den Log-Explorer aufzurufen.
Weitere Informationen finden Sie unter Vorbereitung.
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Wählen Sie ein vorhandenes Google Cloud Projekt, einen Ordner oder eine Organisation aus.
Hier finden Sie eine Liste von Filtern, mit denen Sie relevante Logs finden können:
resource.type="pubsub_topic" OR resource.type="pubsub_subscription": Verwenden Sie diese Abfrage als Ausgangspunkt, wenn Sie Probleme beheben, die Änderungen an der Konfiguration von Themen oder Abos oder an der Zugriffssteuerung umfassen können. Sie können sie mit anderen Filtern kombinieren, um die Suche weiter zu verfeinern.protoPayload.methodName="google.iam.v1.SetIamPolicy": Verwenden Sie diese Abfrage , wenn Sie vermuten, dass ein Problem durch falsche oder fehlende Berechtigungen verursacht wird. So können Sie nachverfolgen, wer Änderungen an der IAM-Richtlinie vorgenommen hat und welche Änderungen das waren. Das kann bei der Fehlerbehebung von Problemen nützlich sein, z. B. wenn Nutzer keine Nachrichten in Themen veröffentlichen oder keine Abos abonnieren können, Anwendungen der Zugriff auf Pub/Sub-Ressourcen verweigert wird oder es unerwartete Änderungen an der Zugriffssteuerung gibt.protoPayload.status.code=7: Verwenden Sie diese Abfrage, wenn Fehler auftreten, die ausdrücklich mit Berechtigungen zusammenhängen. So können Sie ermitteln, welche Aktionen fehlschlagen und wer sie ausführt. Sie können diese Abfrage mit den vorherigen kombinieren, um die spezifische Ressource und die Änderung der IAM-Richtlinie zu ermitteln, die möglicherweise die Berechtigungsverweigerung verursacht.
Analysieren Sie die Logs, um Faktoren wie den Zeitstempel des Ereignisses, den Verantwortlichen für die Änderung und die Art der vorgenommenen Änderungen zu ermitteln.
Anhand der Informationen aus den Audit-Logs können Sie Korrekturmaßnahmen ergreifen.
Fehlerbehebung bei Terraform-Berechtigungsproblemen
Wenn Sie Pub/Sub mit Terraform verwenden, gewähren Sie die erforderlichen Rollen explizit in Ihrem Terraform-Code. Zum Veröffentlichen benötigt das Dienstkonto Ihrer Anwendung beispielsweise die Rolle roles/pubsub.publisher. Wenn diese Rolle nicht explizit in Ihrem Terraform-Code definiert ist, kann sie durch ein zukünftiges terraform apply entfernt werden. Das geschieht häufig bei nicht zusammenhängenden Updates, wodurch eine zuverlässige Anwendung plötzlich mit PERMISSION_DENIED-Fehlern fehlschlägt.
Wenn Sie die Rolle explizit in Ihrem Code definieren, können Sie diese versehentlichen Regressionen vermeiden.
Abo wurde gelöscht
Pub/Sub-Abos können auf zwei Arten gelöscht werden:
Ein Nutzer oder Dienstkonto mit ausreichenden Berechtigungen löscht das Abo absichtlich.
Ein Abo wird nach einer bestimmten Zeit der Inaktivität automatisch gelöscht. Standardmäßig sind das 31 Tage. Weitere Informationen zur Richtlinie für den Ablauf von Abos finden Sie unter Ablaufzeitraum.
So beheben Sie Probleme mit einem gelöschten Abo:
Rufen Sie in der Google Cloud Console die Seite „Pub/Sub-Abos“ auf und prüfen Sie, ob das Abo nicht mehr aufgeführt ist. Weitere Informationen zum Auflisten von Abos, finden Sie unter Abo auflisten.
Prüfen Sie die Audit-Logs. Rufen Sie den Log-Explorer auf. Verwenden Sie den Filter
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription", um gelöschte Abos zu finden. Prüfen Sie die Logs, um festzustellen, ob jemand das Abo gelöscht hat oder ob es aufgrund von Inaktivität gelöscht wurde.InternalExpireInactiveSubscriptiongibt an, dass ein Abo aufgrund von Inaktivität gelöscht wurde. Weitere Informationen zur Verwendung von Audit-Logs zur Fehlerbehebung finden Sie unter Pub/Sub-Probleme mit Audit-Logs beheben.
403 (Forbidden)-Fehler
Ein 403-Fehler bedeutet in der Regel, dass Sie nicht die richtigen Berechtigungen haben, um eine Aktion auszuführen. Beispielsweise kann der Fehler 403 User not authorized auftreten, wenn Sie versuchen, Nachrichten in einem Thema zu veröffentlichen oder aus einem Abo abzurufen.
Gehen Sie folgendermaßen vor, wenn dieser Fehler angezeigt wird:
- Prüfen Sie, ob Sie die Pub/Sub API in der Google Cloud Console aktiviert haben.
Achten Sie darauf, dass der Verantwortliche, der die Anfrage stellt, die erforderlichen Berechtigungen für die relevanten Pub/Sub API-Ressourcen hat. Dies ist besonders wichtig, wenn Sie die Pub/Sub API für die projektübergreifende Kommunikation verwenden.
Wenn Sie Dataflow verwenden, achten Sie darauf, dass sowohl
{PROJECT_NUMBER}@cloudservices.gserviceaccount.comals auch das Compute Engine-Dienstkonto{PROJECT_NUMBER}-compute@developer.gserviceaccount.comdie erforderlichen Berechtigungen für die entsprechende Pub/Sub API-Ressource haben. Weitere Informationen finden Sie unter Sicherheit und Berechtigungen in Dataflow.Wenn Sie App Engine verwenden, prüfen Sie auf der Seite „Berechtigungen“, ob ein App Engine-Dienstkonto als Pub/Sub-Bearbeiter aufgeführt ist. Wenn dies nicht der Fall ist, fügen Sie Ihr App Engine-Dienstkonto als Pub/Sub-Bearbeiter hinzu. Normalerweise hat das App Engine-Dienstkonto das Format
<project-id>@appspot.gserviceaccount.com.Sie können Audit-Logs verwenden, um Berechtigungsprobleme zu beheben.
Weitere häufige Fehlercodes
Eine Liste weiterer häufiger Fehlercodes im Zusammenhang mit der Pub/Sub API und deren Beschreibungen finden Sie unter Fehlercodes.
Zeitüberschreitungen bei Verbindungen, Latenz oder Netzwerkfehler
Es kann zu zeitweiligen oder dauerhaften Fehlern kommen, wenn Ihre Pub/Sub-Clientanwendungen versuchen, eine Verbindung zu Google Cloud Diensten herzustellen. Diese Probleme können sich wie folgt äußern:
- Erhebliche Verzögerungen beim Veröffentlichen von Nachrichten, die möglicherweise zu Anwendungsrückständen führen.
- Zeitüberschreitungsfehler wie gRPC
DEADLINE_EXCEEDED,code = DeadlineExceededoderjava.net.SocketTimeoutException. - Netzwerk-E/A-Fehler wie
UNAVAILABLE: io exceptionoderConnection refusedFehler beim Versuch, Dienste wiepubsub.googleapis.comoderoauth2.googleapis.comzu erreichen.
Diese Verbindungsprobleme können auch ohne Änderungen an Ihrer Pub/Sub-Konfiguration oder Ihrem Anwendungscode auftreten. Das geschieht häufig, wenn lokale oder VPC-Firewalls hartcodierte Zulassungslisten für IP-Adressen für Google APIs verwenden. Google-Dienste, einschließlich Pub/Sub und seiner Abhängigkeiten wie Authentifizierungsdienste, verwenden einen dynamischen Bereich von IP-Adressen. Wenn Ihre Firewall neue IP-Adressen nicht berücksichtigt, kann sie Traffic zu den neuen IP-Adressen blockieren und so zu Verbindungs- und Authentifizierungsfehlern führen.
Um eine stabile Verbindung zu gewährleisten, sollten Sie statische IP-basierte Firewallregeln für Google-Dienste vermeiden. Stattdessen können Sie:
- Konfigurieren Sie Ihre Firewall so, dass Traffic über die veröffentlichten IP-Bereiche von Google für Standarddomains und nicht über hartcodierte Adressen zugelassen wird. Informationen zum Abrufen dieser Bereiche und zum Automatisieren von Updates für Ihre Firewallregeln finden Sie unter IP-Adressen für Standarddomains.
- Aktivieren Sie den privaten Google-Zugriff. So können Instanzen in Ihrem VPC-Netzwerk Google APIs und Google-Dienste erreichen, ohne das öffentliche Internet zu durchlaufen. Das vereinfacht die Firewallverwaltung.
Ungültiges JWT: Das Token muss ein kurzlebiges Token sein
Wenn Sie einen Fehler wie Invalid JWT: Token must be a short-lived token (60
minutes) and in a reasonable timeframe erhalten, wenn Ihre Anwendung mit der
Pub/Sub API interagiert, deutet dies in der Regel auf ein Problem mit dem Timing der
Authentifizierungsanmeldedaten hin.
Dieser Fehler tritt bei der Validierung des JSON-Web-Tokens (JWT) auf, das zur Authentifizierung von API-Anfragen verwendet wird. Eine häufige Ursache ist ein erheblicher Zeitunterschied (Zeitabweichung) zwischen dem Clientcomputer, auf dem die Pub/Sub-Bibliothek ausgeführt wird, und den Authentifizierungsservern von Google. Da JWTs nur eine begrenzte Gültigkeitsdauer haben, können Abweichungen bei der Uhrzeit dazu führen, dass sie als abgelaufen oder noch nicht gültig behandelt werden.
Synchronisieren Sie die Uhrzeit Ihres Clientcomputers, um dieses Problem zu beheben:
Prüfen Sie, ob Datum, Uhrzeit und Zeitzone auf Ihrem Computer korrekt sind.
Verwenden Sie einen NTP-Dienst (Network Time Protocol), um die Systemzeit synchron zu halten, und prüfen Sie, ob der Dienst ausgeführt und richtig konfiguriert ist.
Übermäßige Verwaltungsvorgänge verwenden
Sollten Sie feststellen, dass Sie zu viel von Ihrem
Kontingent für Verwaltungsvorgänge,
verbrauchen, müssen Sie unter Umständen Ihren Code refaktorieren. Betrachten Sie diesen Pseudocode zur Veranschaulichung. In diesem Beispiel wird ein Verwaltungsvorgang (GET) verwendet, um das Vorhandensein eines Abos zu überprüfen, bevor versucht wird, seine Ressourcen zu verbrauchen. Sowohl GET als auch CREATE sind Administratorvorgänge:
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
Ein effizienteres Muster ist der Versuch, Nachrichten aus dem Abo zu verbrauchen (vorausgesetzt, Sie sind sich beim Namen des Abos einigermaßen sicher). Bei diesem optimistischen Ansatz erhalten oder erstellen Sie das Abo nur, wenn ein Fehler auftritt. Betrachten Sie dieses Beispiel:
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}
Sie können die folgenden Codebeispiele verwenden, um dieses Muster in der gewünschten Sprache zu implementieren:
Go
Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (Version 2) verwendet. Wenn Sie noch die Version 1 verwenden, lesen Sie den Migrationsleitfaden zu Version 2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Veraltete Codebeispiele.
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.
Java
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Java API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Node.ts
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Node.js in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Python
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.
C++
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Pub/Sub C++ API-Referenzdokumentation.