Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-04-27 GMT+08:00

Notificación de evento

Notificación de eventos habilitados para SMN

Simple Message Notification (SMN) es un servicio de notificación de mensajes fiable y ampliable que puede manejar una gran cantidad de mensajes. SMN simplifica significativamente el acoplamiento del sistema. Puede enviar mensajes automáticamente a los suscriptores a través de correos electrónicos y mensajes de texto.

OBS utiliza SMN para proporcionar la función de notificación de eventos. Puede usar SMN para enviar notificaciones de eventos a los suscriptores especificados para informarles en tiempo real de las operaciones críticas (como la carga y la eliminación) que se producen en los bucket especificados. Por ejemplo, puede configurar una regla de notificación de evento para enviar mensajes a través de SMN a la dirección de correo electrónico especificada siempre que se produzca una operación de carga en el bucket especificado.

Puede configurar una regla de notificación de evento para filtrar objetos por el prefijo o sufijo de nombre de objeto. Por ejemplo, puede agregar una regla de notificación de evento para enviar notificaciones cada vez que se suba un objeto con el sufijo.jpg al bucket especificado. También puede agregar una regla de notificación de evento para enviar notificaciones cada vez que se carga un objeto con el prefijo images/ en el bucket especificado.

Figura 1 Notificación de eventos habilitados para SMN

Tipos de eventos soportados por OBS

OBS puede publicar eventos de los siguientes tipos. Debe especificar estos tipos de eventos en la configuración de notificación.

Tabla 1 Tipos de eventos compatibles con OBS

Tipo de evento

Descripción

ObjectCreated:* (todas las operaciones de carga)

ObjectCreated:Put (subida de objetos)

ObjectCreated:Post (subir objetos a través de un navegador web)

ObjectCreated:Copy (copiar objetos)

ObjectCreated:CompleteMultipartUpload (combinar partes cargadas)

OBS puede usar API como PUT, POST y COPY para crear objetos y configurar los tipos de eventos correspondientes. Recibirá una notificación cuando se cree un objeto usando una API específica. Además, puede utilizar el tipo de evento ObjectCreated:* para solicitar todas las notificaciones de creación de objetos.

NOTA:

No recibirá notificaciones de eventos de operaciones fallidas.

ObjectRemoved:* (todas las operaciones de eliminación)

ObjectRemoved:Delete (eliminar objetos)

ObjectRemoved:DeleteMarkerCreated (Se crea un objeto deletemarker)

Mediante el uso de los tipos de eventos ObjectRemoved puede habilitar la notificación cuando se elimina un objeto o un lote de objetos de un bucket.

Puede solicitar una notificación cuando se elimina un objeto o se elimina permanentemente un objeto versionado mediante el tipo de evento ObjectRemoved:Delete. Como alternativa, puede solicitar una notificación cuando se crea un marcador de eliminación para un objeto versionado mediante ObjectRemoved:DeleteMarkerCreated. También puede utilizar ObjectRemoved:* para solicitar una notificación cada vez que se elimina un objeto.

NOTA:

No recibirá notificaciones de eventos de eliminaciones automáticas de políticas de ciclo de vida o de operaciones fallidas.

Restricciones

  • Una configuración sin atributos de filtrado contenidos coincide con todos los prefijos y sufijos de forma predeterminada.
  • Cuando hay dos sufijos configurados, si una cadena dada puede terminar con ambos sufijos, esta configuración no es válida debido a la superposición de sufijos (por ejemplo, los sufijos jpg y pg). Esto también funciona para prefijos.

Destinos apoyados por OBS

OBS puede enviar mensajes de notificación de eventos a temas SMN. Debe conceder a OBS los permisos para enviar mensajes a estos destinos. Además, debe especificar los valores URN de estos destinos en la configuración de notificación.

Cómo habilitar notificaciones de eventos

La habilitación de notificaciones es una operación a nivel de bucket. OBS almacena la configuración de notificación de eventos en subrecursos de bucket en el formato XML. De forma predeterminada, la notificación no está habilitada para ningún tipo de evento. Es decir, la configuración de notificación de evento inicial de cada bucket está vacía.

