當您需要對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"
}
}
}
]
}
操作步驟
登入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操作的更多資訊,請參見事件類型。
資源描述
設定事件通知涉及的目標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個接收終端。
單擊確定。
以上步驟配置完成後,事件通知規則約10分鐘後生效。
常見問題
相關文檔
您可以在事件通知規則中自訂您關注的Object,當這些Object發生指定事件時,您可以通過SMQ指定的接收終端,收到Object的事件通知。具體操作,請參見結合SMQ實現OSS事件通知的教程樣本。
如果您通過HttpEndpoint介面接收不到訊息體,可能是因為您使用了Post方法。如何解決,請參見輕量訊息佇列(原 MNS)中使用PHP編寫HttpEndpoint介面時接收不到訊息體。
如果您希望實現上傳回調,您也可以直接使用OSS提供的上傳回調功能。具體操作,請參見上傳回調。