Configura políticas de almacenamiento de mensajes

Si publicas mensajes en el extremo global de Pub/Sub, Pub/Sub almacena automáticamente los mensajes en la región de Google Cloud más cercana. Si quieres controlar las regiones en las que se almacenan y procesan los mensajes, puedes configurar una política de almacenamiento de mensajes sobre tu tema.

Descripción general de la política de almacenamiento de mensajes

Puedes establecer una política de almacenamiento de mensajes cuando creas un tema nuevo o cuando actualizar un tema con la consola, Google Cloud CLI o las APIs de REST.

La política de almacenamiento de mensajes solo se aplica al contenido de los mensajes. La política no aplicar a otros datos, como nombres de temas, etiquetas o la configuración de Identity and Access Management (IAM).

Pub/Sub almacena mensajes cuando un cliente los publica en Pub/Sub Una política de almacenamiento de mensajes garantiza que Pub/Sub almacena y procesa mensajes solo en el conjunto de las regiones de Google Cloud que especifiques, sin importar dónde se publiquen se originan las solicitudes de suscripción. Si la política permite la publicación en varias regiones operaciones, Pub/Sub almacena el mensaje en la región permitida más cercana donde el mensaje publicado ingresa a la red de Google Cloud.

Cuando especificas una política de almacenamiento de mensajes, puedes establecer enforceInTransit en True. Esta marca rige lo siguiente:

  • Solicitudes de publicación, extracción y transmisión de extracción recibidas en una región no permitida de la política de almacenamiento de mensajes se rechazan con un FAILED_PRECONDITION .

  • La entrega de suscripciones de envío se controla solo dentro del entorno de Cloud permitido regiones. En algunos casos, esta restricción puede pausar por completo la entrega de mensajes para las suscripciones push. Cuando una suscripción push entra en un estado de este tipo debido a que las ubicaciones push están demasiado restringidas por una combinación de factores, como la ubicación de almacenamiento de mensajes, las regiones permitidas y la ubicación de recursos de exportación, este estado se vuelve visible en Stackdriver.

Políticas de almacenamiento de mensajes para temas nuevos

  • Si no especificas una política de almacenamiento de mensajes cuando creas un tema la política de almacenamiento de mensajes se determina automáticamente según la política de la organización de restricción de ubicación de recursos vigente. Cuando no hay ninguna política de la organización vigente, la política de almacenamiento de mensajes admite todas las regiones.

  • Del mismo modo, si no se especifica una política de almacenamiento de mensajes, La marca enforceInTransit se determina según la regla Aplica las regiones en tránsito para los mensajes de Pub/Sub en la política de la organización. Para obtener más información sobre esta política de la organización, consulta Restricciones de las políticas de la organización.

  • Si especificas una política de almacenamiento de mensajes cuando creas un tema, esta puede contener solo las regiones permitidas por la política de la organización vigente Restricción de ubicación de recursos. Cuando no hay ninguna política de la organización vigente, la política de almacenamiento de mensajes puede contener cualquier región.

Políticas de almacenamiento de mensajes para temas existentes

  • Cuando se actualiza una política de la organización, los cambios no se propagan de forma automática a los temas existentes. Por lo tanto, es posible que la política de almacenamiento de mensajes de un tema existente no esté sincronizada con la última política de la organización. Para obtener más información, consulta Administra las diferencias entre las políticas de la organización y de temas.

  • Cuando se actualiza la política de almacenamiento de mensajes de un tema, los cambios no se propagan a los mensajes ya publicados. Los mensajes que ya están almacenados según una política anterior no se modifican para que sean coherentes con la política nueva. En cambio, los cambios se aplican solo a los mensajes publicados después de la actualización.

Excepciones

La política especifica una lista de nombres de regiones permitidas de Google Cloud. Por lo tanto, los siguientes elementos no son compatibles:

  • Listas de exclusiones
  • Zonas o ubicaciones multirregionales

Si publicas un mensaje con una clave de ordenamiento y la política de almacenamiento de mensajes excluye la región más cercana, el servicio de Pub/Sub muestra un error.

Configura políticas de almacenamiento de mensajes

Existen dos formas de configurar políticas de almacenamiento de mensajes para los temas, incluidas las siguientes:

  • Establece una política de almacenamiento de mensajes con una política de la organización.
  • Configura una política de almacenamiento de mensajes cuando crees un tema.

Establece una política de almacenamiento de mensajes con una política de la organización

Console

Para configurar una política de almacenamiento de mensajes que se aplica a varios temas, sigue estos pasos: Establece una política de la organización de Restricción de ubicación de recursos.

  1. Ve a la página Políticas de la organización en Identity and Access Management la consola de Cloud.

    Ir a Políticas de la organización

  2. Selecciona el nodo de jerarquía de recursos (organización, carpeta o proyecto) en la que quieres establecer una política de la organización.

  3. En el filtro, ingresa Restringir ubicación de recursos.

  4. Haz clic en Google Cloud - Restricción de ubicación de recursos.

  5. Haz clic en EDITAR.

  6. Agrega o quita regiones según sea necesario.

    Todos los temas nuevos que crees heredarán esta configuración. Los cambios no propagarse automáticamente a temas existentes. Para actualizar temas existentes, debes ejecutar una operación de actualización.

