全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息服务

OSS 事件通知

更新时间:2017-06-07 13:26:11

MNS 推出重磅功能,支持阿里云各大服务通过MNS实现事件通知(回调)。用户可以通过在MNS上创建事件通知的规则,来关注其他阿里云产品指定资源上产生的事件,并且由MNS以消息的方式主动推送到指定的接收端。

  • 事件通知按区域提供服务
  • 事件通知为异步通知,不会影响用户使用其他云产品的体验
  • 事件通知消息在有效时间内不会丢失,当用户接收消息失败时,会按照指定的重试策略重试
  • 事件通知消息的接收端目前支持HttpServer和Queue(可以将消息转移到Queue中,由用户来主动消费)
  • 事件通知中消息推送的相关介绍请参考主题模型

event-notification

注意事项

  • 事件通知规则创建完,约10分钟后生效
  • 在没有其他规则的情况下,默认规则匹配所有资源上的所有事件
  • 在有其他规则并且也有默认规则的情况下,不匹配其他规则的事件会匹配默认规则
  • 事件通知规则只能创建和删除,目前不支持更新

作用

  • 如果您授权其他人可以对您的资源(Bucket)进行某些操作,而您又希望关注这些操作的话,您就可以创建对应的规则,使得这些操作发生时,能够主动通知到您。
  • 如果您需要对操作进行统计的话,也可以通过事件通知的方式进行数据分析,查看一段时间内某个操作发生的次数,据此来分析您的业务最近有什么样的发展趋势。并且,您也可以将这些事件通知的消息继续导入其他服务(比如:EMR,进一步进行您自定义的分析)
  • 您也可以通过事件通知监控您的资源上发生的某些操作的QPS等等指标。

OSS事件通知

OSS 支持将相关操作产生的事件通知到指定的接收端。其中:

1)不会触发事件通知

  • 失败的操作目前不会触发事件通知
  • 同步产生的操作不会触发事件通知

2)会触发事件通知:

  • Lifecycle产生的操作会触发事件通知
  • 镜像回写会触发两个事件:ObjectDownloaded:GetObject(由于文件还未拉取,因此etag等信息为空)和ObjectCreated:PutObject。

3)自定义参数

  • OSS 事件通知还支持用户自定义参数,会在消息中将用户的合法自定义参数放在xVars字段中(自定义参数方法与 OSS 的 Callback 保持一致,可参考:这里)。

1. OSS请求返回值

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

  • key: x-oss-process-status
  • value:经过Base64编码,解码后为:
  1. {
  2. "code": "Success", //此次触发事件通知的结果,如果成功,则为Success,否则为Fail,需要注意的是,Success只表示oss将消息发送到了topic中,并不代表topic将消息推送到了endpoint那里
  3. "message": "NotificationSucceed", //此次操作的详细描述,如果失败,此处会说明失败的原因
  4. "type": "EventNotification", //操作类型,事件通知统一为"EventNotification",判断的时候需要先判断此类型
  5. "version": "1.0"} //版本号

示例:

  1. x-oss-process-status: 'ewogICAgImNvZGUiOiAiU3VjY2VzcyIsCiAgICAibWVzc2FnZSI6ICJOb3RpZmljYXRpb25TdWNjZWVkIiwKICAgICJ0eXBlIjogIkV2ZW50Tm90aWZpY2F0aW9

2. 举例说明如何使用OSS事件通知

某个用户创建了一个Bucket:event-notification-test,然后他关心有哪些Object被上传到这个Bucket中了,于是他就可以创建下面这样的事件通知规则:

  • 规则名称:event-notification-test-rule
  • 资源描述:event-notification-test/
  • 事件类型:PutObject、PostObject
  • 接收终端:event-notification-test-queue

以此为例,五步玩转OSS事件通知,请参考:这里

默认规则

如果用户简单的想关注自己所有Bucket上产生的所有事件,可以简单的创建一条默认规则就可以了,即,默认事件通知,请参考:这里

注意:

  • 如果仅有默认规则,则默认规则会匹配所有Bucket上产生的所有事件,但一旦创建了其他规则后,默认规则的语义就变成了:不匹配其他规则的情况下产生的事件通知才会匹配默认规则

