当您需要对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的费用。计费详情,请参见计费说明。
支持配置事件通知的Bucket地域,请参见地域支持列表。
无地域属性Bucket不支持配置事件通知。
同一地域仅支持配置10条事件通知规则。如果您的业务需要配置更多的事件通知规则,请联系技术支持。
通过RTMP推流方式生成的TS和M3U8文件不会触发事件通知规则。有关RTMP推流的介绍,请参见关于LiveChannel的操作。
使用说明
您在创建事件通知规则后,若请求者对您OSS进行的操作触发了事件通知规则,SMQ将请求者对OSS进行的相关操作发送到您配置的HTTP服务器或SMQ的队列中。具体流程如下图所示:
事件类型
分组 | 类型 | 说明 |
ObjectCreated(创建文件) | ObjectCreated:PutObject | Put方法上传文件。详情请参见PutObject。 |
ObjectCreated:PostObject | Post方法上传文件。详情请参见PostObject。 | |
ObjectCreated:CopyObject | 拷贝文件。详情请参见 CopyObject。 | |
ObjectCreated:AppendObject | 追加写方式上传文件。详情请参见AppendObject。 | |
ObjectCreated:InitiateMultipartUpload | 初始化分片上传任务。详情请参见 InitiateMultipartUpload。 | |
ObjectCreated:UploadPart | 分片上传文件。详情请参见UploadPart。 | |
ObjectCreated:UploadPartCopy | 分片拷贝文件。详情请参见UploadPartCopy。 | |
ObjectCreated:CompleteMultipartUpload | 完成分片上传。详情请参见CompleteMultipartUpload。 | |
ObjectCreated:PutSymlink | 为文件创建软链接。详情请参见PutSymlink。 | |
ObjectCreated:* | 任意以 说明 未来新增事件中,此项默认涵盖新增的符合要求的事件,例如新增ObjectCreated:test类型,匹配成功并投递。 | |
ObjectDownloaded(下载文件) | ObjectDownloaded:GetObject | 通过简单下载获取文件。 |
ObjectModified(修改文件) | ObjectModified:UpdateObjectMeta | 调用UpdateObjectMeta接口修改某个对象的属性。 |
ObjectModified:ChangeStorageClass | 通过生命周期规则转换存储类型。 | |
ObjectModified:* | 任意以 说明 未来新增事件中,此项默认涵盖新增的符合要求的事件,例如新增ObjectModified:test类型,匹配成功并投递。 | |
ObjectRemoved(删除文件) | ObjectRemoved:DeleteObject | 删除单个文件。详情请参见DeleteObject。 |
ObjectRemoved:DeleteObjects | 删除多个文件。详情请参见DeleteMultipleObjects。 | |
ObjectRemoved:AbortMultipartUpload | 取消分片上传任务并删除对应的分片。详情请参见AbortMultipartUpload。 | |
ObjectRemoved:* | 任意以 说明 未来新增事件中,此项默认涵盖新增的符合要求的事件,例如新增ObjectRemoved:test类型,匹配成功并投递。 | |
ObjectReplication(复制文件) | ObjectReplication:ObjectCreated | 数据复制过程涉及的写入操作。 |
ObjectReplication:ObjectRemoved | 数据复制过程涉及的删除操作。 | |
ObjectReplication:ObjectModified | 数据复制过程涉及的覆盖操作。 | |
ObjectReplication:* | 任意以 说明 未来新增事件中,此项默认涵盖新增的符合要求的事件,例如新增 ObjectReplication:test 类型,匹配成功并投递。 | |
ObjectRestore(恢复文件) | ObjectRestore:FinishRestore | 对象恢复完成,将对象从冷归档中恢复到可访问的状态。该事件类型仅支持冷归档存储、深度冷归档存储类型的Object。 |
消息通知
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"
}
}
}
]
}操作步骤
登录OSS管理控制台。
单击Bucket 列表,然后单击目标Bucket名称。
在左侧导航栏,选择数据处理 > 事件通知。
在事件通知页面,单击创建规则。
在创建规则面板,配置以下参数:
参数
说明
规则名称
设置事件通知规则的名称。
相同账号在同一地域下创建的规则名称不能重复。规则名称必须以英文字母开头,只能包含大小写字母、数字和短划线(-),长度不超过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操作的更多信息,请参见通过事件通知实时处理OSS文件变动。
对象匹配
设置事件通知涉及的目标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、队列等方式。
单击确定。
以上步骤配置完成后,事件通知规则约10分钟后生效。
常见问题
相关文档
您可以在事件通知规则中自定义您关注的Object,当这些Object发生指定事件时,您可以通过SMQ指定的接收终端,收到Object的事件通知。具体操作,请参见结合SMQ实现OSS事件通知的教程示例。
如果您通过HttpEndpoint接口接收不到消息体,可能是因为您使用了Post方法。如何解决,请参见轻量消息队列(原 MNS)中使用PHP编写HttpEndpoint接口时接收不到消息体。
如果您希望实现上传回调,您也可以直接使用OSS提供的上传回调功能。具体操作,请参见上传回调。