Para obtener más información sobre las políticas de la organización, consulta Administra tus recursos de Google Cloud.

Configura una política de almacenamiento de mensajes cuando crees un tema

Console

Cuando usas la consola de Google Cloud, no puedes configurar una política de almacenamiento de mensajes a la hora de crear un tema. En cambio, todos los temas nuevos heredar tu política de la organización de restricción de ubicación de recursos

Sin embargo, después de crear un tema, puedes cambiar su política de almacenamiento de mensajes en la consola con una operación de actualización.

gcloud CLI

Para crear un tema con una política de almacenamiento de mensajes específica, usa el gcloud pubsub topics create con la marca --message-storage-policy-allowed-regions:

gcloud pubsub topics create TOPIC_ID \
    --message-storage-policy-allowed-regions=REGION1,REGION2

Reemplaza lo siguiente:

  • TOPIC_ID: Es el ID o nombre del tema nuevo.
  • REGION1, REGION2: una lista separada por comas de regiones admitidas de Google Cloud.

REST

Para crear un tema con una política de almacenamiento de mensajes, usa el projects.topics.create .

La solicitud debe autenticarse con un token de acceso en el Authorization encabezado. A fin de obtener un token de acceso para las credenciales predeterminadas actuales de la aplicación, usa el siguiente comando: 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

Especifica los siguientes campos en el cuerpo de la solicitud:

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

Aquí:

  • PROJECT_ID es el ID del proyecto.

  • TOPIC_ID es el ID del tema.

  • REGION es la región que especificaste.

Respuesta de muestra:

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

Consulta las siguientes referencias de la API para obtener más información sobre la configuración de las políticas de almacenamiento de mensajes.

Actualiza las políticas de almacenamiento de mensajes

Console

  1. En la consola de Google Cloud, abre la página Detalles del tema.

    Ir a Detalles del tema

  2. Selecciona un tema para actualizarlo.

    Puedes seleccionar varios temas.

  3. En el panel de información, selecciona la pestaña Política de almacenamiento.

    Este panel puede estar contraído de forma predeterminada. Si está cerrado, haz clic en Mostrar panel de información.

  4. Selecciona o anula la selección de tantas regiones como sea necesario.

  5. Haz clic en Actualizar.

gcloud CLI

Para enviar la política de almacenamiento de mensajes definida en la red Política de restricción de ubicación de recursos a un tema, ejecuta el siguiente comando: gcloud pubsub topics update :

gcloud pubsub topics update TOPIC_ID \
    --recompute-message-storage-policy

Para actualizar la política de almacenamiento de mensajes de un tema con regiones específicas, ejecuta el comando gcloud pubsub topics update con la marca --message-storage-policy-allowed-regions:

gcloud pubsub topics update TOPIC_ID \
    --message-storage-policy-allowed-regions=REGION1,REGION2

Reemplaza lo siguiente:

  • TOPIC_ID: Es el ID del tema que estás actualizando.
  • REGION1, REGION2: Es una lista separada por comas de las regiones de Google Cloud compatibles.

REST

Para actualizar un tema con una política de almacenamiento de mensajes, usa el método projects.topics.patch.

La solicitud debe autenticarse con un token de acceso en el Authorization encabezado. A fin de obtener un token de acceso para las credenciales predeterminadas actuales de la aplicación, usa el siguiente comando: 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

Especifica los siguientes campos en el cuerpo de la solicitud:

{
  "name": "projects/PROJECT_ID/topics/TOPIC_ID",
  "messageStoragePolicy": {
    "allowedPersistenceRegions": ["REGION"], // Replace with your required region
    "enforceInTransit": true
  }
}

Aquí:

  • PROJECT_ID es el ID del proyecto.

  • TOPIC_ID es el ID del tema.

  • REGION es la región que especificaste.

Respuesta de muestra:

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

Consulta las siguientes referencias de la API para obtener más información sobre cómo actualizar las políticas de almacenamiento de mensajes.

Administra las diferencias entre las políticas de la organización y de temas

Consulta las diferencias entre las políticas de la organización y de temas

Console

En la consola de Google Cloud, se muestran las diferencias entre los política de la organización y temas individuales de almacenamiento de mensajes.

Para ver si algún tema no está sincronizado con la política de tu organización, haz lo siguiente:

  1. Ve a la página Detalles del tema.

    Ir a Detalles del tema

  2. Selecciona un tema.

  3. En el Panel de información, selecciona la pestaña Política de almacenamiento.

    Es posible que este panel esté cerrado de forma predeterminada. Si está cerrado, haz clic en Mostrar panel de información.

    Tus políticas de almacenamiento se muestran en el panel, junto con cualquier diferencias entre las políticas de la organización y de temas.