Para habilitar las notificaciones de eventos de tipos específicos, debe agregar la configuración XML correspondiente que identifique los tipos de eventos que desea que OBS publique y el destino donde desea que se publiquen las notificaciones.

  • En este ejemplo, debe publicar mensajes de evento en un tema SMN. Para establecer un tema de SMN como destino de notificación para tipos de eventos específicos, agregue el TopicConfiguration.
<NotificationConfiguration>
  <TopicConfiguration>
    <Id>optional-id-string</Id>
    <Topic>topic-urn</Topic>
    <Event>event-type</Event>
    <Event>event-type</Event>
     ...
  </TopicConfiguration>
   ...
</NotificationConfiguration>

Para eliminar todas las configuraciones de notificación de un bucket, establezca el elemento <NotificationConfiguration> en null.

Uso de nombres de clave de objeto para filtrar notificaciones de eventos

Puede establecer la notificación de evento mediante el prefijo y el sufijo de un nombre de clave de objeto. Por ejemplo, puede configurar una configuración para que una notificación se publique solo cuando se agreguen objetos con extensión de .jpg a un bucket.

OBS almacena la configuración de notificación como XML. Puede utilizar el elemento Filter de la estructura XML para definir las reglas para las notificaciones que se van a filtrar por el prefijo y/o sufijo de un nombre de clave de objeto. Las configuraciones de notificación que utilizan el filtro no pueden definir reglas de filtrado con prefijos superpuestos, sufijos superpuestos o prefijos y sufijos superpuestos. Los siguientes son ejemplos de configuraciones de notificación con filtrado de nombres de clave de objeto:

  • Ejemplo de configuración de notificación válida con filtrado de nombre de clave de objeto

    La siguiente información contiene una configuración que identifica un tema SMN en el que OBS publica eventos del tipo ObjectCreated:Put. Los eventos se publicarán cada vez que un objeto que tiene un prefijo de imagen y un sufijo jpg se PUT a un bucket.

    <NotificationConfiguration>
      <TopicConfiguration>
        <Id>01</Id>
        <Filter>
          <Object>
            <FilterRule>
              <Name>prefix</Name>
              <Value>image</Value>
            </FilterRule>
            <FilterRule>
              <Name>suffix</Name>
              <Value>jpg</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:notification</Topic>
        <Event>ObjectCreated:Put</Event>
      </TopicConfiguration>
    </NotificationConfiguration>

    La siguiente configuración de notificación tiene varios prefijos que no se superponen. La configuración define lo siguiente: Cuando los objetos que tienen un prefijo de images se cargan en los bucket, las notificaciones de eventos se publicarán en el tema-A; cuando los objetos que tienen un prefijo de videos se cargan en los bucket, las notificaciones de eventos se publicarán en el tema-B.

    <NotificationConfiguration>
      <TopicConfiguration>
        <Id>01</Id>
        <Filter>
          <Object>
            <FilterRule>
              <Name>prefix</Name>
              <Value>images</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic>
        <Event>ObjectCreated:Put</Event>
      </TopicConfiguration>
      <TopicConfiguration>
        <Id>02</Id>
        <Filter>
          <Object>
            <FilterRule>
              <Name>prefix</Name>
              <Value>videos</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic>
        <Event>ObjectCreated:Put</Event>
      </TopicConfiguration>
    </NotificationConfiguration>

    La siguiente configuración de notificación tiene varios sufijos que no se superponen. La configuración define lo siguiente: Las notificaciones se publicarán en el tema-A para todos los objetos.jpg subidos (PUT) en los bucket, y las notificaciones se publicarán en el tema-B para todos los objetos.png. Los sufijos.png y.jpg no se superponen aunque tengan la misma última letra.

    <NotificationConfiguration>
      <TopicConfiguration>
        <Id>01</Id>
        <Filter>
          <Object>
            <FilterRule>
              <Name>suffix</Name>
              <Value>.jpg</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic>
        <Event>ObjectCreated:Put</Event>
      </TopicConfiguration>
      <TopicConfiguration>
        <Id>02</Id>
        <Filter>
          <Object>
            <FilterRule>
              <Name>suffix</Name>
              <Value>.png</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic>
        <Event>ObjectCreated:Put</Event>
      </TopicConfiguration>
    </NotificationConfiguration>
  • Ejemplos de configuración de notificación con prefijo/sufijo no válidos superpuestos

    En la mayoría de los casos, las configuraciones de notificación que utilizan el filtro no pueden definir reglas de filtrado con prefijos superpuestos, sufijos superpuestos o combinaciones superpuestas de prefijos y sufijos para los mismos tipos de eventos. (Puede tener prefijos superpuestos si los sufijos no se superponen.) Puede utilizar reglas de filtrado de nombres de clave de objeto superpuestas con diferentes tipos de eventos. Por ejemplo, puede crear una configuración de notificación que utilice el prefijo image para el tipo de evento ObjectCreated:Put y el prefijo image para el tipo de evento ObjectDeleted:*.

    Una configuración sin atributos de filtrado contenidos coincide con todos los prefijos y sufijos de forma predeterminada. La siguiente configuración de notificación no es válida porque contiene prefijos superpuestos. (Lo mismo sería cierto si se usa sufijo en lugar de prefijo en este ejemplo.)

    <NotificationConfiguration>
      <TopicConfiguration>
        <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic>
        <Event>ObjectCreated:*</Event>
      </TopicConfiguration>
      <TopicConfiguration>
        <Filter>
          <Object>
            <FilterRule>
              <Name>prefix</Name>
              <Value>abc</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic>
        <Event>ObjectCreated:*</Event>
      </TopicConfiguration>
    </NotificationConfiguration>

    La siguiente configuración de notificación no es válida porque contiene sufijos superpuestos. Dos sufijos se consideran superpuestos si una cadena dada puede terminar con ambos sufijos. Una cadena puede terminar con jpg y pg. Por lo tanto, los sufijos se superponen. (Lo mismo es cierto para los prefijos.)

    <NotificationConfiguration>
      <TopicConfiguration>
        <Filter>
          <Object>
            <FilterRule>
              <Name>suffix</Name>
              <Value>jpg</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-A</Topic>
        <Event>ObjectCreated:*</Event>
      </TopicConfiguration>
      <TopicConfiguration>
        <Filter>
          <Object>
            <FilterRule>
              <Name>suffix</Name>
              <Value>pg</Value>
            </FilterRule>
          </Object>
        </Filter>
        <Topic>urn:smn:southchina:11aa22bb:topic-B</Topic>
        <Event>ObjectCreated:Put</Event>
      </TopicConfiguration>
    </NotificationConfiguration>

