Configurer les règles de stockage des messages

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 règle de stockage des messages lorsque vous créez ou mettez à jour un sujet à 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. Elle ne s'applique pas à d'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 sur Pub/Sub. Une règle de stockage des messages garantit que Pub/Sub stocke et traite uniquement les messages dans l'ensemble des 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, d'extraction et de streamingPull reçues dans une région non autorisée dans la règle de stockage des messages sont refusées avec une erreur FAILED_PRECONDITION.

  • La distribution des abonnements push n'est gérée que dans les régions Cloud autorisées. Dans certains cas, cette restriction peut complètement suspendre la distribution des messages pour les abonnements push. Lorsqu'un abonnement push est dans un tel état, car les emplacements push sont trop limités par une combinaison de facteurs tels que l'emplacement de stockage des messages, les régions autorisées et l'emplacement des ressources 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 lorsque vous créez un sujet, celle-ci est automatiquement déterminée en fonction de la règle d'administration de restriction d'emplacement des ressources en vigueur. 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 d'une règle de stockage des messages spécifiée, l'option enforceInTransit est déterminée en fonction de la règle d'administration Appliquer les régions en 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 Gérer les différences entre les règles d'administration et les règles relatives aux sujets.

  • Lorsque les règles de stockage des messages d'un sujet sont mises à 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 les règles de stockage des messages

Il existe deux façons de configurer les règles de stockage des messages pour les 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.

  1. Accédez à la page Règles d'administration de la console Identity and Access Management.

    Accéder à la page Règles d'administration

  2. Sélectionnez le nœud de hiérarchie des ressources (organisation, dossier ou projet) sur lequel vous souhaitez définir une règle d'administration.

  3. Dans le filtre, saisissez Restriction d'emplacement des ressources.

  4. Cliquez sur Google Cloud - Restriction d'emplacement des ressources.

  5. Cliquez sur MODIFIER.

  6. Ajoutez ou supprimez des régions selon vos besoins.

    Tous les thèmes que vous créez héritent de ces paramètres. Les modifications ne sont pas automatiquement appliquées 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 règle 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 ses règles de stockage des messages dans la console en effectuant une opération de mise à jour.

gcloud CLI

Pour créer un sujet avec une règle 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 thème.
  • REGION1, REGION2: liste des régions Google Cloud disponibles, séparées par une virgule.

REST

Pour créer un sujet avec une règle de stockage des messages, utilisez la méthode projects.topics.create.

La requête 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 est la région spécifiée.

Exemple de réponse :

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

Consultez les documentations de référence de l'API suivantes pour en savoir plus sur la configuration des règles de stockage des messages.

Mettre à jour les règles de stockage des messages

Console

  1. Dans la console Google Cloud, ouvrez la page Détails du sujet.

    Accéder aux détails du sujet

  2. Sélectionnez un sujet à mettre à jour.

    Vous pouvez sélectionner plusieurs thèmes.

  3. Dans le panneau d'informations, sélectionnez l'onglet Règles de stockage.

    Il est possible que ce panneau soit réduit par défaut. S'il est réduit, cliquez sur Afficher le panneau d'informations.

  4. Sélectionnez ou désélectionnez autant de régions que nécessaire.

  5. Cliquez sur Update (Mettre à jour).

gcloud CLI

Pour appliquer à un sujet la règle de stockage des messages définie dans la stratégie de restriction d'emplacement des ressources de votre organisation, 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 thème que vous mettez à jour.
  • REGION1, REGION2: liste des régions Google Cloud disponibles, séparées par une virgule.

REST

Pour mettre à jour un sujet avec une règle de stockage des messages, utilisez la méthode projects.topics.patch.

La requête 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 est la région spécifiée.

Exemple de réponse :

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": [
      "REGION"
    ],
    "enforceInTransit": true
  }
}

Consultez les documentations de référence de l'API suivantes pour en savoir plus sur la mise à jour des règles de stockage des messages.

Gérer les différences entre les règles d'administration et les règles par thème

Afficher les différences entre les règles d'administration et les règles par thème

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 ne sont pas synchronisés avec votre règle d'administration:

  1. Accédez à la page Détails du sujet.

    Accéder aux détails du sujet

  2. Sélectionnez un thème.

  3. Dans le panneau d'informations, sélectionnez l'onglet Règles de stockage.

    Il est possible que ce panneau soit réduit par défaut. S'il est réduit, cliquez sur Afficher le panneau d'informations.

    Vos règles de stockage sont affichées dans le panneau, ainsi que les différences entre les règles d'administration et les règles thématiques.

gcloud CLI

Pour examiner la stratégie actuellement 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 par thème

Console

  1. Dans la console Google Cloud, ouvrez la page Détails du sujet.

    Accéder à Pub/Sub

  2. Sélectionnez un thème.

  3. Dans le panneau d'informations, sélectionnez l'onglet Règles de stockage.

    Il est possible que ce panneau soit réduit par défaut. S'il est réduit, cliquez sur Afficher le panneau d'informations.

    Vos règles de stockage et les écarts sont affichés dans le panneau.

    En cas d'écarts, le panneau d'informations affiche trois options pour synchroniser la règle de stockage du sujet avec votre règle d'administration:

    • Topics permet le stockage dans des emplacements non autorisés.

      Mise à jour permettant de n'autoriser le stockage que lorsque votre stratégie le permet.

    • Topic 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 et incluent des emplacements non autorisés et autorisés.

      Mise à jour permettant d'autoriser le stockage lorsque votre stratégie le permet.

  4. Sélectionnez l'option appropriée pour résoudre les problèmes.

  5. Cliquez sur Mettre à jour le sujet.

    La boîte de dialogue Synchroniser avec les règles de stockage de l'organisation s'ouvre.

  6. Cliquez sur Mettre à jour le sujet.

Surveillance et dépannage

Pour vous aider à comprendre où les données des messages sont stockées, 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 d'éditeurs dans l'ensemble des régions autorisées par la règle de stockage des messages ne constatent aucun changement en termes de latence ou de 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 fait d'ajouter des régions à la règle de stockage des messages n'augmente pas la disponibilité. Lors de la publication depuis une source extérieure à Google Cloud, une couche de routage supplémentaire est requise pour transmettre la requête à une région Google Cloud à proximité, où le service Pub/Sub est disponible.

Prenons l'exemple d'une règle de stockage des messages qui n'autorise que la région us-central1.

  1. Un client éditeur qui s'exécute dans la région us-east1 émet une requête Publish.
  2. La requête est acheminée vers un serveur Pub/Sub dans la région us-east1.
  3. 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, à savoir us-central1.
  4. 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.

Étapes suivantes