gcloud CLI

Para examinar la política actual asignada a un tema, ejecuta el siguiente comando:

gcloud pubsub topics describe TOPIC_ID

Reemplaza lo siguiente:

  • TOPIC_ID: Es el ID del tema que examinas.

Resolver las diferencias entre las políticas de la organización y de temas

Console

  1. En la consola de Google Cloud, abre la página Detalles del tema.

    Ir a Pub/Sub

  2. Selecciona un tema.

  3. En el Panel de información, selecciona la pestaña Política de almacenamiento.

    Este panel puede estar contraído de forma predeterminada. Si está cerrado, haz clic en Mostrar panel de información.

    Tus políticas de almacenamiento se muestran en el panel, junto con cualquier discrepancias.

    Si hay discrepancias, el panel de información muestra tres opciones para sincronizar la política de almacenamiento del tema con la política de tu organización, incluidas las siguientes:

    • Los temas permiten el almacenamiento en ubicaciones no permitidas.

      Actualiza para permitir el almacenamiento solo en las ubicaciones que tu política autorice.

    • El tema no permite el almacenamiento en algunas ubicaciones permitidas.

      Actualiza para permitir el almacenamiento en todas las ubicaciones que tu política autorice.

    • Los temas están desactualizados en las ubicaciones permitidas y no permitidas.

      Actualiza para permitir el almacenamiento en las ubicaciones que tu política autorice.

  4. Selecciona la opción adecuada para resolver tus problemas.

  5. Haz clic en Actualizar tema.

    Se abrirá el diálogo Sincronizar con la política de almacenamiento de la organización.

  6. Haz clic en Actualizar tema.

Supervisa y soluciona problemas

Para ayudarte a comprender dónde se almacenan los datos de mensajes, Pub/Sub ofrece métricas desglosadas por cada región de Google Cloud.

Puedes usar estas métricas para lograr lo siguiente:

  • Comprender cómo se distribuyen tus datos en todo el mundo
  • Optimizar la ubicación de implementación del publicador y del suscriptor en función de esos datos

Métricas de almacenamiento de mensajes

Recuentos de mensajes almacenados no confirmados:

subscription/num_unacked_messages_by_region

Volumen de datos almacenados:

subscription/unacked_bytes_by_region

Antigüedad del primer mensaje:

subscription/oldest_unacked_message_age_by_region

Las métricas análogas están disponibles para los temas y las instantáneas. Además, las métricas correspondientes están disponibles para los mensajes confirmados que se retienen de forma opcional con el fin de volver a reproducirlos. Por ejemplo:

subscription/num_retained_acked_messages_by_region

Implicaciones de rendimiento y disponibilidad

La política de almacenamiento de mensajes no afecta al ANS general, pero presenta una compensación de control de disponibilidad cuando los publicadores o suscriptores se ejecutan fuera de Google Cloud o en regiones no permitidas por la política. Los usuarios que ejecutan clientes publicadores dentro del conjunto de regiones permitidas por la política de almacenamiento de mensajes no ven ningún cambio en la latencia o la disponibilidad del servicio.

Para entender estas compensaciones, es conveniente considerar cómo se enrutan las solicitudes de publicación. En general, Pub/Sub intenta almacenar tus mensajes lo más cerca posible del origen de la solicitud. Como regla general, las solicitudes que se originan en Google Cloud están vinculadas a las instancias de Pub/Sub en la misma región. Si un publicador se encuentra en una sola región, solo agregar más regiones a la política de almacenamiento de mensajes no aumenta la disponibilidad. Cuando se publica desde fuera de Google Cloud, se aplica una capa adicional de enrutamiento para enviar la solicitud a una región cercana de Google Cloud, donde El servicio de Pub/Sub está disponible.

Considera una política de almacenamiento de mensajes que solo permita la región us-central1.

  1. Un cliente publicador que se ejecuta en us-east1 emite una solicitud Publish.
  2. La solicitud se enruta a un servidor de Pub/Sub en us-east1.
  3. En lugar de almacenar los datos en us-east1, la solicitud se enruta a la región más cercana permitida por la política de almacenamiento de mensajes, que es us-central1.
  4. Pub/Sub almacena los mensajes publicados en us-central1 y reenvía mensajes a los suscriptores desde esa ubicación.

Este mecanismo afecta a la latencia de solicitudes y la disponibilidad general del sistema. Debido a que la solicitud desvía más vínculos de red, requiere más tiempo para completarse y tiene más probabilidades de fallar. Esto también significa que los suscriptores pueden ver el mensaje un poco más tarde porque debe dirigirse a la región permitida más cercana antes del envío. Si la política permite una sola región, pero tus aplicaciones de publicador se ejecutan en varias regiones, la aplicación distribuida estará disponible en función de la única región permitida.

¿Qué sigue?