Migra de las notificaciones de cambio de objeto a las notificaciones de Pub/Sub

Esta guía es para los usuarios de la función Notificaciones de cambios en los objetos de Cloud Storage, que está obsoleta. Las notificaciones de Pub/Sub para Cloud Storage son la herramienta recomendada para generar notificaciones que realicen un seguimiento de los cambios en los objetos de tus buckets 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 para Cloud Storage, y se proporcionan pasos para migrar de las notificaciones de cambio de objeto a las notificaciones de Pub/Sub.

Descripción general de las notificaciones de cambio de objeto

Las notificaciones de cambio de objeto son un mecanismo heredado en Cloud Storage para notificar a una aplicación sobre los cambios en los objetos dentro de un bucket. Cuando se configura una notificación de cambio de objeto, Cloud Storage envía solicitudes POST HTTP (webhooks) a una URL de aplicación especificada cada vez que se agrega, actualiza o borra un objeto. Las notificaciones de cambio de objeto se establecen enviando una solicitud watchAll a Cloud Storage con la API de JSON, las bibliotecas cliente o el comando watchbucket de notificación de gsutil. No hay ningún mecanismo de 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 para Cloud Storage en las implementaciones nuevas debido a su confiabilidad, escalabilidad y flexibilidad.

Para obtener información más detallada, consulta Notificación de cambio de objeto.

Descripción general de las notificaciones de Pub/Sub

Las notificaciones de Pub/Sub para Cloud Storage proporcionan una forma moderna, escalable y confiable de activar acciones en respuesta a los cambios en tus buckets de Cloud Storage. Para ello, envían información de eventos a un tema de Pub/Sub. Pub/Sub ofrece entrega de mensajes basada en envíos como solicitudes POST HTTP a webhooks. Cuando se crean, actualizan o borran objetos, Cloud Storage publica mensajes que contienen metadatos de objetos en un tema de Pub/Sub especificado, que luego pueden consumir varios suscriptores, como funciones de Cloud Run, canalizaciones de datos o microservicios, lo que permite arquitecturas flexibles y controladas por eventos con entrega al menos una vez y funciones sólidas de manejo de errores.

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

Comparación entre las notificaciones de cambios de objetos y las notificaciones de Pub/Sub

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

Función Notificaciones de cambio de objeto 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 bucket. Envía información sobre los cambios en los objetos de los buckets de Cloud Storage a un tema de Pub/Sub.
Mecanismo de entrega Envía una solicitud POST de HTTP directa (webhook) a una URL de aplicación especificada. Luego, los mensajes publicados en un tema de Pub/Sub pueden ser consumidos por varios suscriptores, como funciones de Cloud Run, otras aplicaciones y canalizaciones de datos.
Confiabilidad Intenta realizar la entrega de forma confiable, pero no se garantiza la puntualidad. Las notificaciones pueden retrasarse de forma indefinida. Ofrece entrega al menos una vez, lo que significa que los mensajes se pueden entregar varias veces, pero no se pierden. Pub/Sub controla la persistencia y los reintentos de los mensajes.
Escalabilidad Es menos escalable, ya que depende de webhooks directos que tu aplicación debe controlar. Es altamente escalable y está diseñado para el procesamiento de eventos a gran escala.
Flexibilidad Se limita a la integración directa de webhook. Es muy flexible. Los mensajes de Pub/Sub pueden activar Cloud Run Functions, alimentar canalizaciones de datos (Dataflow) y ser consumidos por otros microservicios.
Filtros Ninguno Opciones de filtrado sólidas disponibles a nivel de la suscripción de Pub/Sub, lo que permite que los suscriptores solo reciban mensajes que cumplan con criterios específicos
Seguridad Requiere que el extremo de tu aplicación sea de acceso público (HTTPS). Pub/Sub ofrece IAM para un control de acceso detallado a temas y suscripciones. Pub/Sub ayuda con la entrega segura de mensajes, ya sea que extraigas notificaciones directamente o que se envíen a un extremo público.
Complejidad Puede ser más fácil de configurar para casos de uso básicos, pero administrar la entrega confiable y el escalamiento puede volverse complejo. Requiere comprender los conceptos de Pub/Sub (temas, suscripciones), pero ofrece una solución más sólida y administrable para las arquitecturas basadas en eventos.
Estado de baja Obsoleto. Recomendamos usar notificaciones de Pub/Sub para las implementaciones nuevas. En actividad. 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 heredadas menos complejas que no puedes migrar. Se recomienda mucho 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 heredadas a Pub/Sub para las notificaciones de Cloud Storage es un paso importante para la administración sólida de eventos. Se recomienda Pub/Sub para las arquitecturas basadas en eventos dentro de Google Cloud, ya que ofrece ventajas operativas y técnicas significativas en comparación con las notificaciones de cambio de objeto.

