全部產品
Search
文件中心

Object Storage Service:通過事件通知即時處理OSS檔案變動

更新時間:Nov 15, 2024

當您需要對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的費用。計費詳情,請參見計費說明

  • 華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北 3(張家口)、華南1(深圳)、西南1(成都)、中國香港、美國(矽谷)、美國(維吉尼亞)、日本(東京)、新加坡、印尼(雅加達)、菲律賓(馬尼拉)、德國(法蘭克福)、英國(倫敦)地區的儲存空間支援配置事件通知。

  • 同一地區僅支援配置10條事件通知規則。

  • 通過RTMP推流方式產生的TS和M3U8檔案不會觸發事件通知規則。有關RTMP推流的介紹,請參見LiveChannel簡介

使用說明

您在建立事件通知規則後,若要求者對您OSS進行的操作觸發了事件通知規則,SMQ將要求者對OSS進行的相關操作發送到您配置的HTTP伺服器或SMQ的隊列中。具體流程如下圖所示:

事件類型

重要

ObjectCreatedGroup、ObjectDownloadedGroup、ObjectRemovedGroup三種事件類型目前支援在中國香港、美國(矽谷)、美國(維吉尼亞)、德國(法蘭克福)、新加坡、英國(倫敦)地區配置。

配置的事件類型

說明

關聯訊息通知返回的事件名稱

PutObject

通過簡單上傳建立或覆蓋檔案。

ObjectCreated:PutObject

PostObject

通過表單上傳建立或覆蓋檔案。

ObjectCreated:PostObject

CopyObject

通過拷貝檔案建立或覆蓋檔案。

ObjectCreated:CopyObject

InitiateMultipartUpload

初始化一個分區上傳任務。

ObjectCreated:InitiateMultipartUpload

UploadPart

通過上傳分區建立或覆蓋檔案。

ObjectCreated:UploadPart

UploadPartCopy

通過分區拷貝建立或覆蓋檔案。

ObjectCreated:UploadPartCopy

CompleteMultipartUpload

完成分區上傳。

ObjectCreated:CompleteMultipartUpload

AbortMultipartUpload

取消分區上傳任務並刪除對應的分區。

ObjectRemoved:AbortMultipartUpload

AppendObject

通過追加上傳建立或追加檔案。

ObjectCreated:AppendObject

GetObject

通過簡單下載擷取檔案。

ObjectDownloaded:GetObject

DeleteObject

刪除單個檔案。

ObjectRemoved:DeleteObject

DeleteObjects

刪除多個檔案。

ObjectRemoved:DeleteObjects

ObjectReplication:ObjectCreated

資料複製過程涉及的寫入操作。

ObjectReplication:ObjectCreated

ObjectReplication:ObjectRemoved

資料複製過程涉及的刪除操作。

ObjectReplication:ObjectRemoved

ObjectReplication:ObjectModified

資料複製過程涉及的覆蓋操作。

ObjectReplication:ObjectModified

ObjectCreatedGroup

所有建立或覆蓋檔案操作。

關聯訊息通知返回的事件名稱可以是任意以ObjectCreated:開頭的事件,具體取決於選擇的上傳方式。例如,通過SDK簡單上傳檔案時,事件名稱為ObjectCreated:PutObject。通過OSS控制台上傳檔案時,事件名稱為ObjectCreated:PostObject。

ObjectDownloadedGroup

所有擷取檔案操作。

關聯訊息通知返回的事件名稱可以是任意以ObjectDownloaded:開頭的事件,具體取決於選擇的下載方式。例如,通過簡單下載擷取檔案時,事件名稱為ObjectDownloaded:GetObject。

ObjectRemovedGroup

所有刪除檔案操作。

關聯訊息通知返回的事件名稱可以是任意以ObjectRemoved:開頭的事件,具體取決於選擇的刪除方式。例如,刪除單個檔案時,事件名稱為ObjectRemoved:DeleteObject。大量刪除多個檔案時,事件名稱為ObjectRemoved:DeleteObjects。

FinishRestore

完成解凍。該事件類型僅支援冷Archive Storage、深度冷Archive StorageObject。

ObjectRestore:FinishRestore

訊息通知

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"
            }
        }        
     }
  ]
}

操作步驟

  1. 登入OSS管理主控台

  2. 單擊Bucket 列表,然後單擊目標Bucket名稱。

  3. 在左側導覽列,選擇數據處理 > 事件通知

  4. 事件通知頁面,單擊創建規則

  5. 創建規則面板,配置以下參數:

    參數

    說明

    規則名稱

    設定事件通知規則的名稱。

    相同帳號在同一地區下建立的規則名稱不能重複。規則名稱必須以英文字母開頭,只能包含大小寫字母、數字和短劃線(-),長度不超過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操作的更多資訊,請參見事件類型

    資源描述

    設定事件通知涉及的目標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隊列

    • HTTP:填寫接收事件通知的HttpEndpoint地址,例如http://198.51.100.1:8080。搭建HttpEndpoint的具體操作,請參見主題使用手冊HttpEndpoint

    • 隊列:填寫您在SMQ中建立的隊列名稱。建立隊列的具體操作,請參見建立隊列

    您可以單擊添加按鈕,建立最多5個接收終端

  6. 單擊確定

    以上步驟配置完成後,事件通知規則約10分鐘後生效。

常見問題

為什麼刪除檔案沒有觸發事件通知?

相關文檔