Si vous publiez des messages sur le point de terminaison mondial Pub/Sub, Pub/Sub les stocke automatiquement dans la région Google Cloud la plus proche. Si vous souhaitez contrôler les régions dans lesquelles vos messages sont stockés et traités, vous pouvez configurer une règle de stockage des messages sur votre sujet.
Présentation des règles de stockage des messages
Vous pouvez définir une stratégie de stockage des messages lorsque vous créez un sujet ou que vous le mettez à jour à l'aide de la console, de Google Cloud CLI ou des API REST.
La règle de stockage des messages ne s'applique qu'au contenu des messages. La règle ne s'applique pas aux autres données, telles que les noms de sujets, les libellés ou les paramètres IAM (Identity and Access Management).
Pub/Sub stocke les messages lorsqu'un client les publie dans Pub/Sub. Une règle de stockage des messages garantit que Pub/Sub ne stocke et ne traite les messages que dans l'ensemble de régions Google Cloud que vous spécifiez, quelle que soit l'origine des requêtes de publication ou d'abonnement. Si la règle autorise plusieurs régions pour les opérations de publication, Pub/Sub stocke le message dans une région autorisée la plus proche de l'endroit où le message publié entre dans le réseau Google Cloud.
Lorsque vous spécifiez une règle de stockage des messages, vous pouvez définir enforceInTransit
sur True
. Cet indicateur régit les éléments suivants:
Les requêtes de publication, de pull et de streamingPull reçues dans une région non autorisée dans la règle de stockage des messages sont rejetées avec une erreur
FAILED_PRECONDITION
.La diffusion des abonnements push n'est gérée que dans les régions Cloud autorisées. Dans certains cas, cette restriction peut suspendre complètement la distribution des messages pour les abonnements push. Lorsqu'un abonnement push entre dans cet état en raison de la trop grande contrainte des emplacements de diffusion par une combinaison de facteurs tels que l'emplacement de stockage des messages, les régions autorisées et l'emplacement de la ressource d'exportation, cet état devient visible dans Stackdriver.
Règles de stockage des messages pour les nouveaux sujets
Si vous ne spécifiez pas de règle de stockage des messages lors de la création d'un sujet, elle est automatiquement déterminée en fonction de la règle d'administration Restriction d'emplacement des ressources. Lorsqu'aucune règle d'administration n'est appliquée, la règle de stockage des messages autorise toutes les régions.
De même, en l'absence de règle de stockage des messages spécifiée, l'indicateur
enforceInTransit
est déterminé en fonction de la règle d'administration Application des régions de transit pour les messages Pub/Sub en vigueur. Pour en savoir plus sur cette règle d'administration, consultez la page Contraintes liées aux règles d'administration.Si vous spécifiez une règle de stockage des messages lors de la création d'un sujet, elle ne peut contenir que les régions autorisées par la règle d'administration Restriction d'emplacement des ressources. Lorsqu'aucune règle d'administration n'est appliquée, la règle de stockage des messages peut contenir n'importe quelle région.
Règles de stockage des messages pour les sujets existants
Lorsqu'une règle d'administration est mise à jour, les modifications ne se propagent pas automatiquement aux sujets existants. Par conséquent, la règle de stockage des messages d'un sujet existant peut ne plus être synchronisée avec les dernières règles d'administration. Pour en savoir plus, consultez la section Gérer les différences entre les règles d'administration et les règles appliquées aux sujets.
Lorsque la règle de stockage des messages d'un sujet est mise à jour, les modifications ne se propagent pas aux messages déjà publiés. Les messages déjà stockés en fonction d'une ancienne règle ne sont pas transférés à des fins de cohérence avec la nouvelle règle. À l'inverse, les modifications ne s'appliquent qu'aux messages publiés après la mise à jour.
Exceptions
La règle spécifie une liste des noms de régions Google Cloud autorisés. Par conséquent, les éléments suivants ne sont pas acceptés :
- Listes d'exclusion
- Zones ou zones multirégionales
Si vous publiez un message avec une clé de tri et que la règle de stockage des messages exclut la région la plus proche, le service Pub/Sub renvoie une erreur.
Configurer des règles de stockage des messages
Il existe deux façons de configurer des règles de stockage des messages pour des sujets:
- Définissez une règle de stockage des messages à l'aide d'une règle d'administration.
- Configurez une règle de stockage des messages lorsque vous créez un sujet.
Définir une règle de stockage des messages à l'aide d'une règle d'administration
Console
Pour configurer une règle de stockage des messages qui s'applique à plusieurs sujets, définissez une règle d'administration Restriction d'emplacement des ressources.
Accédez à la page Règles d'administration dans la console Identity and Access Management.
Sélectionnez le nœud de la hiérarchie des ressources (organisation, dossier ou projet) auquel vous souhaitez appliquer une règle d'administration.
Dans le filtre, saisissez Restriction d'emplacement des ressources.
Cliquez sur Google Cloud - Restriction d'emplacement des ressources.
Cliquez sur MODIFIER.
Ajoutez ou supprimez des régions selon vos besoins.
Tous les nouveaux sujets que vous créez héritent de ces paramètres. Les modifications ne se propagent pas automatiquement aux sujets existants. Pour mettre à jour des sujets existants, vous devez exécuter une opération de mise à jour.
Pour en savoir plus sur les règles d'administration, consultez Gérer vos ressources Google Cloud.
Configurer une règle de stockage des messages lors de la création d'un sujet
Console
Lorsque vous utilisez la console Google Cloud, vous ne pouvez pas configurer de stratégie de stockage des messages lorsque vous créez un sujet. À la place, tous les nouveaux sujets héritent automatiquement de votre règle d'administration Restriction d'emplacement des ressources.
Toutefois, après avoir créé un sujet, vous pouvez modifier sa règle de stockage des messages dans la console à l'aide d'une opération de mise à jour.
CLI gcloud
Pour créer un sujet avec une stratégie de stockage des messages spécifique, exécutez la commande gcloud pubsub topics create
avec l'option --message-storage-policy-allowed-regions
:
gcloud pubsub topics create TOPIC_ID \ --message-storage-policy-allowed-regions=REGION1,REGION2
Remplacez les éléments suivants :
TOPIC_ID
: ID ou nom de votre nouveau sujet.REGION1, REGION2
: liste des régions Google Cloud compatibles, séparées par une virgule.
REST
Pour créer un sujet avec une stratégie de stockage des messages, utilisez la méthode projects.topics.create
.
La demande doit être authentifiée à l'aide d'un jeton d'accès dans l'en-tête Authorization
. Pour obtenir un jeton d'accès pour les identifiants par défaut actuels de l'application, exécutez la commande suivante : gcloud auth application-default print-access-token
.
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json --data @response-body.json
Spécifiez les champs suivants dans le corps de la requête :
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": ["REGION"],
"enforceInTransit": true
}
}
Où :
PROJECT_ID est l'ID de votre projet.
TOPIC_ID est l'ID de votre sujet.
REGION correspond à la région que vous avez spécifiée.
Exemple de réponse :
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": [
"REGION"
],
"enforceInTransit": true
}
}
Pour en savoir plus sur la configuration des règles de stockage des messages, consultez les références d'API suivantes.
Mettre à jour les règles de stockage des messages
Console
Dans la console Google Cloud, ouvrez la page Détails du sujet.
Sélectionnez un sujet à mettre à jour.
Vous pouvez sélectionner plusieurs sujets.
Dans le panneau d'informations, sélectionnez l'onglet Règles de stockage.
Ce panneau peut être réduit par défaut. S'il est réduit, cliquez sur Afficher le panneau d'informations.
Sélectionnez ou désélectionnez autant de régions que nécessaire.
Cliquez sur Mettre à jour.
CLI gcloud
Pour appliquer la règle de stockage des messages définie dans la stratégie de restriction d'emplacement des ressources de votre organisation à un sujet, exécutez la commande gcloud pubsub topics update
suivante:
gcloud pubsub topics update TOPIC_ID \ --recompute-message-storage-policy
Pour mettre à jour la règle de stockage des messages d'un sujet avec des régions spécifiques, exécutez la commande gcloud pubsub topics update
avec l'option --message-storage-policy-allowed-regions
:
gcloud pubsub topics update TOPIC_ID \ --message-storage-policy-allowed-regions=REGION1,REGION2
Remplacez les éléments suivants :
TOPIC_ID
: ID du sujet que vous mettez à jour.REGION1, REGION2
: liste des régions Google Cloud compatibles, séparées par une virgule.
REST
Pour mettre à jour un sujet avec une stratégie de stockage des messages, utilisez la méthode projects.topics.patch
.
La demande doit être authentifiée à l'aide d'un jeton d'accès dans l'en-tête Authorization
. Pour obtenir un jeton d'accès pour les identifiants par défaut actuels de l'application, exécutez la commande suivante : gcloud auth application-default print-access-token
.
PATCH https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer $(gcloud auth application-default print-access-token)
Content-Type: application/json --data @response-body.json
Spécifiez les champs suivants dans le corps de la requête :
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": ["REGION"], // Replace with your required region
"enforceInTransit": true
}
}
Où :
PROJECT_ID est l'ID de votre projet.
TOPIC_ID est l'ID de votre sujet.
REGION correspond à la région que vous avez spécifiée.
Exemple de réponse :
{
"name": "projects/PROJECT_ID/topics/TOPIC_ID",
"messageStoragePolicy": {
"allowedPersistenceRegions": [
"REGION"
],
"enforceInTransit": true
}
}
Pour en savoir plus sur la mise à jour des règles de stockage des messages, consultez les références d'API suivantes.
Gérer les différences entre les règles d'administration et les règles appliquées aux sujets
Afficher les différences entre les règles d'administration et les règles appliquées aux sujets
Console
La console Google Cloud affiche les différences entre les règles d'administration et les règles de stockage des messages appliquées à chaque sujet.
Pour savoir si des sujets sont désynchronisés avec votre règle d'administration:
Accédez à la page Détails du sujet.
Sélectionnez un sujet.
Dans le panneau d'informations, sélectionnez l'onglet Règles de stockage.
Ce panneau peut être réduit par défaut. S'il est réduit, cliquez sur Afficher le panneau d'informations.
Vos règles de stockage s'affichent dans le panneau, ainsi que les différences entre les règles d'administration et les règles appliquées aux sujets.
CLI gcloud
Pour examiner la stratégie actuelle attribuée à un sujet, exécutez la commande suivante:
gcloud pubsub topics describe TOPIC_ID
Remplacez les éléments suivants :
TOPIC_ID
: ID du sujet que vous examinez.
Résoudre les différences entre les règles d'administration et les règles appliquées aux sujets
Console
Dans la console Google Cloud, ouvrez la page Détails du sujet.
Sélectionnez un sujet.
Dans le panneau d'informations, sélectionnez l'onglet Règles de stockage.
Ce panneau peut être réduit par défaut. S'il est réduit, cliquez sur Afficher le panneau d'informations.
Vos règles de stockage s'affichent dans le panneau, ainsi que les écarts éventuels.
En cas de divergence, le panneau d'informations affiche trois options pour synchroniser les règles de stockage du sujet avec celles de votre organisation, y compris:
Les thèmes permettent le stockage dans des emplacements non autorisés.
Mise à jour permettant de n'autoriser le stockage que lorsque votre stratégie le permet.
Le thème n'autorise pas le stockage dans certains emplacements autorisés.
Mise à jour permettant d'autoriser le stockage partout où votre stratégie le permet.
Les thèmes sont obsolètes avec des emplacements non autorisés et autorisés.
Mise à jour permettant d'autoriser le stockage lorsque votre stratégie le permet.
Sélectionnez l'option appropriée pour résoudre vos problèmes.
Cliquez sur Mettre à jour le sujet.
La boîte de dialogue Synchroniser avec les règles de stockage de l'organisation s'ouvre.
Cliquez sur Mettre à jour le sujet.
Surveillance et dépannage
Pour vous aider à comprendre l'emplacement de stockage des données de messages, Pub/Sub propose des métriques réparties par région Google Cloud.
Grâce à ces métriques, vous pouvez :
- comprendre comment vos données sont distribuées dans le monde entier ;
- optimiser l'emplacement de déploiement des abonnés et des éditeurs en fonction de ces données.
Métriques de stockage des messages
Nombre de messages non confirmés stockés :
subscription/num_unacked_messages_by_region
Volume de données stockées :
subscription/unacked_bytes_by_region
Âge du message le plus ancien :
subscription/oldest_unacked_message_age_by_region
Des métriques analogues sont disponibles pour les sujets et les instantanés. En outre, des métriques correspondantes sont disponibles pour les messages confirmés qui sont éventuellement conservés pour une nouvelle lecture. Exemple :
subscription/num_retained_acked_messages_by_region
Implications en termes de performance et de disponibilité
La règle de stockage des messages n'affecte pas le contrat de niveau de service dans son ensemble, mais introduit un compromis en termes de contrôle de la disponibilité lorsque les éditeurs ou les abonnés s'exécutent en dehors de Google Cloud ou dans des régions non autorisées par la règle. Les utilisateurs qui exécutent des clients éditeurs dans l'ensemble des régions autorisées par la règle de stockage des messages ne constatent aucun changement en ce qui concerne la latence ou la disponibilité du service.
Pour comprendre ces compromis, il est utile d'examiner la manière dont les requêtes de publication sont acheminées. En règle générale, Pub/Sub tente de stocker vos messages aussi près que possible de la source de la requête. En principe, les requêtes provenant de Google Cloud sont liées aux instances Pub/Sub de la même région. Si un éditeur se trouve dans une seule région, le simple fait d'ajouter d'autres régions à la règle de stockage des messages n'a aucune incidence sur la disponibilité. Lors de la publication en dehors de Google Cloud, une couche supplémentaire d'acheminement est nécessaire pour envoyer la requête à une région Google Cloud à proximité dans laquelle le service Pub/Sub est disponible.
Envisagez de définir une règle de stockage des messages qui n'autorise que la région us-central1
.
- Un client éditeur qui s'exécute dans la région
us-east1
émet une requêtePublish
. - La requête est acheminée vers un serveur Pub/Sub dans la région
us-east1
. - Plutôt que de stocker les données dans la région
us-east1
, la requête est acheminée vers la région la plus proche autorisée par la règle de stockage des messages, à savoirus-central1
. - Pub/Sub stocke les messages publiés dans la région
us-central1
et transfère les messages aux abonnés à partir de cet emplacement.
Ce mécanisme a des conséquences sur la latence des requêtes et la disponibilité globale du système. Comme la requête traverse davantage de liens réseau, son traitement est plus long et présente un risque d'échec plus élevé. De plus, il est possible que les abonnés reçoivent le message un peu plus tard, car celui-ci doit être redirigé vers la région la plus proche avant d'être distribué. Si la règle autorise une seule région, mais que vos applications d'éditeur s'exécutent sur plusieurs régions, la disponibilité de l'application distribuée devient identique à celle de la seule région autorisée.
Étape suivante
- Pour en savoir plus sur l'utilisation de points de terminaison globaux ou géographiques, consultez la section Présentation des API Pub/Sub.