通過事件通知實時處理OSS文件變動
當您需要對OSS中的文件變動進行實時處理、同步、監(jiān)聽、業(yè)務觸發(fā)、日志記錄等操作時,您可以通過設置OSS的事件通知規(guī)則,自定義關(guān)注的文件,并及時收到相關(guān)通知。
前提條件
已開通輕量消息隊列SMQ(原 MNS)。您可以通過SMQ產(chǎn)品頁開通SMQ。
注意事項
事件通知涉及OSS與SMQ的關(guān)聯(lián)調(diào)用。對OSS執(zhí)行的操作觸發(fā)事件通知規(guī)則時,OSS觸發(fā)SMQ發(fā)送消息通知。OSS觸發(fā)SMQ的調(diào)用可能失敗。您可以在響應Header中通過x-oss-event-status的值(Base64編碼)判斷是否成功觸發(fā)消息通知。如果x-oss-event-status的值解碼后為{"Result": "Ok"},表示成功觸發(fā)SMQ。如果x-oss-event-status的值解碼后不為{"Result": "Ok"},表示觸發(fā)SMQ失敗。
使用事件通知功能會產(chǎn)生SMQ的費用。計費詳情,請參見計費說明。
僅華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北 3(張家口)、華南1(深圳)、西南1(成都)、中國香港、美國(硅谷)、美國(弗吉尼亞)、日本(東京)、新加坡、澳大利亞(悉尼)關(guān)停中、印度尼西亞(雅加達)、菲律賓(馬尼拉)、德國(法蘭克福)、英國(倫敦)地域的存儲空間支持配置事件通知。
無地域?qū)傩缘拇鎯臻g不支持配置事件通知。
同一地域僅支持配置10條事件通知規(guī)則。
通過RTMP推流方式生成的TS和M3U8文件不會觸發(fā)事件通知規(guī)則。有關(guān)RTMP推流的介紹,請參見LiveChannel簡介。
使用說明
您在創(chuàng)建事件通知規(guī)則后,若請求者對您OSS進行的操作觸發(fā)了事件通知規(guī)則,SMQ將請求者對OSS進行的相關(guān)操作發(fā)送到您配置的HTTP服務器或SMQ的隊列中。具體流程如下圖所示:
事件類型
ObjectCreatedGroup、ObjectDownloadedGroup、ObjectRemovedGroup三種事件類型目前支持在中國香港、美國(硅谷)、美國(弗吉尼亞)、德國(法蘭克福)、澳大利亞(悉尼)關(guān)停中、新加坡、英國(倫敦)地域配置。
配置的事件類型 | 說明 | 關(guān)聯(lián)消息通知返回的事件名稱 |
PutObject | 通過簡單上傳創(chuàng)建或覆蓋文件。 | ObjectCreated:PutObject |
PostObject | 通過表單上傳創(chuàng)建或覆蓋文件。 | ObjectCreated:PostObject |
CopyObject | 通過拷貝文件創(chuàng)建或覆蓋文件。 | ObjectCreated:CopyObject |
InitiateMultipartUpload | 初始化一個分片上傳任務。 | ObjectCreated:InitiateMultipartUpload |
UploadPart | 通過上傳分片創(chuàng)建或覆蓋文件。 | ObjectCreated:UploadPart |
UploadPartCopy | 通過分片拷貝創(chuàng)建或覆蓋文件。 | ObjectCreated:UploadPartCopy |
CompleteMultipartUpload | 完成分片上傳。 | ObjectCreated:CompleteMultipartUpload |
AbortMultipartUpload | 取消分片上傳任務并刪除對應的分片。 | ObjectRemoved:AbortMultipartUpload |
AppendObject | 通過追加上傳創(chuàng)建或追加文件。 | ObjectCreated:AppendObject |
GetObject | 通過簡單下載獲取文件。 | ObjectDownloaded:GetObject |
DeleteObject | 刪除單個文件。 | ObjectRemoved:DeleteObject |
DeleteObjects | 刪除多個文件。 | ObjectRemoved:DeleteObjects |
ObjectReplication:ObjectCreated | 數(shù)據(jù)復制過程涉及的寫入操作。 | ObjectReplication:ObjectCreated |
ObjectReplication:ObjectRemoved | 數(shù)據(jù)復制過程涉及的刪除操作。 | ObjectReplication:ObjectRemoved |
ObjectReplication:ObjectModified | 數(shù)據(jù)復制過程涉及的覆蓋操作。 | ObjectReplication:ObjectModified |
ObjectCreatedGroup | 所有創(chuàng)建或覆蓋文件操作。 | 關(guān)聯(lián)消息通知返回的事件名稱可以是任意以ObjectCreated:開頭的事件,具體取決于選擇的上傳方式。例如,通過SDK簡單上傳文件時,事件名稱為ObjectCreated:PutObject。通過OSS控制臺上傳文件時,事件名稱為ObjectCreated:PostObject。 |
ObjectDownloadedGroup | 所有獲取文件操作。 | 關(guān)聯(lián)消息通知返回的事件名稱可以是任意以ObjectDownloaded:開頭的事件,具體取決于選擇的下載方式。例如,通過簡單下載獲取文件時,事件名稱為ObjectDownloaded:GetObject。 |
ObjectRemovedGroup | 所有刪除文件操作。 | 關(guān)聯(lián)消息通知返回的事件名稱可以是任意以ObjectRemoved:開頭的事件,具體取決于選擇的刪除方式。例如,刪除單個文件時,事件名稱為ObjectRemoved:DeleteObject。批量刪除多個文件時,事件名稱為ObjectRemoved:DeleteObjects。 |
FinishRestore | 完成解凍。該事件類型僅支持冷歸檔存儲、深度冷歸檔存儲Object。 | ObjectRestore:FinishRestore |
消息通知
OSS的事件通知消息內(nèi)容經(jīng)過Base64編碼,解碼后是JSON格式,具體內(nèi)容如下:
{"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大小的變化量。例如,新增一個文件,這個值就是文件大??;覆蓋一個文件,這個值就是新文件與舊文件的大小差值,因此可能為負數(shù)。
"eTag": "", //Object的ETag。
"key": "", //Object名稱。
"position": "", //僅適用于ObjectCreated:AppendObject事件,表示此次請求開始追加的位置。首次AppendObject請求的位置從0字節(jié)開始。
"readFrom": "", //僅適用于ObjectDownloaded:GetObject事件,表示文件開始讀取的位置。對于非Range請求,此項為0;對于Range請求,此項為請求的開始字節(jié)。
"readTo": "", //僅適用于ObjectDownloaded:GetObject事件,表示文件最后讀取的位置。對于非Range請求,此項為文件的大??;對于Range請求,此項為Range請求的結(jié)束字節(jié)加1。
"size": "" //Object大小。
},
"ossSchemaVersion": "", //此字段域的版本號,目前為“1.0”。
"ruleId": "GetObject", //此事件匹配的規(guī)則ID。
"region": "", //Bucket所在的地域。
"requestParameters": {
"sourceIPAddress": "" //請求的源IP地址。
},
"responseElements": {
"requestId": "" //請求對應的Request ID。
},
"userIdentity": {
"principalId": "" //請求發(fā)起者的UID。
},
"xVars": { //OSS的回調(diào)功能(Callback)中的自定義參數(shù)。
"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名稱。
在左側(cè)導航欄,選擇數(shù)據(jù)處理 > 事件通知。
在事件通知頁面,單擊創(chuàng)建規(guī)則。
在創(chuàng)建規(guī)則面板,配置以下參數(shù):
參數(shù)
說明
規(guī)則名稱
設置事件通知規(guī)則的名稱。
相同賬號在同一地域下創(chuàng)建的規(guī)則名稱不能重復。規(guī)則名稱必須以英文字母開頭,只能包含大小寫字母、數(shù)字和短劃線(-),長度不超過85個字符。
事件類型
為目標Object配置事件類型。例如,您希望接收到目標Object通過拷貝操作創(chuàng)建或覆蓋文件的事件通知,請將事件類型配置為CopyObject。
您可以為目標Object配置一條事件通知規(guī)則,并在規(guī)則中指定多個事件類型。您還可以為目標Object配置多條事件通知規(guī)則。配置多條規(guī)則時,有如下注意事項:
如果多條規(guī)則涉及的目標Object相同,則事件類型不允許相同。例如,規(guī)則A針對前綴
images
配置了CopyObject事件,如果規(guī)則B涉及images
前綴下任意Object時,則事件類型不能包含CopyObject。如果多條規(guī)則涉及的目標Object不同,則事件類型可以相同也可以不同。例如,規(guī)則A針對前綴為
images
、后綴為.png
的Object配置了PutObject事件,如果規(guī)則B涉及的目標Object前綴為log
、后綴為.jpg
,則事件類型可以包含PutObject或者DeleteObject。
重要對開啟了版本控制的Bucket執(zhí)行Object刪除操作時,如果您未指定版本ID,不會觸發(fā)DeleteObject或者DeleteObjects事件通知。原因是未指定版本ID的Object刪除行為默認不會刪除任意版本Object,而是將當前版本Object轉(zhuǎn)為歷史版本Object,并添加刪除標記。
有關(guān)事件類型對應Object操作的更多信息,請參見事件類型。
資源描述
設置事件通知涉及的目標Object。
通過全名匹配目標Object
如果要匹配Bucket根目錄下名為exampleobject.txt的目標Object,則填寫為exampleobject.txt。
如果要匹配Bucket根目錄下destdir目錄中名為myphoto.jpg的目標Object,則填寫為destdir/myphoto.jpg。
通過前后綴匹配目標Object
如果要匹配Bucket內(nèi)的所有Object,則前綴和后綴均置空。
如果要匹配Bucket根目錄下examplefolder目錄中的所有Object,則前綴填寫為examplefolder/,后綴置空。
如果要匹配Bucket內(nèi)所有JPG格式的Object,則前綴置空,后綴填寫為.jpg。
如需匹配Bucket根目錄下examplefolder目錄中所有MP3格式的Object,則前綴填寫為examplefolder/,后綴填寫為.mp3。
您可以單擊添加按鈕,創(chuàng)建最多5條資源描述。
接收終端
設置事件的接收終端,支持HTTP和隊列。
HTTP:填寫接收事件通知的HttpEndpoint地址,例如
http://198.51.100.1:8080
。搭建HttpEndpoint的具體操作,請參見主題使用手冊和HttpEndpoint。隊列:填寫您在SMQ中創(chuàng)建的隊列名稱。創(chuàng)建隊列的具體操作,請參見創(chuàng)建隊列。
您可以單擊添加按鈕,創(chuàng)建最多5個接收終端。
單擊確定。
以上步驟配置完成后,事件通知規(guī)則約10分鐘后生效。
常見問題
相關(guān)文檔
您可以在事件通知規(guī)則中自定義您關(guān)注的Object,當這些Object發(fā)生指定事件時,您可以通過SMQ指定的接收終端,收到Object的事件通知。具體操作,請參見結(jié)合SMQ實現(xiàn)OSS事件通知的教程示例。
如果您通過HttpEndpoint接口接收不到消息體,可能是因為您使用了Post方法。如何解決,請參見輕量消息隊列(原 MNS)中使用PHP編寫HttpEndpoint接口時接收不到消息體。
如果您希望實現(xiàn)上傳回調(diào),您也可以直接使用OSS提供的上傳回調(diào)功能。具體操作,請參見上傳回調(diào)。