Migrar de las notificaciones de cambios en objetos a las notificaciones de Pub/Sub

Esta guía está dirigida a los usuarios de la función Notificaciones de cambios de objetos, que está obsoleta, de Cloud Storage. Las notificaciones de Pub/Sub para Cloud Storage son la herramienta recomendada para generar notificaciones que hagan un seguimiento de los cambios en los objetos de tus segmentos de Cloud Storage. Las notificaciones de Pub/Sub ofrecen mayor velocidad, flexibilidad, facilidad de configuración y rentabilidad. En esta guía se explican las diferencias entre las notificaciones de cambio de objeto y las notificaciones de Pub/Sub de Cloud Storage, y se proporcionan los pasos para migrar de las notificaciones de cambio de objeto a las de Pub/Sub.

Descripción general de las notificaciones de cambios en objetos

Las notificaciones de cambios en objetos son un mecanismo antiguo de Cloud Storage para notificar a una aplicación los cambios realizados en los objetos de un segmento. Cuando se configura una notificación de cambio de objeto, Cloud Storage envía solicitudes HTTP POST (webhooks) a una URL de aplicación especificada cada vez que se añade, actualiza o elimina un objeto. Las notificaciones de cambio de objeto se establecen enviando una solicitud watchAll a Cloud Storage mediante la API JSON, las bibliotecas cliente o el comando watchbucket de notificación de gsutil. No hay ningún mecanismo pull y debes tener un nombre de dominio de acceso público respaldado por un servidor HTTP para recibir los mensajes de webhook. Recomendamos usar las notificaciones de Pub/Sub en Cloud Storage para las nuevas implementaciones debido a su fiabilidad, escalabilidad y flexibilidad.

Para obtener información más detallada, consulta Notificación de cambios en objetos.

Descripción general de las notificaciones de Pub/Sub

Las notificaciones de Pub/Sub para Cloud Storage ofrecen una forma moderna, escalable y fiable de activar acciones en respuesta a los cambios en tus segmentos de Cloud Storage. Para ello, envían información de eventos a un tema de Pub/Sub. Pub/Sub ofrece la entrega de mensajes basada en inserción como solicitudes HTTP POST a webhooks. Cuando se crean, actualizan o eliminan objetos, Cloud Storage publica mensajes que contienen metadatos de objetos en un tema de Pub/Sub especificado, que pueden consumir varios suscriptores, como funciones de Cloud Run, flujos de datos o microservicios. Esto permite crear arquitecturas flexibles basadas en eventos con funciones de entrega al menos una vez y de gestión de errores sólidas.

Para obtener información más detallada, consulta Notificaciones de Pub/Sub para Cloud Storage.

Comparar las notificaciones de cambios en objetos con las notificaciones de Pub/Sub

En la siguiente tabla se comparan las notificaciones de cambios en objetos con las funciones de las notificaciones de Pub/Sub:

Función Notificaciones de cambios en objetos Notificaciones de Pub/Sub
Purpose Notifica a una aplicación directamente a través de solicitudes HTTP POST (webhooks) cuando cambian los objetos de un contenedor. Envía información sobre los cambios realizados en los objetos de los segmentos de Cloud Storage a un tema de Pub/Sub.
Mecanismo de entrega Envía una solicitud HTTP POST directa (webhook) a una URL de aplicación especificada. Los mensajes publicados en un tema de Pub/Sub pueden consumirlos varios suscriptores, como funciones de Cloud Run, otras aplicaciones y flujos de datos.
Fiabilidad Intenta realizar la entrega de forma fiable, pero no se garantiza que se haga a tiempo. Las notificaciones pueden retrasarse indefinidamente. Ofrece la entrega al menos una vez, lo que significa que los mensajes se pueden entregar varias veces, pero no se pierden. Pub/Sub gestiona la persistencia y los reintentos de los mensajes.
Escalabilidad Menos escalable, ya que se basa en webhooks directos que tu aplicación debe gestionar. Altamente escalable y diseñada para el procesamiento de eventos a gran escala.
Flexibilidad Limitado a la integración directa de webhooks. Muy flexible. Los mensajes de Pub/Sub pueden activar funciones de Cloud Run, introducirse en flujos de datos (Dataflow) y ser consumidos por otros microservicios.
Filtrar Ninguno Opciones de filtrado sólidas disponibles a nivel de suscripción de Pub/Sub, que permiten a los suscriptores recibir solo los mensajes que cumplan criterios específicos.
Seguridad Requiere que el endpoint de tu aplicación sea de acceso público (HTTPS). Pub/Sub ofrece gestión de identidades y accesos para controlar el acceso pormenorizado a temas y suscripciones. Pub/Sub ayuda a enviar mensajes de forma segura, tanto si extraes las notificaciones directamente como si las insertas en un endpoint público.
Complejidad Puede ser más sencillo de configurar para casos prácticos básicos, pero gestionar la entrega fiable y el escalado puede volverse complejo. Requiere conocer los conceptos de Pub/Sub (temas y suscripciones), pero ofrece una solución más sólida y fácil de gestionar para las arquitecturas basadas en eventos.
Estado de la discontinuación Obsoleto. Recomendamos usar notificaciones de Pub/Sub para las nuevas implementaciones. Activo. Este es el método principal y en desarrollo activo para las notificaciones de Cloud Storage.
Uso recomendado No se recomienda para proyectos nuevos. Principalmente para integraciones antiguas menos complejas que no puedes migrar. Se recomienda encarecidamente para crear arquitecturas sólidas, escalables y basadas en eventos que reaccionen a los cambios de Cloud Storage.