Estructura de mensaje de evento

Un mensaje de notificación enviado por OBS para publicar un evento es un mensaje JSON con la siguiente estructura.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{  
    "Records":[
        {
            "eventVersion":"", //Version number. The current version is 3.0.
            "eventSource":"", //Message source. The value is fixed to OBS.
            "eventRegion":"", //Region where the event occurs
            "eventTime":"", //Time when an event occurs, in the ISO-8601 format, for example, 2020-07-10T09:24:11.418Z
            "eventName":"", //Name of the event that triggers the notification
            "userIdentity":{
                "ID":"" //Billing ID of the user who triggers the event
            },
            "requestParameters":{
                "sourceIPAddress":"" //Source IP address of the request
            },
            "responseElements":{
                "x-obs-request-id":"", //ID of the request
                "x-obs-id-2":"" ///Special characters for locating problems
            },
            "obs":{
                "Version":"1.0",
                "configurationId":"", //Name of the event notification rule in OBS that matches the event
                "bucket":{
                    "name":"examplebucket",
                    "ownerIdentity":{
                        "ID":"" //Account ID of the bucket owner
                    },
                    "bucket":"" //Bucket name
                },
               "object":{
                    "key":"", //Object name
                    "eTag":"", //ETag of the object
                    "size": , //Object size
                    "versionId":"null", //Version ID of the object
                    "sequencer":""  //Identifier that defines the event sequence of a specific object
                }
            }
        }
    ]
}

