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 deseas controlar las regiones en las que se almacenan y procesan tus mensajes, puedes configurar una política de almacenamiento de mensajes en 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 lo actualizas 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 se aplica a otros datos, como nombres de temas, etiquetas o configuración de Identity and Access Management (IAM).

Pub/Sub almacena los mensajes cuando un cliente los publica en Pub/Sub. Una política de almacenamiento de mensajes garantiza que Pub/Sub almacene y procese mensajes solo en el conjunto de regiones de Google Cloud que especifiques, sin importar de dónde se originen las solicitudes de publicación o suscripción. Si la política permite varias regiones para las operaciones de publicación, Pub/Sub almacena el mensaje en una región permitida más cercana a 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:

  • Las solicitudes de publicación, extracción y streamingPull que se reciben en una región no permitida en la política de almacenamiento de mensajes se rechazan con un error FAILED_PRECONDITION.

  • La entrega de suscripciones push solo se controla dentro de las regiones de Cloud permitidas. 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, se determina de forma automática según la política vigente de la organización 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 admite todas las regiones.

  • Del mismo modo, si no hay una política de almacenamiento de mensajes especificada, la marca enforceInTransit se determina en función de la política de la organización vigente Aplicar regiones en tránsito para los mensajes de Pub/Sub. 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 maneras de configurar políticas de almacenamiento de mensajes para temas, como 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 aplique a varios temas, establece una política de la organización Restricción de ubicación de recursos.

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

    Ir a Políticas de la organización

  2. Selecciona el nodo de jerarquía de recursos (organización, carpeta o proyecto) para el que deseas configurar una política de 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.

    Los temas nuevos que crees heredarán esta configuración. Los cambios no se propagan automáticamente a los temas existentes. Para actualizar los 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 cuando creas un tema. En su lugar, todos los temas nuevos heredan automáticamente la política de la organización 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 comando 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 el nombre de tu tema nuevo.
  • REGION1, REGION2: Es una lista separada por comas de las regiones de Google Cloud compatibles.

REST

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

La solicitud debe autenticarse con un token de acceso en el encabezado Authorization. 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 los 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.

    Es posible que este panel esté cerrado 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 política de restricción de ubicación de recursos de tu organización 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 encabezado Authorization. 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 la política de la organización y las políticas de almacenamiento de mensajes de temas individuales.

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 los 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 las 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.

Cómo 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.

    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 las 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, agregar más regiones a la política de almacenamiento de mensajes no aumentará la disponibilidad. Cuando se publica desde fuera de Google Cloud, hay una capa adicional de enrutamiento para enviar la solicitud a una región de Google Cloud cercana en la que el servicio de Pub/Sub está disponible.

Considera una política de almacenamiento de mensajes que permita solo 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?