
# 使用DIS发送OBS事件通知
本节介绍如何在OBS[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)配置DIS通知。
您可以新建DIS通知规则，也可以从同区域的其他桶复制已有DIS通知规则。
#### 背景知识
OBS提供的DIS通知功能，主要面向大数据场景，要求OBS与数据接入服务（DIS）及其他大数据相关服务结合使用。
当OBS桶中触发了对象上传、下载、删除等操作事件时，OBS将事件通知发送给DIS，再通过DIS通道将通知分发给下游的大数据处理服务，如数据湖工厂（DLF）。大数据处理服务接到通知后，利用委托的OBS权限对OBS中更新的数据进行实时分析处理。您可以将通知配置为按对象名称的前缀或后缀进行筛选。
假设在某大数据场景下，用户要求每隔5分钟对OBS中上传的".mp4"后缀的视频文件进行一次归类。用户可以在OBS中创建一个DIS通知规则，规定在将带有".mp4"后缀的视频文件上传到OBS桶时发送通知。一旦规则触发，OBS会发送通知给DIS，经DIS通道分发给下游的DLF。在DLF中经过开发，可实现每5分钟汇总一次DIS通知，并将这些通知中涉及的视频文件统一移动到OBS某个文件夹下，再对其进行进一步的分析处理。
图1DIS通知示意图   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000001856038522.png "点击放大")
 #### 约束与限制
- 需要使用IAM的角色与策略授权功能，增加Tenant Administrator权限后才能设置、获取、删除DIS通知策略。使用DIS消息通知需要使用IAM的角色与策略授权功能，创建对OBS云服务的委托，委托赋予的权限需为数据接入服务DIS的DIS User权限。
- 一个桶中最多同时配置10条DIS通知规则。
- 对于时延敏感（秒级）的业务，消息通知无法保证时延。
- 新创建的DIS通知将在5分钟之内生效。
- 一个桶的多条DIS通知规则不允许重复，即任意对象在发生任意事件时都不能同时匹配两条以上的DIS通知规则，重复规则会创建失败。
  ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
  针对同一事件，如果配置了一条前后缀都为空的规则，则不允许再配置第二条规则。前后缀都为空表示对所有对象生效。
  例如：针对Put事件，已存在一条规则A，定义的前缀是"abcd"，后缀是".txt"。如果要创建另外一条针对Put事件的规则B，则规则B配置不同前后缀的结果如[表1]所示。
   表1规则B前后缀配置场景及结果 
  | 规则A前后缀配置                                                                                                           | 规则B前后缀配置                                                                                                             | 规则B创建结果 | 原因                           |
  |:---|:---|:---|:---|
  | 前缀：abcd 后缀：.txt | 前缀：abcd 后缀：.txt   | 失败      | 前后缀相同                        |
  | 前缀：abcd 后缀：.txt | 前缀：abcd 后缀：空      | 失败      | 前缀相同，后缀B为空（空后缀匹配所有后缀，包含A的后缀） |
  | 前缀：abcd 后缀：.txt | 前缀：ab 后缀：xt         | 失败      | 前缀B包含A，后缀B包含A                |
  | 前缀：abcd 后缀：.txt | 前缀：abef 后缀：.txt | 成功      | 前缀不同，后缀相同                    |
  | 前缀：abcd 后缀：.txt | 前缀：abcd 后缀：.mp4    | 成功      | 前缀相同，后缀不同                    |
     
  
 
#### 事件通知消息结构
OBS发布的事件通知消息是具有以下结构的JSON消息，各参数解释请参见[表2]。
```
{  
    "Records":[
        {
            "eventVersion":"",
            "eventSource":"",
            "eventRegion":"",
            "eventTime":"",
            "eventName":"",
            "userIdentity":{
                "ID":""
            },
            "requestParameters":{
                "sourceIPAddress":""
            },
            "responseElements":{
                "x-obs-request-id":"",
                "x-obs-id-2":""
            },
            "obs":{
                "Version":"1.0",
                "configurationId":"",
                "bucket":{
                    "name":"examplebucket",
                    "ownerIdentity":{
                        "ID":""
                    },
                    "bucket":""
                },
               "object":{
                    "key":"",
                    "eTag":"",
                    "size": ,
                    "versionId":"null",
                    "sequencer":""
                }
            }
        }
    ]
}
```
 表2JSON消息各参数解释 
