通过事件通知实时处理OSS文件变动

当您需要对OSS中的文件变动进行实时处理、同步、监听、业务触发、日志记录等操作时,您可以通过设置OSS的事件通知规则,自定义关注的文件,并及时收到相关通知。

前提条件

已开通轻量消息队列SMQ(原 MNS)。您可以通过SMQ产品页开通SMQ。

注意事项

  • 事件通知涉及OSS与SMQ的关联调用。对OSS执行的操作触发事件通知规则时,OSS触发SMQ发送消息通知。OSS触发SMQ的调用可能失败。您可以在响应Header中通过x-oss-event-status的值(Base64编码)判断是否成功触发消息通知。如果x-oss-event-status的值解码后为{"Result": "Ok"},表示成功触发SMQ。如果x-oss-event-status的值解码后不为{"Result": "Ok"},表示触发SMQ失败。

  • 使用事件通知功能会产生SMQ的费用。计费详情,请参见计费说明

  • 华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北 3(张家口)、华南1(深圳)、西南1(成都)、中国香港、美国(硅谷)、美国(弗吉尼亚)、日本(东京)、新加坡、印度尼西亚(雅加达)、菲律宾(马尼拉)、德国(法兰克福)、英国(伦敦)地域的存储空间支持配置事件通知。

    无地域属性的存储空间不支持配置事件通知。

  • 同一地域仅支持配置10条事件通知规则。

  • 通过RTMP推流方式生成的TS和M3U8文件不会触发事件通知规则。有关RTMP推流的介绍,请参见LiveChannel简介

使用说明

您在创建事件通知规则后,若请求者对您OSS进行的操作触发了事件通知规则,SMQ将请求者对OSS进行的相关操作发送到您配置的HTTP服务器或SMQ的队列中。具体流程如下图所示:

image

事件类型

重要

ObjectCreatedGroup、ObjectDownloadedGroup、ObjectRemovedGroup三种事件类型目前支持在中国香港、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)、新加坡、英国(伦敦)地域配置。

配置的事件类型

说明

关联消息通知返回的事件名称

PutObject

通过简单上传创建或覆盖文件。

ObjectCreated:PutObject

PostObject

通过表单上传创建或覆盖文件。

ObjectCreated:PostObject

CopyObject

通过拷贝文件创建或覆盖文件。

ObjectCreated:CopyObject

InitiateMultipartUpload

初始化一个分片上传任务。

ObjectCreated:InitiateMultipartUpload

UploadPart

通过上传分片创建或覆盖文件。

ObjectCreated:UploadPart

UploadPartCopy

通过分片拷贝创建或覆盖文件。

ObjectCreated:UploadPartCopy

CompleteMultipartUpload

完成分片上传。

ObjectCreated:CompleteMultipartUpload

AbortMultipartUpload

取消分片上传任务并删除对应的分片。

ObjectRemoved:AbortMultipartUpload

AppendObject

通过追加上传创建或追加文件。

ObjectCreated:AppendObject

GetObject

通过简单下载获取文件。

ObjectDownloaded:GetObject

DeleteObject

删除单个文件。

ObjectRemoved:DeleteObject

DeleteObjects

删除多个文件。

ObjectRemoved:DeleteObjects

ObjectReplication:ObjectCreated

数据复制过程涉及的写入操作。

ObjectReplication:ObjectCreated

ObjectReplication:ObjectRemoved

数据复制过程涉及的删除操作。

ObjectReplication:ObjectRemoved

ObjectReplication:ObjectModified

数据复制过程涉及的覆盖操作。

ObjectReplication:ObjectModified

ObjectCreatedGroup

所有创建或覆盖文件操作。

关联消息通知返回的事件名称可以是任意以ObjectCreated:开头的事件,具体取决于选择的上传方式。例如,通过SDK简单上传文件时,事件名称为ObjectCreated:PutObject。通过OSS控制台上传文件时,事件名称为ObjectCreated:PostObject。

ObjectDownloadedGroup

所有获取文件操作。

关联消息通知返回的事件名称可以是任意以ObjectDownloaded:开头的事件,具体取决于选择的下载方式。例如,通过简单下载获取文件时,事件名称为ObjectDownloaded:GetObject。

ObjectRemovedGroup

所有删除文件操作。

关联消息通知返回的事件名称可以是任意以ObjectRemoved:开头的事件,具体取决于选择的删除方式。例如,删除单个文件时,事件名称为ObjectRemoved:DeleteObject。批量删除多个文件时,事件名称为ObjectRemoved:DeleteObjects。

FinishRestore

完成解冻。该事件类型仅支持冷归档存储、深度冷归档存储Object。

ObjectRestore:FinishRestore

消息通知

OSS的事件通知消息内容经过Base64编码,解码后是JSON格式,具体内容如下:

{"events": [
      {
        "eventName": "",  //事件通知类型。
        "eventSource": "", //设置事件通知的消息源,固定为"acs:oss"。
        "eventTime": "", //事件时间,使用ISO-8601时间表示法。
        "eventVersion": "", //事件通知版本号,目前为“1.0”。
        "oss": {
            "bucket": {
                "arn": "", //Bucket的唯一标识符,格式为"acs:oss:region:uid:bucketname"。
                "name": "", //目标Bucket名称。
                "ownerIdentity": "" //Bucket的拥有者。
            }, 
            "object": {
                "deltaSize": "", //Object大小的变化量。例如,新增一个文件,这个值就是文件大小;覆盖一个文件,这个值就是新文件与旧文件的大小差值,因此可能为负数。
                "eTag": "", //Object的ETag。
                "key": "", //Object名称。
                "position": "", //仅适用于ObjectCreated:AppendObject事件,表示此次请求开始追加的位置。首次AppendObject请求的位置从0字节开始。
                "readFrom": "", //仅适用于ObjectDownloaded:GetObject事件,表示文件开始读取的位置。对于非Range请求,此项为0;对于Range请求,此项为请求的开始字节。
                "readTo": "", //仅适用于ObjectDownloaded:GetObject事件,表示文件最后读取的位置。对于非Range请求,此项为文件的大小;对于Range请求,此项为Range请求的结束字节加1。
                "size": "" //Object大小。
                }, 
        "ossSchemaVersion": "", //此字段域的版本号,目前为“1.0”。
        "ruleId": "GetObject", //此事件匹配的规则ID。
        "region": "", //Bucket所在的地域。
        "requestParameters": {
            "sourceIPAddress": "" //请求的源IP地址。
            }, 
        "responseElements": {
            "requestId": "" //请求对应的Request ID。
            }, 
        "userIdentity": {
            "principalId": "" //请求发起者的UID。
            }, 
        "xVars": {  //OSS的回调功能(Callback)中的自定义参数。
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"
            }
        }        
     }
  ]
}

消息通知示例:

{"events": [
      {
        "eventName": "ObjectDownloaded:GetObject",
        "eventSource": "acs:oss",
        "eventTime": "2016-07-01T11:17:30.000Z",
        "eventVersion": "1.0",
        "oss": {
            "bucket": {
                "arn": "acs:oss:cn-shenzhen:114895646818****:event-notification-test-shenzhen",
                "name": "event-notification-test-shenzhen",
                "ownerIdentity": "114895646818****"},
            "object": {
                "deltaSize": 0,
                "eTag": "0CC175B9C0F1B6468E1199E269772661",
                "key": "test",
                "readFrom": 0,
                "readTo": 1,
                "size": 1
            },
        "ossSchemaVersion": "1.0",
        "ruleId": "GetObjectRule",
        "region": "cn-shenzhen",
        "requestParameters": {
            "sourceIPAddress": "198.51.100.1"
            },
        "responseElements": {
            "requestId": "5FF16B65F05BC932307A3C3C"
            },
        "userIdentity": {
            "principalId": "114895646818****"
            },
        "xVars": {
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"
            }
        }        
     }
  ]
}

操作步骤

  1. 登录OSS管理控制台

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择数据处理 > 事件通知

  4. 事件通知页面,单击创建规则

  5. 创建规则面板,配置以下参数:

    参数

    说明

    规则名称

    设置事件通知规则的名称。

    相同账号在同一地域下创建的规则名称不能重复。规则名称必须以英文字母开头,只能包含大小写字母、数字和短划线(-),长度不超过85个字符。

    事件类型

    为目标Object配置事件类型。例如,您希望接收到目标Object通过拷贝操作创建或覆盖文件的事件通知,请将事件类型配置为CopyObject。

    您可以为目标Object配置一条事件通知规则,并在规则中指定多个事件类型。您还可以为目标Object配置多条事件通知规则。配置多条规则时,有如下注意事项:

    • 如果多条规则涉及的目标Object相同,则事件类型不允许相同。例如,规则A针对前缀images配置了CopyObject事件,如果规则B涉及images前缀下任意Object时,则事件类型不能包含CopyObject。

    • 如果多条规则涉及的目标Object不同,则事件类型可以相同也可以不同。例如,规则A针对前缀为images、后缀为.png的Object配置了PutObject事件,如果规则B涉及的目标Object前缀为log、后缀为.jpg,则事件类型可以包含PutObject或者DeleteObject。

    重要

    对开启了版本控制的Bucket执行Object删除操作时,如果您未指定版本ID,不会触发DeleteObject或者DeleteObjects事件通知。原因是未指定版本ID的Object删除行为默认不会删除任意版本Object,而是将当前版本Object转为历史版本Object,并添加删除标记。

    有关事件类型对应Object操作的更多信息,请参见事件类型

    资源描述

    设置事件通知涉及的目标Object。

    • 通过全名匹配目标Object

      • 如果要匹配Bucket根目录下名为exampleobject.txt的目标Object,则填写为exampleobject.txt

      • 如果要匹配Bucket根目录下destdir目录中名为myphoto.jpg的目标Object,则填写为destdir/myphoto.jpg

    • 通过前后缀匹配目标Object

      • 如果要匹配Bucket内的所有Object,则前缀和后缀均置空。

      • 如果要匹配Bucket根目录下examplefolder目录中的所有Object,则前缀填写为examplefolder/,后缀置空。

      • 如果要匹配Bucket内所有JPG格式的Object,则前缀置空,后缀填写为.jpg

      • 如需匹配Bucket根目录下examplefolder目录中所有MP3格式的Object,则前缀填写为examplefolder/,后缀填写为.mp3

    您可以单击添加按钮,创建最多5条资源描述

    接收终端

    设置事件的接收终端,支持HTTP队列

    • HTTP:填写接收事件通知的HttpEndpoint地址,例如http://198.51.100.1:8080。搭建HttpEndpoint的具体操作,请参见主题使用手册HttpEndpoint

    • 队列:填写您在SMQ中创建的队列名称。创建队列的具体操作,请参见创建队列

    您可以单击添加按钮,创建最多5个接收终端

  6. 单击确定

    以上步骤配置完成后,事件通知规则约10分钟后生效。

常见问题

为什么删除文件没有触发事件通知?

相关文档