¿Por qué migrar a las notificaciones de Pub/Sub?

Migrar de las notificaciones de cambio de objeto antiguas a las notificaciones de Pub/Sub para Cloud Storage es un paso importante para gestionar eventos de forma eficaz. Pub/Sub se recomienda para arquitecturas basadas en eventos dentro de Google Cloud, ya que ofrece ventajas técnicas y operativas significativas con respecto a las notificaciones de cambios de objetos.

Estas son las ventajas de migrar a las notificaciones de Pub/Sub:

  • Entrega fiable: Pub/Sub entrega cada mensaje publicado al menos una vez por cada suscripción, lo que valida que los eventos llegan a los consumidores. La entrega fiable minimiza la pérdida de datos y mejora la fiabilidad de tus flujos de trabajo en comparación con el modelo de entrega menos robusto de las notificaciones de cambio de objeto.
  • Escalabilidad: diseñado para un alto rendimiento, las notificaciones de Pub/Sub pueden gestionar grandes volúmenes de eventos automáticamente. Con las notificaciones de Pub/Sub, puede eliminar los cuellos de botella de rendimiento que pueden producirse con las notificaciones de cambio de objeto a medida que aumentan la frecuencia de los datos o de los eventos.
  • Integración con Google Cloud servicios: Pub/Sub se integra a la perfección con varios Google Cloud servicios, lo que ofrece flexibilidad para crear flujos de trabajo automatizados con Cloud Run functions, Cloud Run y Dataflow, así como una mayor observabilidad a través de Cloud Logging y Cloud Monitoring.
  • Control granular: con Pub/Sub puedes filtrar mensajes a nivel de suscripción. De esta forma, los consumidores solo reciben eventos relevantes, lo que reduce el procesamiento innecesario y el tráfico de red.
  • Compatibilidad con plataformas: las notificaciones de Pub/Sub son el servicio de mensajería compatible. La migración te ayuda a usar una tecnología que recibe mejoras continuas, actualizaciones de seguridad y documentación completa, a diferencia de las notificaciones de cambios de objetos, que están obsoletas.

Pasos de la migración

Tanto las notificaciones de cambios en objetos como las notificaciones de Pub/Sub de Cloud Storage pueden enviar mensajes duplicados de vez en cuando. Por lo tanto, el código que uses debe estar diseñado para gestionar de forma segura los mensajes duplicados.

Para migrar de las notificaciones de cambios de objetos a las notificaciones de Pub/Sub, sigue estos pasos:

  1. Empieza a usar las notificaciones de Pub/Sub en Cloud Storage además de las notificaciones de cambio de objeto que ya tengas configuradas. Para obtener información sobre cómo configurar las notificaciones de Pub/Sub, consulta Configurar notificaciones de Pub/Sub para Cloud Storage.

  2. Prueba y verifica que el flujo de trabajo de procesamiento de notificaciones de Pub/Sub de tu aplicación funciona correctamente. Para obtener información sobre cómo monitorizar una suscripción a Pub/Sub, consulta Monitorizar suscripciones en Pub/Sub.

  3. Detiene el procesamiento de los mensajes recibidos de un canal de notificaciones de cambios en objetos. Para detener un canal de notificaciones, haz una solicitud de detención.

Consideraciones sobre la suscripción push de Pub/Sub