| 参数名称                | 参数解释                                         |
|:---|:---|
| eventVersion        | 版本号，目前为"3.0"。                                |
| eventSource         | 消息源，固定为"OBS"。                                |
| eventRegion         | 事件所在的region。                                 |
| eventTime           | 事件时间，格式为ISO-8601，示例：2020-07-10T09:24:11.418Z |
| eventName           | 触发事件通知的事件名。                                  |
| "userIdentity"下的ID  | 触发事件的用户对应的计费ID。                              |
| sourceIPAddress     | 请求的源IP。                                      |
| x-obs-request-id    | 请求对应的requestid。                              |
| x-obs-id-2          | 帮助定位问题的特殊符号，值为Lifecycle时，表示生命周期删除。           |
| configurationId     | 此事件匹配的OBS中事件通知规则的名称。                         |
| "ownerIdentity"下的ID | 桶拥有者的账号ID。                                   |
| bucket              | 桶名。                                          |
| key                 | 对象名。                                         |
| eTag                | 对象的etag。                                     |
| size                | 对象的大小。                                       |
| versionId           | 对象的版本ID。                                     |
| sequencer           | 确定某个特定对象事件顺序的标识。                             |
   
请注意以下几点：
- 您可以通过"responseElements"键值来跟踪OBS的请求。其中，"x-obs-request-id"和"x-obs-id-2"均可用于跟踪单个请求，这两个参数的值即OBS响应请求时返回的值。
- "obs"键值包含了事件中涉及的桶和对象的相关信息。其中，对象键名称进行了URL编码，例如，"TEST/中 文.jpg"将变为"TEST%2F%E4%B8%AD+%E6%96%87%2F.jpg"。
  ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/notice_3.0-zh-cn.png)
  二次开发时，如果使用OBS SDK下载此对象 ，则需要先对对象名进行URL解码，再调用下载接口。而如果直接使用浏览器访问此对象，则不需要解码。
  
- "sequencer"键值可以确定事件顺序。通常情况下，事件通知并非按照事件发生的顺序进行提示，但是创建对象（PUT）和删除对象（DELETE）的事件通知包含sequencer，该键值可帮助确定特定对象的事件顺序。比较同一对象键上的两个事件通知的十六进制sequencer字符串时，sequencer值越大，事件发生越晚。
  ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/notice_3.0-zh-cn.png)
  1. sequencer不能用于确定不同对象键上的事件顺序。
  
  2. sequencer确定的事件顺序仅供参考，该方法不适用于高可靠性系统。
    
消息示例：
- 测试消息-当您在桶上配置事件通知时，OBS会发送以下测试消息
  ```
  {  
     "Service":"OBS",
     "Event":"TestEvent",
     "Time":"1970-01-01T00:00:00.000Z",
     "Bucket":"examplebucketname",
     "RequestId":"0002F4BCF6000001563B064B17B2094D",
     "HostId":"2Zf+b9AmbaBgNQ+YE8XU2j87DZaBNxu4TaMiOCTqpmkC2SA9ouf8TpB2SY5j3i4"
  }
  ```
  
- 使用PUT请求创建对象时的示例消息-以下消息是OBS发布的ObjectCreated:Put事件的消息示例
  ```
  {  
      "Records":[
          {
              "eventVersion":"3.0",
              "eventSource":"OBS",
              "eventRegion":"cn-east-3",
              "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"
                  }
              }
          }
      ]
  }
  ```
  ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
  由于潜在的Internet问题或电子邮件传送限制，有时通知可能无法成功送达HTTP或电子邮件终端节点。
  
 