Tenga en cuenta lo siguiente:

  • Puede utilizar el valor clave de responseElements para rastrear las solicitudes OBS. Tanto x-obs-request-id como x-obs-id-2 pueden usarse para rastrear una sola solicitud. Su valor es el devuelto por OBS en la respuesta a la solicitud.
  • El valor clave obs contiene información sobre el bucket y el objeto involucrados en el evento. Tenga en cuenta que el nombre de la clave de objeto está codificado por URL. Por ejemplo, TEST/Chinese.jpg se cambia a TEST%2F%E4%B8%AD+%E6%96%87%2F.jpg.

    Durante el desarrollo secundario, si utiliza el SDK de OBS para descargar el objeto, debe decodificar el nombre del objeto codificado por URL y luego llamar a la API para su descarga. Si se utiliza un navegador web para acceder al objeto, no se requiere decodificación.

  • El valor clave sequencer determina la secuencia de eventos. En general, las notificaciones de eventos no llegan en el orden en que se produjeron los eventos. Sin embargo, las notificaciones de eventos para crear objetos (PUT) y eliminar objetos (DELETE) contienen un secuenciador, que puede usarse para determinar el orden de eventos para una clave de objeto dada. Si compara las cadenas de secuenciador hexadecimal de dos notificaciones de evento en la misma clave de objeto, la notificación de evento con el mayor valor de secuenciador es el evento que ocurrió más tarde.
    1. El secuenciador no se puede utilizar para determinar la secuencia de eventos en diferentes claves de objeto.
    2. La secuencia de eventos indicada por el secuenciador es solo para referencia, lo que no funciona para sistemas altamente fiables

Ejemplo de mensaje:

  • Cuando configura una notificación de evento en un bucket, OBS envía el siguiente mensaje de prueba:
    {  
       "Service":"OBS",
       "Event":"TestEvent",
       "Time":"1970-01-01T00:00:00.000Z",
       "Bucket":"examplebucketname",
       "RequestId":"0002F4BCF6000001563B064B17B2094D",
       "HostId":"2Zf+b9AmbaBgNQ+YE8XU2j87DZaBNxu4TaMiOCTqpmkC2SA9ouf8TpB2SY5j3i4"
    }
  • Mensaje de ejemplo cuando se crea un objeto mediante la solicitud de la subida (PUT) , A continuación se muestra un ejemplo de un mensaje enviado por OBS para publicar un evento ObjectCreated:Put:
    {  
        "Records":[
            {
                "eventVersion":"3.0",
                "eventSource":"OBS",
                "eventRegion":"region",
                "eventTime":"2018-06-26T14:37:05.468Z",
                "eventName":"ObjectCreated:Put",
                "userIdentity":{
                    "ID":"71f3901173514e6988115ea2c26d1999"
                },
                "requestParameters":{
                    "sourceIPAddress":"104.55.173.69"
                },
                "responseElements":{
                    "x-obs-request-id":"9006000001643C86D03C300BE8860FA7",
                    "x-obs-id-2":"2+/Ucr6uinCJAbUejWyQ+rhxkuf/K/9uoaXuewIi/SE9j4tU5LwaXTTlD1gvMv2o"
                },
                "obs":{
                    "Version":"1.0",
                    "configurationId":"ConfigurationId",
                    "bucket":{
                        "name":"examplebucket",
                        "ownerIdentity":{
                            "ID":"b4bf1b36d9ca43d984fbcb9491b6fce9"
                        },
                        "bucket":"examplebucket"
                    },
                    "object":{
                        "key":"object0001.txt",
                        "eTag":"3b9680702b9a12733c5490d1b15c7607",
                        "size":538,
                        "versionId":"null",
                        "sequencer":"000000001643C86D06576F5320000000"
                    }
                }
            }
        ]
    }

    Debido a los problemas de Internet o restricciones en el envío de correo electrónico, es posible que las notificaciones no se envíen a HTTP o terminales de correo electrónico.

¿Cómo usar esta función?

Puede configurar las notificaciones SMN mediante la consola OBS, las API o los SDK.

Herramienta

Referencia

SDK

OBS admite kits de desarrollo de software (SDK) en varios idiomas. Para obtener más información, consulte la guía para desarrolladores correspondiente en la página de Descripción general del SDK.

API

Configuración de Notificación de Evento para un Bucket