OSS支援的事件通知功能,能夠對您所關心的OSS資源上的相關操作及時進行消息通知。例如:

  • 有新數據從圖片內容分享平台、音視頻平台上傳到OSS。
  • OSS上的相關內容發生了更新。
  • OSS上的重要檔案被刪除。
  • OSS上資料同步已經完成。

OSS事件通知是非同步進行的,不影響正常的OSS操作。事件通知的配置包括規則消息通知兩部分。

  • 規則:用來描述什麼情況下需要OSS進行消息通知。
  • 消息通知:基於阿里雲Message ServiceMNS實現,提供多種通知方式。

OSS事件通知整體架構如下圖:

建立方法

  1. 進入OSS 管理主控台介面。
  2. 在左側儲存空間列表中,單擊目標儲存空間名稱,開啟該儲存空間概覽頁面。
  3. 單擊事件通知頁簽,然後單擊建立規則,開啟建立規則頁面。

  4. 規則名稱框中,輸入規則名稱。
    说明
    • 您在同地區下的同產品中最多可以建立10條規則,新規則約10分鐘後生效。
    • 任意兩個規則不能有交集,單條規則任意兩個資源描述不能有交集。
  5. 資源描述 區域,單擊添加,添加一個或多個資源描述。
    说明
    • 資源描述:可以是全名、首碼、尾碼以及前尾碼,不同資源描述不能有交集。
      • 全名:輸入某個Object的全名可以精確關注到此Object。
      • 前尾碼:設定Object的前尾碼可以關注一個Bucket中的全部或者部分Object。例如對於名為nightbucket的Bucket:
        • 要關注其中所有的檔案,則首碼、尾碼都不填。
        • 要關注其中目錄movie下的所有檔案,則首碼填 moive/,尾碼不填。
        • 要關注其中所有的.jpg的圖片,則首碼不填,尾碼填 .jpg
        • 要關注其中目錄movie下的.mp3格式的影片,則首碼填 moive/,尾碼填 .mp3
    • OSS資源套件括Bucket和Object,通過“/”串連。以Bucket(movie)和Object(hello.avi)為例。
      • 全名:movie/hello.avi;
      • 前尾碼:前movie/,後.avi,表示movie中所有以.avi為尾碼的Object。
  6. 事件類型下拉式清單中,選擇一個或多個需要進行消息通知的事件。
    说明
    • 事件類型對應OSS資源的不同操作,具體類型和含義請參見下文中的事件類型列表。
    • 選擇您想要觸發通知的事件,可以選擇多個。同樣的事件不可以多次配置在同一資源上。
  7. 接收終端區域,單擊添加,添加一個或多個接收終端。
    说明
    • OSS事件通知功能在某個操作規則匹配之後,會生成相關消息描述,並將該消息發布到MNS的Topic中,然後根據該Topic上的訂閱,將消息推送到具體的接收終端上。
    • 對於如何處理MNS的Http推送消息以及從隊列中消費消息,請參見Message Service產品概述
    • 阿里雲Message ServiceMNS是收費服務,計費詳情請參見Message Service詳細價格資訊

事件類型列表

事件類型 含義
ObjectCreated:PutObject 建立/覆蓋檔案:簡單上傳
ObjectCreated:PostObject 建立/覆蓋檔案:表單上傳
ObjectCreated:CopyObject 建立/覆蓋檔案:拷貝檔案
ObjectCreated:InitiateMultipartUpload 建立/覆蓋檔案:初始化一個分區上傳任務
ObjectCreated:UploadPart 建立/覆蓋檔案:上傳分區
ObjectCreated:UploadPartCopy 建立/覆蓋檔案:從一個已存在的檔案中拷貝數據來上傳一個分區
ObjectCreated:CompleteMultipartUpload 建立/覆蓋檔案:完成分區上傳
ObjectCreated:AppendObject 建立/覆蓋檔案:追加上傳
ObjectDownloaded:GetObject 下載檔案:簡單下載
ObjectRemoved:DeleteObject 刪除檔案:一個
ObjectRemoved:DeleteObjects 刪除檔案:多個
ObjectReplication:ObjectCreated 同步檔案:已生成
ObjectReplication:ObjectRemoved 同步檔案:已刪除
ObjectReplication:ObjectModified 同步檔案:已修改

事件通知訊息格式

OSS的事件通知訊息內容是經過Base64編碼的,解碼後是Json格式,具體內容如下:
{"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所在的region
        "requestParameters": {
            "sourceIPAddress": ""}, //請求的源IP
        "responseElements": {
            "requestId": ""}, //請求對應的requestid
        "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:1148xxxxxxx246818:event-notification-test-shenzhen",
            "name": "event-notification-test-shenzhen",
            "ownerIdentity": "1148xxxxxxx246818"},
        "object": {
            "deltaSize": 0,
            "eTag": "0CC175B9C0F1xxxxxxC399E269772661",
            "key": "test",
            "readFrom": 0,
            "readTo": 1,
            "size": 1},
        "ossSchemaVersion": "1.0",
        "ruleId": "GetObjectRule"},
        "region": "cn-shenzhen",
        "requestParameters": {
            "sourceIPAddress": "140.205.128.90"},
        "responseElements": {
            "requestId": "5776514AFxxxxxx542425D2B"},
        "userIdentity": {
            "principalId": "1148xxxxxxx246818"},
        "xVars": {
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"}}]}