如果您授权其他人可以对您的资源(Bucket)进行某些操作,且希望关注这些操作,则可创建对应规则,使得这些操作发生时,能够主动通知到您。或者您需要统计操作,也可通过事件通知的方式进行数据分析、查看一段时间内某个操作发生的次数,据此来分析您的业务最近有什么样的发展趋势。此外,您也可以将这些事件通知的消息继续导入其他服务(例如:EMR来进一步进行您自定义的分析)。您也可以通过事件通知监控您的资源上发生的某些操作的QPS等指标。
您需要通过消息队列 MNS 版 实现OSS事件通知事件通知(回调)。
您可通过在MNS上创建事件通知规则,并且以消息的方式主动推送到指定的接收端,来关注阿里云OSS指定资源上产生的事件。简言之,阿里云OSS通过MNS实现事件通知(回调)。本文介绍OSS事件通知的适用场景、使用需知、规则注意事项等信息,并举例说明OSS事件通知的具体使用方法。
MNS的OSS事件通知流程如下图所示。
默认规则
如果用户简单的想关注自己所有Bucket上产生的所有事件,可以简单的创建一条默认规则就可以了,即默认事件通知,请参见默认规则OSS事件通知教程。
OSS支持将相关操作产生的事件通知到指定的接收端。其中:
请求返回值
在请求OSS进行相关操作时,事件通知通过在返回的Response中增加Header来描述触发事件通知的结果,不会影响原定接口的返回值。如果没有匹配事件通知的规则,则不会增加Header;如果匹配到了,不管事件通知是否触发成功,都会增加这个Header。Header格式如下:
{
"code": "Success", //此次触发事件通知的结果,如果成功,则为Success,否则为Fail,需要注意的是,Success只表示OSS将消息发送到了主题中,并不代表主题将消息推送到了Endpoint
"message": "NotificationSucceed", //此次操作的详细描述,如果失败,此处会说明失败的原因
"type": "EventNotification", //操作类型,事件通知统一为"EventNotification",判断的时候需要先判断此类型
"version": "1.0"} //版本号
示例:
x-oss-process-status: 'ewogICAgImNvZGUiOiAiU3VjY2VzcyIsCiAgICAibWVzc2FnZSI6ICJOb3RpZmljYXRpb25TdWNjZWVkIiwKICAgICJ0eXBlIjogIkV2ZW50Tm90aWZpY2F0aW9
事件通知中消息推送的相关介绍请参见推送类型。
OSS支持的事件类型包括:
{"events": [{
"eventName": "", //事件通知类型
"eventSource": "", //消息源,固定为"acs:oss"
"eventTime": "", //事件时间,格式为ISO-8601
"eventVersion": "", //版本号,目前为"1.0"
"oss": {
"bucket": {
"arn": "", //Bucket的唯一标识符,格式为"acs:oss:region:uid:bucket"
"name": "", //Bucket名称
"ownerIdentity": ""}, //Bucket的owner
"object": {
"deltaSize": , //Object大小的变化量,比如新增一个文件,这个值就是文件大小,如果是覆盖一个文件,这个值就是新文件与旧文件的差值,因此可能为负数
"eTag": "", //Object的etag,与GetObject()请求返回的ETag头的内容相同
"key": "", //Object名称
"position":, //可变项,只有在ObjectCreated:AppendObject事件中才有,表示此次请求开始append的位置,注意是从0开始
"readFrom": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件开始读取的位置,如果不是Range请求,则此项为0,否则则是Range请求的开始字节,注意是从0开始
"readTo": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件最后读取的位置,如果不是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:114893010724****:event-notification-test-shenzhen",
"name": "event-notification-test-shenzhen",
"ownerIdentity": "114893010724****"},
"object": {
"deltaSize": 0,
"eTag": "0CC175B9C0F1B6A831C399E269772661",
"key": "test",
"readFrom": 0,
"readTo": 1,
"size": 1},
"ossSchemaVersion": "1.0",
"ruleId": "GetObjectRule"},
"region": "cn-shenzhen",
"requestParameters": {
"sourceIPAddress": "140.205.**.**"},
"responseElements": {
"requestId": "5776514AF09A9E6542425D2B"},
"userIdentity": {
"principalId": "114893010724****"},
"xVars": {
"x:callback-var1":"value1",
"x:vallback-var2":"value2"}}]}
基于本文了解了OSS通知事件规则和流程后,您可参见以下文档执行具体的操作。