通过创建事件通知规则,消息服务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的内容。对于Put Object请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是基于一定计算规则生成的唯一值,但不是其内容的MD5值。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功能中的自定义参数。