Aunque las suscripciones de extracción de Pub/Sub ofrecen mayor flexibilidad y control, las suscripciones de inserción de Pub/Sub se parecen mucho a los mensajes de notificación de cambios de objetos. Por lo tanto, las suscripciones push se convierten en una vía de migración más rápida para los usuarios actuales de notificaciones de cambios en objetos. Para ver una comparación detallada de las suscripciones push y pull, consulta Elegir un tipo de suscripción.

Si tienes previsto usar la suscripción push y reutilizar el código de gestión de notificaciones, tendrás que tener en cuenta las diferencias entre los formatos de solicitud push y los códigos de respuesta de las notificaciones de cambio de objeto y las notificaciones push de Pub/Sub. Las diferencias se describen en las secciones siguientes.

Formato de solicitud push

En esta sección se describen las diferencias de formato de las solicitudes push entre las notificaciones de cambio de objeto y las notificaciones de Pub/Sub.

  • Notificaciones de cambio de objetos: las notificaciones de cambio de objetos se envían como solicitudes HTTP POST a la URL de tu aplicación con el siguiente formato:

    POST /ApplicationUrlPath
    Accept: * / *
    Content-Length: 1097
    Content-Type: application/json; charset="utf-8"
    Host: ApplicationUrlHost
    X-Goog-Channel-Id: ChannelId
    X-Goog-Channel-Token: ClientToken
    X-Goog-Resource-Id: ResourceId
    X-Goog-Resource-State: ResourceState
    X-Goog-Resource-Uri: https://storage.googleapis.com/storage/v1/b/BucketName/o?alt=json
    
    {
    "kind": "storage#object",
    "id": "BucketName/ObjectName",
    "selfLink": "https://www.googleapis.com/storage/v1/b/BucketName/o/ObjectName",
    "name": "ObjectName",
    "bucket": "BucketName",
    "generation": "1367014943964000",
    "metageneration": "1",
    "contentType": "application/octet-stream",
    "updated": "2013-04-26T22:22:23.832Z",
    "size": "10",
    "md5Hash": "xHZY0QLVuYng2gnOQD90Yw==",
    "mediaLink": "https://content-storage.googleapis.com/storage/v1/b/BucketName/o/ObjectName?generation=1367014943964000&alt=media",
    "owner": {
      "entity": "user-jeffersonloveshiking@gmail.com"
    },
    "crc32c": "C7+82w==",
    "etag": "COD2jMGv6bYCEAE="
    }
    
  • Notificaciones de Pub/Sub: cuando se configura para la entrega de inserción, una notificación de Pub/Sub se envía como una solicitud HTTP POST. El campo data contiene la carga útil del evento de Cloud Storage codificada en base64. Cuando se decodifica el campo de datos, coincide con el cuerpo del mensaje de notificaciones de cambios en objetos.

    POST /YourSpecifiedURL
    Accept: * / *
    Content-Length: 1097
    Content-Type: application/json; charset="utf-8"
    Host: ApplicationUrlHost
    {
      "deliveryAttempt": 5,
      "message":
        {"attributes":
          {"notificationConfig":"projects/_/buckets/foo/notificationConfigs/3",
            "eventType": "OBJECT_FINALIZE",
            "payloadFormat": "JSON_API_V1",
            "bucketId": "foo",
            "objectId": "bar",
            "objectGeneration": 123456,
            "eventTime": "2021-01-15T01:30:15.01Z"
          },
        "data": "ewogImtpbm",
        "messageId": "2070443601311540",
        "message_id": "2070443601311540",
        "orderingKey": "key",
        "publishTime": "2021-02-26T19:13:55.749Z",
        "publish_time": "2021-02-26T19:13:55.749Z"
        },
      "subscription": "projects/myproject/subscriptions/mysubscription"
    }
    

Código de respuesta

En la siguiente tabla se describen las diferencias en la interpretación del código de respuesta entre las notificaciones de cambio de objeto y las notificaciones de Pub/Sub:

Función Código de respuesta Interpretación Acción
Notificaciones de cambios en objetos
102, 200, 201, 202 y 204 Correcto Mensaje procesado
500, 502, 503, 504 No se ha podido procesar Vuelve a intentarlo más tarde
Tiempos de espera, conexiones fallidas o falta de respuesta No se ha podido procesar Vuelve a intentarlo más tarde
Cualquier otro código HTTP. Por ejemplo, 404 Error permanente No volver a intentar enviar el mensaje
Notificaciones de Pub/Sub
102, 200, 201, 202 y 204 Correcto Mensaje confirmado
Todos los demás códigos de respuesta, tiempos de espera y errores de conexión Error Vuelve a intentarlo más tarde

Siguientes pasos