3. OSS事件类型

OSS支持的事件类型包括:

注:请求失败时,目前是不会触发事件通知的

事件名称 说明
ObjectCreated:PutObject
ObjectCreated:PostObject
ObjectCreated:CopyObject
ObjectCreated:InitiateMultipartUpload
ObjectCreated:UploadPart
ObjectCreated:UploadPartCopy
ObjectCreated:CompleteMultipartUpload
ObjectCreate:AppendObject
ObjectDownload:GetObject
ObjectRemove:DeleteObject
ObjectRemove:DeleteObjects
ObjectRemoved:AbortMultipartUpload

4. OSS事件通知消息格式

  • OSS的事件通知消息内容是经过Base64编码的,解码后是Json格式,具体内容如下:
  1. {"events": [{
  2. "eventName": "", //事件通知类型
  3. "eventSource": "", //消息源,固定为"acs:oss"
  4. "eventTime": "", //事件事件,格式为ISO-8601
  5. "eventVersion": "", //版本号,目前为"1.0"
  6. "oss": {
  7. "bucket": {
  8. "arn": "", //bucket的唯一标识符,格式为"acs:oss:region:uid:bucket"
  9. "name": "", //bucket名称
  10. "ownerIdentity": ""}, //bucket的owner
  11. "object": {
  12. "deltaSize": , //object大小的变化量,比如新增一个文件,这个值就是文件大小,如果是覆盖一个文件,这个值就是新文件与旧文件的差值,因此可能为负数
  13. "eTag": "", //object的etag,与GetObject()请求返回的ETag头的内容相同
  14. "key": "", //object名称
  15. "position":, //可变项,只有在ObjectCreated:AppendObject事件中才有,表示此次请求开始append的位置,注意是从0开始
  16. "readFrom": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件开始读取的位置,如果不是Range请求,则此项为0,否则则是Range请求的开始字节,注意是从0开始
  17. "readTo": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件最后读取的位置,如果不是Range请求,则此项为文件的大小,否则则是Range请求的结束字节增1
  18. "size": }, //object大小
  19. "ossSchemaVersion": "", //此字段域的版本号,目前为"1.0"
  20. "ruleId": "GetObject"}, //此事件匹配的规则ID
  21. "region": "", //bucket所在的region
  22. "requestParameters": {
  23. "sourceIPAddress": ""}, //请求的源IP
  24. "responseElements": {
  25. "requestId": ""}, //请求对应的requestid
  26. "userIdentity": {
  27. "principalId": ""}, //请求发起者的uid
  28. "xVars": { //oss的callback功能中的自定义参数
  29. "x:callback-var1":"value1",
  30. "x:vallback-var2":"value2"}}]}

示例:

  1. {"events": [{
  2. "eventName": "ObjectDownloaded:GetObject",
  3. "eventSource": "acs:oss",
  4. "eventTime": "2016-07-01T11:17:30.000Z",
  5. "eventVersion": "1.0",
  6. "oss": {
  7. "bucket": {
  8. "arn": "acs:oss:cn-shenzhen:1148930107246818:event-notification-test-shenzhen",
  9. "name": "event-notification-test-shenzhen",
  10. "ownerIdentity": "1148930107246818"},
  11. "object": {
  12. "deltaSize": 0,
  13. "eTag": "0CC175B9C0F1B6A831C399E269772661",
  14. "key": "test",
  15. "readFrom": 0,
  16. "readTo": 1,
  17. "size": 1},
  18. "ossSchemaVersion": "1.0",
  19. "ruleId": "GetObjectRule"},
  20. "region": "cn-shenzhen",
  21. "requestParameters": {
  22. "sourceIPAddress": "140.205.128.90"},
  23. "responseElements": {
  24. "requestId": "5776514AF09A9E6542425D2B"},
  25. "userIdentity": {
  26. "principalId": "1148930107246818"},
  27. "xVars": {
  28. "x:callback-var1":"value1",
  29. "x:vallback-var2":"value2"}}]}
本文导读目录