Ce document explique comment configurer l'exportation automatique des messages Pub/Sub Lite vers Pub/Sub.
Voici quelques scénarios dans lesquels vous pouvez utiliser cette fonctionnalité :
- Interopérabilité entre les charges de travail qui utilisent un mélange de Pub/Sub Lite et de Pub/Sub.
- Migrez une charge de travail Pub/Sub Lite vers Pub/Sub.
- utiliser des fonctionnalités Pub/Sub avancées, telles que les abonnements push et à partir d'une application existante basée sur et Pub/Sub Lite.
- Consolider plusieurs pipelines de données
Présentation
Pour exporter des messages de Pub/Sub Lite vers Pub/Sub, vous créez un type d'abonnement spécial appelé abonnement d'exportation. Une exporte l'abonnement reçoit les messages d'un sujet Lite, les convertit en des messages Pub/Sub, puis envoie les messages convertis à un sujet Pub/Sub de destination.
Un sujet Lite peut combiner des abonnements d'exportation et des abonnements standards. Les deux types d'abonnements sont identiques en termes d'utilisation des quotas et de débit de réservation. Un abonnement d'exportation utilise la capacité de débit de l'abonnement Lite et est facturé Débit de publication Pub/Sub.
Un abonnement d'exportation connecte un sujet Lite à un seul sujet sujet Pub/Sub. Toutefois, un sujet Lite peut avoir plusieurs abonnements d'exportation qui se connectent à différents sujets Pub/Sub (architecture en éventail). Vous pouvez également exporter à partir de plusieurs sujets Lite vers le même sujet Pub/Sub (architecture en distribution unique).
Authentification
Un abonnement d'exportation accède aux ressources Pub/Sub Lite et Pub/Sub. Pour créer un abonnement d'exportation, vous avez besoin du les autorisations suivantes:
pubsublite.subscriptions.create
Les rôles prédéfinis suivants contiennent autorisation:roles/pubsublite.admin
roles/pubsublite.editor
Consultez la section Contrôle des accès pour Pub/Sub Lite.
pubsub.topics.get
. Les rôles prédéfinis suivants contiennent cette autorisation :roles/pubsub.admin
roles/pubsub.editor
roles/pubsub.viewer
Consultez la section Contrôle des accès pour Pub/Sub.
Agents de service
Un abonnement d'exportation publie des messages sur un sujet Pub/Sub en votre nom. Pour ce faire, il utilise un agent de service.
Après avoir créé le premier abonnement d'exportation dans un projet,
L'agent de service Pub/Sub Lite est créé automatiquement. Si vous
des abonnements d'exportation supplémentaires dans le même projet, ils utilisent le même
à un agent de service Google Cloud. L'agent de service utilise le schéma de dénomination suivant : service-<your_project_number>@gcp-sa-pubsublite.iam.gserviceaccount.com
.
L'agent de service est créé et dispose des autorisations nécessaires pour publier
des sujets Pub/Sub et Pub/Sub Lite au sein du même
en tant qu'abonnement d'exportation. Si votre service Pub/Sub de destination
se trouve dans un projet différent de celui de l'abonnement d'exportation, vous devez accorder
Autorisations supplémentaires pour l'agent de service en ajoutant le rôle Éditeur Pub/Sub
(roles/pubsub.publisher
). Vous pouvez accorder des autorisations pour l'intégralité d'un projet
sur un sujet particulier. Nous vous recommandons d'accorder
des autorisations au niveau du sujet,
en suivant le principe du moindre privilège.
Pour en savoir plus, consultez la page Contrôler l'accès via la console Google Cloud.
Vous pouvez également utiliser
gcloud projects add-iam-policy-binding
pour ajouter des rôles IAM:
gcloud pubsub topics add-iam-policy-binding TOPIC_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsublite.iam.gserviceaccount.com --role=roles/pubsub.publisher
Remplacez les éléments suivants :
- TOPIC_NAME : nom du sujet Pub/Sub de destination auquel ajouter la liaison de stratégie IAM.
- PROJECT_NUMBER: numéro du projet Projet de l'abonnement à l'exportation Pub/Sub Lite.
Créer un abonnement d'exportation
Vous pouvez créer un abonnement d'exportation Lite avec la console Google Cloud, la Google Cloud CLI ou l'API Pub/Sub Lite.
Un abonnement d'exportation Lite doit se trouver dans le même projet et le même emplacement que le sujet Lite auquel il est associé. Pour créer le sujet Lite, consultez la section Créer et gérer des sujets Lite.
Si vous associez un abonnement d'exportation à un sujet Lite, assurez-vous que tous les les messages publiés dans le sujet Lite sont compatibles avec Pub/Sub. Pour en savoir plus, consultez la section Compatibilité des messages.
Une fois créé, un abonnement d'exportation ne peut plus être un abonnement standard, ou inversement.
Console
Accédez à la page Abonnements Lite.
Cliquez sur Créer un abonnement Lite.
Saisissez un ID d'abonnement Lite.
Sélectionnez un sujet Lite pour recevoir des messages de celui-ci.
Sélectionnez Distribuer les messages immédiatement ou Distribuer les messages après leur stockage.
Choisissez un type de décalage de début.
Sélectionnez Export to Pub/Sub topic (Exporter vers un sujet Pub/Sub).
Dans la liste Sujet de destination, choisissez un sujet Pub/Sub pour recevoir les messages Lite exportés.
Facultatif. Spécifiez une lettre morte.
- Cochez la case Activer la gestion des lettres mortes.
- Sélectionnez un sujet Lite à utiliser comme file d'attente de lettres mortes ou cliquez sur Créer Sujet Lite pour créer un file d'attente de lettres mortes. Le file d'attente de lettres mortes doit se trouver dans le même emplacement (zone ou région) et le même projet que l'exportation abonnement.
Cliquez sur Créer.
gcloud
Pour créer un abonnement d'exportation, utilisez la
gcloud pubsub lite-subscriptions create
commande:
gcloud pubsub lite-subscriptions create SUBSCRIPTION_ID \ --location=LOCATION \ --topic=TOPIC_ID \ --export-pubsub-topic=PUBSUB_TOPIC_NAME \ --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \ --export-desired-state=DESIRED_STATE
Remplacez les éléments suivants :
- SUBSCRIPTION_ID : ID de l'abonnement Lite à créer.
- LOCATION : emplacement de l'abonnement Lite.
- TOPIC_ID : ID du sujet Lite à associer à l'abonnement Lite.
- PUBSUB_TOPIC_NAME : nom du sujet Pub/Sub vers lequel exporter. Indiquez le nom complet si le sujet se trouve dans un autre projet:
projects/my-project-id/topics/my-topic-id
. - DEAD_LETTER_TOPIC_ID : facultatif. ID d'un sujet Lite à utiliser comme lettres mortes. Le sujet de boîte aux lettres mortes doit se trouver dans le même emplacement (zone ou région) et projet que l'abonnement d'exportation.
- DESIRED_STATE : facultatif. État de départ de l'abonnement.
Les valeurs suivantes sont acceptées :
active
: l'abonnement exporte les messages Lite vers Pub/Sub. (Par défaut.)paused
: l'exportation des messages Lite est suspendue.
Si la requête aboutit, la ligne de commande affiche une confirmation :
Created [SUBSCRIPTION_ID].
Protocole
Pour créer un abonnement d'exportation Lite, envoyez une requête POST
comme suit :
POST https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID Authorization: Bearer $(gcloud auth print-access-token)
Remplacez les éléments suivants :
- REGION : région dans laquelle stocker l'abonnement Lite.
- PROJECT_NUMBER: numéro du projet dans lequel créer le Abonnement Lite activé.
- LOCATION : nom d'un emplacement compatible avec Pub/Sub Lite.
- SUBSCRIPTION_ID: ID de l'abonnement Lite.
Spécifiez les champs suivants dans le corps de la requête :
{ "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } } }
Remplacez les éléments suivants :
- DELIVERY_REQUIREMENT : exigence de livraison,
DELIVER_AFTER_STORED
ouDELIVER_IMMEDIATELY
. - DESIRED_STATE : état de départ de l'abonnement. La
les valeurs suivantes sont acceptées:
ACTIVE
: l'abonnement exporte les messages Lite vers Pub/Sub.PAUSED
: l'exportation des messages Lite est suspendue.
- DEAD_LETTER_TOPIC_ID: ID d'un sujet Lite existant à utiliser sous forme de lettre morte. Ce sujet doit se trouver dans le même emplacement (zone ou région) et le projet comme abonnement d'exportation lui-même.
- PUBSUB_TOPIC_NAME : nom du sujet Pub/Sub vers lequel exporter. Exemple de format :
projects/my-project-id/topics/my-topic-id
.
Si la requête aboutit, la réponse est l'abonnement Lite au format JSON :
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" }, "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }
Go
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Go 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 Go.
Java
Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de Pub/Sub Lite.
Python
Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.
Modifier un abonnement d'exportation
Vous pouvez mettre à jour des abonnements Lite avec la console Google Cloud, la Google Cloud CLI ou l'API Pub/Sub Lite. Cette opération peut prendre jusqu'à secondes pour que les nouveaux paramètres soient appliqués.
Console
Accédez à la page Abonnements Lite.
Cliquez sur l'ID d'abonnement Lite.
Sur la page Détails de l'abonnement Lite, cliquez sur Modifier.
gcloud
Pour mettre à jour un abonnement Lite, exécutez la commande gcloud pubsub lite-subscriptions update
:
gcloud pubsub lite-subscriptions update SUBSCRIPTION_ID \ --location=LOCATION \ --delivery-requirement=DELIVERY_REQUIREMENT \ --export-pubsub-topic=PUBSUB_TOPIC_NAME \ --export-dead-letter-topic=DEAD_LETTER_TOPIC_ID \ --export-desired-state=DESIRED_STATE
Remplacez les éléments suivants :
- SUBSCRIPTION_ID: ID de l'abonnement Lite
- LOCATION : emplacement de l'abonnement Lite.
- DELIVERY_REQUIREMENT : facultatif. L'exigence de livraison, soit
deliver-after-stored
oudeliver-immediately
. - PUBSUB_TOPIC_NAME : facultatif. Le nom du
Sujet Pub/Sub vers lequel exporter. Spécifiez le nom complet si le sujet se trouve dans un autre projet :
projects/my-project-id/topics/my-topic-id
. - DEAD_LETTER_TOPIC_ID : ID d'un sujet Lite existant à utiliser comme sujet de lettres mortes. Le sujet doit se trouver dans le même emplacement (zone ou région) et projet que l'abonnement d'exportation lui-même.
- DESIRED_STATE : facultatif. État souhaité de l'abonnement.
Les valeurs suivantes sont acceptées :
active
: l'abonnement exporte les messages Lite vers Pub/Sub. (Par défaut.)paused
: l'exportation des messages Lite est suspendue.
Si la requête aboutit, la ligne de commande affiche l'abonnement Lite :
Updated subscription [SUBSCRIPTION_ID]. deliveryConfig: deliveryRequirement: DELIVERY_REQUIREMENT exportConfig: currentState: DESIRED_STATE deadLetterTopic: projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID desiredState: DESIRED_STATE pubsubConfig: topic: PUBSUB_TOPIC_NAME name: projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID topic: projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID
Protocole
Pour mettre à jour un abonnement Lite, envoyez une requête PATCH
comme suit :
PATCH https://REGION-pubsublite.googleapis.com/v1/admin/projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID?updateMask=deliveryConfig.deliveryRequirement,exportConfig Authorization: Bearer $(gcloud auth print-access-token)
Remplacez les éléments suivants :
- REGION : région dans laquelle l'abonnement Lite a été créé.
- PROJECT_NUMBER : numéro du projet dans lequel l'abonnement Lite a été créé.
- LOCATION : emplacement où l'abonnement Lite a été créé.
- SUBSCRIPTION_ID : ID de l'abonnement Lite.
Spécifiez les champs suivants dans le corps de la requête :
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } } }
Remplacez les éléments suivants :
- DELIVERY_REQUIREMENT : exigence de livraison,
DELIVER_AFTER_STORED
ouDELIVER_IMMEDIATELY
. - DESIRED_STATE: état souhaité pour l'abonnement. La
les valeurs suivantes sont acceptées:
ACTIVE
: l'abonnement exporte les messages Lite vers Pub/Sub.PAUSED
: l'exportation des messages Lite est suspendue.
- DEAD_LETTER_TOPIC_ID: ID d'un sujet Lite existant à utiliser sous forme de lettre morte. Le sujet doit se trouver dans le même emplacement (zone ou région) et projet que l'abonnement à l'exportation lui-même.
- PUBSUB_TOPIC_NAME : nom du sujet Pub/Sub de destination. Exemple de format :
projects/my-project-id/topics/my-topic-id
.
Si la requête aboutit, la réponse est l'abonnement Lite au format JSON :
{ "deliveryConfig": { "deliveryRequirement": "DELIVERY_REQUIREMENT", }, "exportConfig": { "desiredState": "DESIRED_STATE", "deadLetterTopic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/DEAD_LETTER_TOPIC_ID", "pubsubConfig": { "topic": "PUBSUB_TOPIC_NAME" } }, "name": "projects/PROJECT_NUMBER/locations/LOCATION/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_NUMBER/locations/LOCATION/topics/TOPIC_ID", }
Suspendre ou démarrer un abonnement d'exportation
Le paramètre état souhaité pour les abonnements d'exportation est défini sur l'une des valeurs suivantes : deux valeurs:
- Active : l'abonnement exporte les messages Lite vers Pub/Sub.
- Suspendu : l'exportation des messages Lite est suspendue.
Pour modifier l'état souhaité dans la console Google Cloud :
Accédez à la page Abonnements Lite.
Cliquez sur l'ID d'abonnement Lite.
Sur la page Informations sur l'abonnement Lite, cliquez sur Suspendre ou Démarrer.
Vous pouvez également mettre à jour l'état souhaité à l'aide de la Google Cloud CLI ou l'API Pub/Sub Lite. Consultez la section Mettre à jour un abonnement d'exportation.
Bonnes pratiques
Cette section décrit quelques bonnes pratiques à suivre lorsque vous utilisez des abonnements d'exportation.
Réservations
Nous vous recommandons d'utiliser un abonnement d'exportation avec une réservation plutôt que de définir explicitement la capacité de débit de l'abonnement.
Compatibilité des messages
Si un message Pub/Sub Lite n'est pas compatible avec Pub/Sub, l'abonnement d'exportation ne publie pas le message Pub/Sub. Au lieu de cela, il place le message dans la file d'attente de lettres mortes, s'il en a été attribué. Si aucun file d'attente de lettres mortes n'a été attribué, non compatible les messages sont simplement ignorés.
Lorsque vous publiez des messages dans le sujet Lite, tenez compte des points suivants problèmes de compatibilité:
Clés : Les clés Pub/Sub Lite sont de type
bytes
, tandis que Les clés de tri Pub/Sub sont de typestring
. Pour assurer la compatibilité, le La clé Pub/Sub Lite ne doit contenir que des caractères UTF-8.Attributs : Les attributs de message doivent respecter les exigences suivantes :
- Pour être compatibles, tous les attributs de message Pub/Sub Lite ne doit comporter qu'une seule valeur. Pub/Sub Lite prend en charge les messages avec plusieurs valeurs, mais Pub/Sub n'accepte attributs à valeur unique.
- Les attributs du message ne doivent pas dépasser la valeur Limites des messages Pub/Sub le nombre maximal d'attributs par message, ainsi que la taille maximale de clé et de valeur par .
File d'attente de lettres mortes
Pour conserver et gérer les messages incompatibles, nous vous recommandons d'utiliser une lettre morte. sur un sujet. Vous pouvez attribuer un sujet de lettres mortes lorsque vous créez l'abonnement d'exportation ou mettre à jour un abonnement d'exportation existant pour utiliser un sujet de lettres mortes. Si l'abonnement reçoit un message incompatible avec Pub/Sub, il publie le message dans la file d'attente de lettres mortes.
Un sujet de lettre morte est un sujet Pub/Sub Lite standard. Il doit se trouver dans le même emplacement et le même projet que l'abonnement d'exportation, et être un sujet différent du sujet source.
En règle générale, un file d'attente de lettres mortes présente une faible utilisation du débit. Par conséquent, nous recommandent d'attribuer une réservation à la file d'attente de lettres mortes, plutôt que alloue un débit au sujet.
Erreurs de distribution
Un abonnement d'exportation tente de distribuer tous les messages compatibles au
à un sujet Pub/Sub de destination. Si la distribution du message échoue, l'exportation
abonnement est suspendu. Pour trouver la catégorie d'erreur, consultez la
subscription/export_status
métrique. Les valeurs suivantes indiquent une erreur :
PERMISSION_DENIED
: autorisations insuffisantes pour exporter les messages.NOT_FOUND
: une ou plusieurs ressources n'ont pas été trouvées. Par exemple, le sujet de destination n'existe pas.
Pour en savoir plus sur le dépannage, consultez la section Résoudre les problèmes liés aux abonnements d'exportation.
Une fois l'erreur résolue, l'abonnement à l'exportation redémarre automatiquement en raison de nouvelles tentatives.
Tarifs
Pub/Sub Lite et Pub/Sub vous sont facturés les ressources utilisées par l'abonnement d'exportation. Plus précisément, vous êtes facturé pour le débit et le stockage alloués de l'abonnement les abonnements Pub/Sub Lite, qui sont configurés pour un sujet Pub/Sub Lite. La publication sur à un sujet Pub/Sub de destination. Consultez les tarifs de Pub/Sub.
L'utilisation de la fonctionnalité d'exportation n'entraîne aucuns frais supplémentaires la différence de prix entre les abonnements à l'exportation Pub/Sub Lite et abonnements standards.
Résoudre les problèmes liés à l'exportation des abonnements
Cette section décrit quelques conseils de dépannage pour l'exportation des abonnements.
L'abonnement à l'exportation est suspendu
Si l'abonnement est suspendu, aucun message n'est exporté.
Pour détecter ce problème:
Console Google Cloud: consultez les détails de l'abonnement Si l'abonnement est en pause, les valeurs État souhaité et État actuel sont
Paused
.Métriques: la métrique
subscription/export_status
estPAUSED
.
Pour résoudre ce problème, lancez l'abonnement.
Le sujet de destination ou de file d'attente de lettres mortes a été supprimé
Si vous supprimez le sujet Pub/Sub associé à un abonnement d'exportation ou le sujet de lettres mortes, une erreur se produit.
Pour détecter ce problème :
Console Google Cloud: consultez les détails de l'abonnement Si le sujet était supprimée, l'état actuel est
Not found
.Métriques : métrique
subscription/export_status
. Si le sujet était supprimée, sa valeur estNOT_FOUND
.
Pour résoudre ce problème, vérifiez le sujet Pub/Sub de destination et le sujet de boîte aux lettres mortes (le cas échéant).
Si la destination Pub/Sub de destination a été supprimée, recréez le sujet avec le même nom. L'abonnement à l'exportation reprend la publication, en supposant que autorisations n'ont pas été modifiées.
Si le sujet de lettres mortes a été supprimé, créez-en un autre et mettez à jour l'abonnement d'exportation pour le référencer.
Messages incompatibles
Si les messages sont incompatibles avec Pub/Sub, ils ne sont pas exportés.
Pour détecter ce problème :
- Métriques: la métrique
subscription/unexportable_message_count
indique le nombre de messages incompatibles qui n'ont pas pu être exportés.
Pour résoudre ce problème, utilisez un sujet de lettre morte pour conserver les messages incompatibles. Examinez les messages pour déterminer la cause, puis transformez-les et les publiez à nouveau si nécessaire. Consultez la section Compatibilité des messages.
L'exportation est limitée
Pour détecter ce problème :
- Métriques: la métrique
subscription/flow_control_status
montre un contrôle de flux raison deNO_CLIENT_TOKENS
, qui indique que la limite par partition de octets en attente ou messages est atteint. Tant que le problème n'est pas résolu, la file d'attente augmente pour les abonnements d'exportation associés.
Cette erreur a plusieurs causes possibles. La plupart des causes possibles se produisent en arrière-plan, mais vérifiez les points suivants :
- Assurez-vous de publier des messages Lite partageant la même clé à un débit inférieur à 1 Mio/s par clé. L'abonnement à l'exportation écrit les clés de message Lite sous la forme et Pub/Sub a un débit de 1 Mio/s limit sur chaque clé de tri. Le dépassement de cette limite peut entraîner un débit limité.
L'utilisateur n'est pas autorisé à effectuer cette action.
L'agent de service Pub/Sub Lite doit les autorisations nécessaires pour publier dans le sujet Pub/Sub de destination.
Pour détecter ce problème :
Console Google Cloud: consultez le détails de l'abonnement En cas d'erreurs d'autorisation, l'état Current state (État actuel) est
Permission denied
.Métriques : la métrique
subscription/export_status
estPERMISSON_DENIED
.
Par exemple, les situations suivantes peuvent provoquer cette erreur :
- L'agent de service Pub/Sub Lite ne dispose pas de l'autorisation appropriée ou un rôle permettant de publier des messages dans le sujet Pub/Sub de destination un autre projet.
- L'agent de service a été supprimé de la stratégie IAM de l'exportation le projet parent de l'abonnement.
- L'agent de service Pub/Sub Lite est toujours en cours de configuration. Un agent de service est créé automatiquement lorsque vous créez le premier abonnement d'exportation dans un projet. L'erreur d'autorisation devrait se résoudre automatiquement dans les 10 minutes.
Pour résoudre le problème, vérifiez si l'agent de service a obtenu le bon l'autorisation ou le rôle requis. Consultez la section Agents de service.
Étape suivante
Choisissez entre Pub/Sub ou Pub/Sub Lite.