通过创建事件通知规则,消息服务MNS可以将对象存储OSS指定资源上产生的事件以消息的方式主动推送到指定的接收端。本文介绍对象存储OSS事件通知的背景信息、适用场景、事件类型以及消息格式。

背景信息

如下图所示,如果您创建了事件通知规则,当您在请求OSS进行相关操作时,消息服务MNS将OSS指定资源上产生的事件以消息的方式推送到接收端。OSS事件通知

在请求OSS进行相关操作时,事件通知通过在返回的Response中增加Header来描述触发事件通知的结果,不会影响原定接口的返回值。如果没有匹配事件通知的规则,则不会增加Header;如果匹配到了,不管事件通知是否触发成功,都会增加这个Header。Header格式如下:

x-oss-process-status: 'ewogICAgImNvZGUiOiAiU3VjY2VzcyIsCiAgICAibWVzc2FnZSI6ICJOb3RpZmljYXRpb25TdWNjZWVkIiwKICAgICJ0eXBlIjogIkV2ZW50Tm90aWZpY2F****'
  • key:x-oss-process-status
  • value:经过Base64编码,解码后为:
    {
        "code":"Success",  //此次触发事件通知的结果。如果成功,返回Success,否则为Fail。Success表示OSS将消息发送到了主题,并不代表主题将消息推送到了Endpoint。
        "message":"NotificationSucceed",   //此次操作的详细描述。如果失败,此处会说明失败的原因。
        "type":"EventNotification",   //操作类型。事件通知的操作类型统一为EventNotification。
        "version":"1.0"
    }

更多消息推送的内容,请参见推送类型

适用场景

  • 当您授权其他用户对您的资源(Bucket)进行某些操作的权限,且希望关注这些操作,可以通过创建规则,在这些操作发生时主动通知您。
  • 通过事件通知的方式进行数据分析、查看一段时间内某个操作发生的次数,分析您的业务最近的发展趋势。您还可以将这些事件通知的消息导入其他服务,例如EMR,进一步进行自定义分析。
  • 通过事件通知监控您的资源上发生的某些操作的QPS等指标。

事件类型

事件类型 说明
PutObject 通过简单上传创建或覆盖文件。
PostObject 通过表单上传创建或覆盖文件。
CopyObject 通过拷贝文件创建或覆盖文件。
InitiateMultipartUpload 初始化一个分片上传任务。
UploadPart 通过上传分片创建或覆盖文件。
UploadPartCopy 通过分片拷贝创建或覆盖文件。
CompleteMultipartUpload 完成分片上传。
AppendObject 通过追加上传创建或追加文件。
GetObject 通过简单下载获取文件。
DeleteObject 删除单个文件。
DeleteObjects 删除多个文件。
ObjectReplication:ObjectCreated 通过跨区域复制生成文件。
ObjectReplication:ObjectRemoved 通过跨区域复制删除文件。
ObjectReplication:ObjectModified 通过跨区域复制覆盖文件。
ObjectCreatedGroup 所有创建或覆盖文件操作。
ObjectDownloadedGroup 所有获取文件操作。
ObjectRemovedGroup 所有删除文件操作。
注意 ObjectCreatedGroup、ObjectDownloadedGroup、ObjectRemovedGroup三种事件类型目前仅支持在中国(香港)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)、澳大利亚(悉尼)、新加坡、英国(伦敦)地域配置。

消息格式

对象存储OSS的事件通知消息内容是经过Base64编码的,解码后是JSON格式,示例代码如下所示。

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

参数解释如下所示。

参数 描述
eventName 事件类型。
eventSource 事件源。
eventTime 事件产生的时间。
eventVersion 事件协议的版本。
oss OSS事件内容。
bucket bucket参数内容。
arn Bucket的唯一标识符。
name Bucket的名称。
ownerIdentity 创建Bucket的用户ID。
object object参数内容。
deltaSize object的大小变化量。
eTag Object的标签。
key Object的名称。
readFrom 文件开始读取的位置。
readTo 文件最后读取的位置
size object的大小。
ossSchemaVersion OSS模式的版本号。
ruleId 事件匹配的规则ID。
region bucket所在的地域。
requestParameters 请求参数值。
sourceIPAddress 请求的源IP。
responseElements 返回参数值。
requestId 请求对应的Request ID。
userIdentity 用户信息。
principalId 请求发起者的UID。
xVars OSS的Callback功能中的自定义参数。