#### 前提条件
- 已创建DIS通道。创建通道的方法请参见[《数据接入服务用户指南》](https://support.huaweicloud.com/usermanual-dis/dis_01_0601.html)。
- 已创建IAM委托，委托要求OBS在DIS通道所在项目拥有DIS User权限。创建委托的方法请参见[委托其他云服务管理资源](https://support.huaweicloud.com/usermanual-iam/iam_06_0004.html)。
 
#### 新建DIS通知规则
OBS支持通过[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)、API方式新建DIS通知规则，不支持通过SDK、OBS Browser+、obsutil方式新建DIS通知规则。
#### 使用OBS控制台
1. 在OBS[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)左侧导航栏选择"桶列表"。
2. 在桶列表中，单击待操作的桶，进入"对象"页面。
3. 在左侧导航栏单击"数据管理\>事件通知"，进入"DIS通知"界面。
4. 单击"创建"，系统弹出"创建DIS通知"对话框，如下所示。 
   图2创建DIS通知   
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000001948473001.png "点击放大")
   
   
5. 配置DIS通知参数，参数说明如[表3]所示。
   
    表3DIS通知参数说明 
   | 参数      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | DIS通知名称 | 新增DIS通知的名称，由用户自定义。 名称只允许由大写或小写的英文字母、数字、下划线和连字符组成，且长度不超过256个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 事件      | 事件类型。目前，OBS支持对以下事件类型发送DIS通知。 - **ObjectCreated：** 表示所有创建对象的操作，包含Put、Post、Copy对象以及合并段。 - **Put**：使用Put方法上传对象。  - **Post**：使用Post方法上传对象。  - **Copy**：使用copy方法复制对象。  - **CompleteMultipartUpload**：表示合并分段任务。    - **ObjectRemoved：** 表示所有删除对象的操作。 - **Delete**：指定对象版本号删除对象。  - **DeleteMarkerCreated**：不指定对象版本号删除对象。    - **ObjectChanged：** 表示修改对象的操作。 - **ObjectChanged:Acl：**表示所有修改对象ACL的操作。  - **ObjectChanged:Metadata：**表示所有修改对象元数据的操作。     多个事件类型可以作用于同一个目标对象，例如：同时选择"事件类型"复选框中的**Put** 、**Copy** 、**Delete** 等方法作用于某目标对象，则用户往该桶中上传、复制、删除符合前后缀规则的目标对象时，均会发送事件通知给用户。**ObjectCreated** 包含了**Put** 、**Post** 、**Copy** 和**CompleteMultipartUpload** ，如果选择了**ObjectCreated** ，则不能再选择**Put** 、**Post** 、**Copy** 或**CompleteMultipartUpload** 。同理如果选择了**ObjectRemoved** ，则不能再选择**Delete** 或**DeleteMarkerCreated**。 |
   | 前缀      | 指定事件作用的目标对象的前缀。 说明： - 当前缀和后缀都不配置时，DIS通知规则将作用于桶中所有对象。  - 前缀可以为空，最大长度不超过1024个字符，且同一条规则中前缀和后缀长度相加也不能超过1024个字符。  - 同一桶的多条DIS规则间，前后缀不能重复和包含，详情参见[约束与限制]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 后缀      | 指定事件作用的目标对象的后缀。 说明： - 当前缀和后缀都不配置时，DIS通知规则将作用于桶中所有对象。  - 后缀可以为空，最大长度不超过1024个字符，且同一条规则中前缀和后缀长度相加也不能超过1024个字符。  - 文件夹是以"/"结尾的，"/"前的字符为文件夹名称。对文件夹的相关操作配置DIS通知规则时，如果要匹配后缀，后缀必须以"/"结尾。  - 同一桶的多条DIS规则间，前后缀不能重复和包含，详情参见[约束与限制]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | DIS通道   | 项目：选择DIS通道所在的项目。 项目用于管理和分类所有的云资源，包括DIS通道。创建DIS通道时，会要求指定通道所在项目。项目不同，对应的DIS通道也不相同，请先选择项目再选择DIS通道。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | DIS通道   | 通道：选择事件通知需要发送到的DIS通道。DIS通道在DIS服务的控制台创建。 创建DIS通道的方法请参见[《数据接入服务用户指南》](https://support.huaweicloud.com/usermanual-dis/dis_01_0601.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | IAM委托   | 需要把DIS相关的权限委托给OBS，OBS才能向DIS发送通知。 此处需要选择一个云服务委托，委托要求OBS在DIS通道所在项目拥有DIS Administrator或者DIS User权限。 创建委托的方法请参见[委托其他云服务管理资源](https://support.huaweicloud.com/usermanual-iam/iam_06_0004.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   
   
6. 单击"确定"。
 
#### 使用API
[设置DIS通知策略](https://support.huaweicloud.com/api-obs/obs_04_0139.html)
#### 复制DIS通知规则
OBS支持通过[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)方式复制DIS通知规则，不支持通过API、SDK、OBS Browser+、obsutil方式复制DIS通知规则。
1. 在OBS[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)左侧导航栏选择"桶列表"。
2. 在桶列表中，单击待操作的桶，进入"对象"页面。
3. 在左侧导航栏单击"数据管理\>事件通知"，进入"DIS通知"界面。
4. 单击"复制"。
5. 选择复制源，即DIS通知规则所在的源桶。 
   ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
   - 从源桶复制DIS通知规则的操作为增量复制，不会删除当前桶已存在的DIS通知规则，与已存在的DIS通知规则冲突的规则不会复制。
   
   - 源桶和目标桶的桶版本号都必须是3.0。
   
   - 同源和目标桶必须在同一区域。
   
   - 您可以按需移除不需要复制的DIS通知规则。
    
   
   
6. 单击"确定"，将源桶的DIS通知规则复制到当前桶。
 
#### 相关操作
您可以单击待操作的DIS通知后面的"编辑"，修改DIS通知规则；单击"删除"，删除DIS通知。
如果您要批量删除DIS通知，选中待删除的DIS通知，单击列表上方的"删除"，完成批量删除。
