Découvrez les étapes de dépannage qui pourraient vous être utiles si vous rencontrez des problèmes avec Pub/Sub.
Impossible de créer un sujet
Vérifiez que vous disposez des autorisations nécessaires.
Pour créer un sujet Pub/Sub, vous devez disposer du rôle Éditeur Pub/Sub (roles/pubsub.editor
) dans le projet. Si vous ne disposez pas de ce rôle, contactez votre administrateur.
Pour en savoir plus sur le dépannage des thèmes, consultez les pages suivantes :
Impossible de créer un abonnement
Assurez-vous d'avoir effectué les opérations suivantes :
Vérifiez que vous disposez des autorisations nécessaires. Pour créer un abonnement Pub/Sub, vous devez disposer du rôle IAM Éditeur Pub/Sub (roles/pubsub.editor) sur le projet. Si vous ne disposez pas de ce rôle, contactez votre administrateur.
Vous avez indiqué un nom pour l'abonnement.
Vous avez saisi le nom d'un sujet existant auquel vous souhaitez associer l'abonnement.
Si vous créez un abonnement push, vous avez spécifié
https://
en minuscule (et nonhttp://
ouHTTPS://
) en tant que protocole pour votre URL de réception dans le champpushEndpoint
.
Pour obtenir plus d'informations sur le dépannage des abonnements, consultez les pages suivantes :
Résoudre les problèmes liés à pull, push, BigQuery ou Cloud Storage
Résoudre les problèmes d'abonnement avec les transformations de message unique
Résoudre les problèmes d'autorisation
Les autorisations Pub/Sub déterminent quels utilisateurs et comptes de service peuvent effectuer des actions sur vos ressources Pub/Sub. Lorsque les autorisations sont mal configurées, cela peut entraîner des erreurs d'autorisation refusée et perturber le flux de messages. Les journaux d'audit fournissent un enregistrement détaillé de toutes les modifications apportées aux autorisations, ce qui vous permet d'identifier la source de ces problèmes.
Pour résoudre les problèmes d'autorisation Pub/Sub liés aux journaux d'audit :
Obtenez les autorisations requises pour afficher l'explorateur de journaux.
Pour plus d'informations, consultez la section Avant de commencer.
Dans la console Trusted Cloud , accédez à la page Explorateur de journaux.
Sélectionnez un projet, un dossier ou une organisation Trusted Cloud existants.
Voici une liste de filtres que vous pouvez utiliser pour trouver les journaux pertinents :
resource.type="pubsub_topic" OR resource.type="pubsub_subscription"
: utilisez cette requête comme point de départ lorsque vous résolvez un problème qui peut impliquer des modifications des configurations de sujets ou d'abonnements, ou du contrôle des accès. Vous pouvez le combiner avec d'autres filtres pour affiner davantage votre recherche.protoPayload.methodName="google.iam.v1.SetIamPolicy"
: utilisez cette requête lorsque vous pensez qu'un problème est dû à des autorisations incorrectes ou manquantes. Il vous aide à savoir qui a modifié la stratégie IAM et quelles modifications ont été apportées. Cela peut être utile pour résoudre des problèmes, par exemple lorsque des utilisateurs ne parviennent pas à publier sur des sujets ni à s'abonner à des abonnements, lorsque des applications se voient refuser l'accès aux ressources Pub/Sub ou en cas de modifications inattendues du contrôle des accès.protoPayload.status.code=7
: utilisez cette requête lorsque vous rencontrez des erreurs explicitement liées aux autorisations. Cela vous permet d'identifier précisément les actions qui échouent et les utilisateurs qui tentent de les effectuer. Vous pouvez combiner cette requête avec les précédentes pour identifier la ressource spécifique et la modification de la stratégie IAM qui peuvent être à l'origine du refus d'autorisation.
Analysez les journaux pour déterminer des facteurs tels que le code temporel de l'événement, le compte principal qui a effectué la modification et le type de modifications apportées.
Vous pouvez prendre des mesures correctives en fonction des informations recueillies dans les journaux d'audit.
Résoudre les problèmes d'autorisation Terraform
Lorsque vous utilisez Pub/Sub avec Terraform, accordez explicitement les rôles requis dans votre code Terraform. Par exemple, pour la publication, le compte de service de votre application a besoin du rôle roles/pubsub.publisher
. Si ce rôle n'est pas explicitement défini dans votre code Terraform, une future terraform apply
pourrait le supprimer. Cela se produit souvent lors de mises à jour sans rapport, ce qui entraîne l'échec soudain d'une application fiable avec des erreurs PERMISSION_DENIED
.
Définir explicitement le rôle dans votre code permet d'éviter ces régressions accidentelles.
Abonnement supprimé
Il existe deux principales façons de supprimer des abonnements Pub/Sub :
Un utilisateur ou un compte de service disposant des autorisations suffisantes supprime intentionnellement l'abonnement.
Un abonnement est automatiquement supprimé après une période d'inactivité (31 jours par défaut). Pour en savoir plus sur la règle d'expiration des abonnements, consultez Période d'expiration.
Pour résoudre les problèmes liés à un abonnement supprimé, procédez comme suit :
Dans la console Trusted Cloud , accédez à la page "Abonnements Pub/Sub" et vérifiez que l'abonnement n'est plus listé. Pour savoir comment lister les abonnements, consultez Lister un abonnement.
Consultez les journaux d'audit. Accédez à l'explorateur de journaux. Utilisez le filtre
protoPayload.methodName="google.pubsub.v1.Subscriber.DeleteSubscription"
pour trouver les abonnements supprimés. Examinez les journaux pour déterminer si quelqu'un a supprimé l'abonnement ou s'il a été supprimé pour cause d'inactivité.InternalExpireInactiveSubscription
indique qu'un abonnement a été supprimé en raison de l'inactivité. Pour savoir comment utiliser les journaux d'audit pour résoudre les problèmes, consultez Résoudre les problèmes Pub/Sub à l'aide des journaux d'audit.
403 (Forbidden)
erreur
Une erreur 403 signifie généralement que vous ne disposez pas des autorisations appropriées pour effectuer une action. Par exemple, vous pouvez recevoir une erreur 403 User not authorized
lorsque vous essayez de publier dans un sujet ou d'extraire des données d'un abonnement.
Si vous rencontrez cette erreur, procédez comme suit :
- Assurez-vous d'avoir activé l'API Pub/Sub dans la consoleTrusted Cloud .
Assurez-vous que le principal à l'origine de la requête dispose des autorisations requises sur les ressources de l'API Pub/Sub correspondantes, en particulier si vous vous servez de cette API pour communiquer entre plusieurs projets.
Si vous utilisez Dataflow, assurez-vous que
{PROJECT_NUMBER}@cloudservices.s3ns-system.iam.gserviceaccount.com
et le compte de service Compute Engine{PROJECT_NUMBER}-compute@developer.s3ns-system.iam.gserviceaccount.com
disposent des autorisations requises sur la ressource de l'API Pub/Sub appropriée. Pour en savoir plus, consultez Sécurité et autorisations pour Dataflow.Si vous utilisez App Engine, consultez la page des autorisations de votre projet pour savoir si un compte de service App Engine est répertorié en tant qu'éditeur Pub/Sub. Si ce n'est pas le cas, ajoutez votre compte de service App Engine en tant qu'éditeur Pub/Sub. Normalement, le compte de service App Engine est au format suivant :
<project-id>@appspot.s3ns-system.iam.gserviceaccount.com
.Vous pouvez utiliser les journaux d'audit pour résoudre les problèmes d'autorisation.
Autres codes d'erreur courants
Pour obtenir la liste des autres codes d'erreur courants liés à l'API Pub/Sub et leur description, consultez Codes d'erreur.
Utiliser des opérations d'administration excessives
Si vous constatez que vous utilisez une trop grande partie de votre quota pour les opérations d'administration, vous devrez peut-être refactoriser votre code. À titre d'exemple, intéressons-nous à ce pseudo-code. Dans cet exemple, une opération d'administration (GET
) est utilisée pour vérifier la présence d'un abonnement avant toute tentative d'utilisation de ses ressources. GET
et CREATE
sont des opérations d'administration :
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
Un modèle plus efficace consiste à essayer de consommer des messages de l'abonnement (en supposant que vous soyez suffisamment sûr du nom de l'abonnement). Dans cette approche optimiste, vous n'accédez à l'abonnement ou ne le créez qu'en cas d'erreur. Considérez l'exemple suivant :
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}
Vous pouvez utiliser les exemples de code suivants pour implémenter ce modèle dans la langue de votre choix :
Go
L'exemple suivant utilise la version majeure de la bibliothèque cliente Go Pub/Sub (v2). Si vous utilisez toujours la bibliothèque v1, consultez le guide de migration vers la v2. Pour consulter la liste des exemples de code de la version 1, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Node.ts
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Python.
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.