A continuación, se indican las ventajas de migrar a las notificaciones de Pub/Sub:

  • Entrega confiable: Pub/Sub entrega cada mensaje publicado al menos una vez por cada suscripción, lo que valida que los eventos lleguen a tus consumidores. La entrega confiable minimiza la pérdida de datos y mejora la confiabilidad de tus flujos de trabajo en comparación con el modelo de entrega menos sólido de las notificaciones de cambio de objeto.
  • Escalabilidad: Las notificaciones de Pub/Sub, diseñadas para un alto rendimiento, pueden controlar grandes volúmenes de eventos de forma automática. Con las notificaciones de Pub/Sub, puedes eliminar los cuellos de botella de rendimiento que podrías encontrar con las notificaciones de cambio de objeto a medida que aumentan tus datos o la frecuencia de eventos.
  • Integración con servicios de Google Cloud : Pub/Sub se integra sin problemas con varios servicios de Google Cloud , lo que proporciona flexibilidad para compilar flujos de trabajo automatizados con Cloud Run Functions, Cloud Run, Dataflow y observabilidad mejorada a través de Cloud Logging y Cloud Monitoring.
  • Control detallado: Con Pub/Sub, puedes filtrar mensajes a nivel de la suscripción. Esto permite que los consumidores reciban solo los eventos pertinentes, lo que reduce el procesamiento innecesario y el tráfico de red.
  • Compatibilidad con la plataforma: 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 integral, a diferencia de las notificaciones de cambio de objeto que están obsoletas.

Pasos para la migración

En ocasiones, tanto las notificaciones de cambios en los objetos como las notificaciones de Pub/Sub para Cloud Storage pueden enviar mensajes duplicados. Por lo tanto, tu código de consumo debe diseñarse para controlar de forma segura los mensajes duplicados.

Para migrar de las notificaciones de cambio de objeto a las notificaciones de Pub/Sub, sigue estos pasos:

  1. Comienza a usar las notificaciones de Pub/Sub para Cloud Storage además de la configuración existente de las notificaciones de cambios en objetos. Para obtener información sobre cómo configurar las notificaciones de Pub/Sub, consulta Configura las 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 funcione correctamente. Para obtener información sobre cómo supervisar las suscripciones a Pub/Sub, consulta Supervisa las suscripciones en Pub/Sub.

  3. Detiene el procesamiento de los mensajes recibidos de un canal de notificaciones de cambio de objeto. Para detener un canal de notificaciones, realiza una solicitud de detención.

Consideraciones para la suscripción de envío de Pub/Sub

Si bien las suscripciones de extracción de Pub/Sub ofrecen mayor flexibilidad y control, las suscripciones de envío de Pub/Sub se parecen mucho a los mensajes de notificación de cambio de objeto. Como resultado, las suscripciones push se convierten en una ruta de migración más rápida para los usuarios existentes de las notificaciones de cambio de objeto. Para obtener una comparación detallada de las suscripciones de envío y de extracción, consulta Elige un tipo de suscripción.

Si planeas usar suscripciones push y reutilizar el código existente de control de notificaciones, deberás tener en cuenta las diferencias entre los formatos de solicitud push de las notificaciones de cambio de objeto y las notificaciones de Pub/Sub, así como las interpretaciones de los códigos de respuesta. Las diferencias se describen en las siguientes secciones.

Formato de solicitud de envío

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

  • Notificaciones de cambio de objeto: Las notificaciones de cambio de objeto se entregan 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: Una notificación de Pub/Sub, cuando se configura para la entrega push, se entrega 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 las notificaciones de cambio de objeto.

    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 de los códigos 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 de objetos
102, 200, 201, 202, 204 Listo Se procesó el mensaje
500, 502, 503, 504 No se pudo procesar Vuelve a intentarlo más tarde
Tiempos de espera agotados, conexiones fallidas y falta de respuesta No se pudo procesar Vuelve a intentarlo más tarde
Cualquier otro código HTTP Por ejemplo, 404 Falla permanente No volver a enviar el mensaje
Notificaciones de Pub/Sub
102, 200, 201, 202, 204 Listo Se confirmó la recepción del mensaje
Todos los demás códigos de respuesta, tiempos de espera agotados y errores de conexión Con errores Vuelve a intentarlo más tarde

¿Qué sigue?