通過創建事件通知規則,輕量消息隊列(原 MNS)可以將對象存儲 OSS(Object Storage Service)指定資源上產生的事件以消息的方式主動推送到指定的接收端。本文介紹對象存儲OSS事件通知的背景信息、適用場景、事件類型、消息格式及操作步驟。
背景信息
如下圖所示,如果您創建了事件通知規則,當您在請求OSS進行相關操作時,輕量消息隊列(原 MNS)將OSS指定資源上產生的事件以消息的方式推送到接收端。
在請求OSS進行相關操作時,事件通知通過在返回的Response中增加Header來描述觸發事件通知的結果,不會影響原定接口的返回值。如果沒有匹配事件通知的規則,則不會增加Header;如果匹配成功,不管事件通知是否觸發成功,都會增加這個Header。Header格式如下:
x-oss-process-status: 'ewogICAgImNvZGUiOiAiU3VjY2VzcyIsCiAgICAibWVzc2FnZSI6ICJOb3RpZmljYXRpb25TdWNjZWVkIiwKICAgICJ0eXBlIjogIkV2ZW50Tm90aWZpY2F****'
key:x-oss-process-status
value:經過Base64編碼,解碼后為:
{ "code":"Success", //此次觸發事件通知的結果。如果成功,返回Success,否則為Fail。Success表示OSS將消息發送到了主題,并不代表主題將消息推送到了Endpoint。 "message":"NotificationSucceed", //此次操作的詳細描述。如果失敗,此處會說明失敗的原因。 "type":"EventNotification", //操作類型。事件通知的操作類型統一為EventNotification。 "version":"1.0" }
更多消息推送的內容,請參見推送類型。
適用場景
當您授權其他用戶對您的資源(Bucket)進行某些操作的權限,且希望關注這些操作,可以通過創建規則,在這些操作發生時主動通知您。
通過事件通知的方式進行數據分析、查看一段時間內某個操作發生的次數,分析您的業務最近的發展趨勢。您還可以將這些事件通知的消息導入其他服務,例如EMR,進一步進行自定義分析。
通過事件通知監控您的資源上發生的某些操作的QPS等指標。
事件類型
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 | 完成解凍。該事件類型僅支持冷歸檔存儲、深度冷歸檔存儲Object。 | ObjectRestore:FinishRestore |
消息格式
對象存儲OSS的事件通知消息內容是經過Base64編碼的,解碼后是JSON格式,示例代碼如下所示。
{
"events":[
{
"eventName":"ObjectDownloaded:GetObject",
"eventSource":"acs:oss",
"eventTime":"2016-07-01T11:17:30.000Z",
"eventVersion":"1.0",
"oss":{
"bucket":{
"arn":"acs:oss:cn-shenzhen:123456789098****:event-notification-test-shenzhen",
"name":"event-notification-test-shenzhen",
"ownerIdentity":"123456789098****"
},
"object":{
"deltaSize":0,
"eTag":"0CC175B9C0F1B6A831C399E26977****",
"key":"test",
"readFrom":0,
"readTo":1,
"size":1
},
"ossSchemaVersion":"1.0",
"ruleId":"GetObjectRule"
},
"region":"cn-shenzhen",
"requestParameters":{
"sourceIPAddress":"140.205.XX.XX"
},
"responseElements":{
"requestId":"5776514AF09A9E654242****"
},
"userIdentity":{
"principalId":"123456789098****"
},
"xVars":{
"x:callback-var1":"value1",
"x:vallback-var2":"value2"
}
}
]
}
參數解釋如下所示。
參數 | 描述 |
eventName | 事件類型。 |
eventSource | 事件源。 |
eventTime | 事件產生的時間。 |
eventVersion | 事件協議的版本。 |
oss | OSS事件內容。 |
bucket | bucket參數內容。 |
arn | Bucket的唯一標識符。 |
name | Bucket的名稱。 |
ownerIdentity | 創建Bucket的用戶ID。 |
object | Object參數內容。 |
deltaSize | Object的大小變化量。 |
eTag | Object的內容。對于Put Object請求創建的Object,ETag值是其內容的MD5值;對于其他方式創建的Object,ETag值是基于一定計算規則生成的唯一值,但不是其內容的MD5值。ETag值可以用于檢查Object內容是否發生變化。 |
key | Object的名稱。 |
readFrom | 文件開始讀取的位置。 |
readTo | 文件最后讀取的位置 |
size | Object的大小。 |
ossSchemaVersion | OSS模式的版本號。 |
ruleId | 事件匹配的規則ID。 |
region | Bucket所在的地域。 |
requestParameters | 請求參數值。 |
sourceIPAddress | 請求的源IP。 |
responseElements | 返回參數值。 |
requestId | 請求對應的Request ID。 |
userIdentity | 用戶信息。 |
principalId | 請求發起者的UID。 |
xVars | OSS的Callback功能中的自定義參數。 |
注意事項
事件通知規則創建完成后,約10分鐘生效。
系統會自動為新建的規則創建主題,主題可能產生費用,詳情請參見計費說明。
事件通知規則支持創建和刪除,暫時不支持修改。
步驟一:創建隊列
在左側導航欄,選擇 。
在頂部菜單欄,選擇地域。
在隊列列表頁面,單擊創建隊列。
在創建隊列面板配置以下參數,然后單擊確定。
名稱:隊列名稱。
消息最大長度:發送到隊列的消息體的最大長度。
長輪詢時間:當隊列中沒有消息時,該隊列的ReceiveMessage請求的最大等待時長。
消息可見性超時時間:消息從隊列中取出后從Active狀態變成Inactive狀態后的持續時間。
消息保存時長:消息在隊列中的最長存活時間。從發送到隊列開始經過此參數指定的時間后,不論消息是否被取出都將被刪除。
消息定時時間:發送到隊列的所有消息將延后此參數指定的時間后被消費。
啟用日志功能:是否開啟日志管理功能。
隊列列表頁面目標隊列已創建。
步驟二:創建Bucket
登錄OSS管理控制臺。
在左側導航欄,單擊Bucket列表。
在Bucket列表頁面,單擊創建Bucket。
在創建 Bucket面板,配置Bucket參數,然后單擊確定。
Bucket 名稱:輸入event-notification-test。
地域:跟隊列所在的地域保持一致。
阻止公共訪問:不開通
讀寫權限:選擇公共讀寫。
說明其他配置項請保持默認。
步驟三:創建自定義規則
創建一個新規則后,輕量消息隊列(原 MNS)會自動創建一個主題,并且以指定的Endpoint創建訂閱。您可以在輕量消息隊列(原 MNS)控制臺查看和管理這些主題與訂閱(例如創建新的訂閱)。
在左側導航欄,單擊事件通知。
在頂部菜單欄,選擇地域。
在事件通知頁面,單擊對象存儲OSS頁簽, 然后單擊創建規則。
在創建規則-對象存儲OSS面板,進行以下配置,然后單擊確定。
名稱:輸入規則名稱。
事件類型:選擇事件類型。
匹配規則:設置匹配規則。
說明匹配規則可以是全名、前綴、后綴以及前后綴,不同規則不能有交集。OSS資源包括Bucket和Object,通過“/”連接。例如:資源movie/hello.avi由Bucket(movie)和Object(hello.avi)組成。
全名:movie/hello.avi。
前綴:
movie/hello:movie中以hello為前綴的Object。
movie/:Bucket名稱為movie的所有的Object。
mov:Bucket名稱前綴為mov的所有Object。
后綴:.avi:所有Bucket中以.avi為后綴的Object。
前后綴:前綴movie/,后綴.avi:movie中所有以.avi為后綴的Object。
接收終端:選擇隊列,輸入步驟一中創建的隊列名稱。
步驟四:上傳Object
登錄OSS管理控制臺。
在左側導航欄,單擊Bucket列表。
在Bucket列表頁面,單擊Bucket名稱列下的目標Bucket。
選擇 ,然后單擊上傳文件。
在上傳文件面板,配置文件上傳目錄和文件ACL,單擊上傳文件。更多配置參數信息,請參見使用OSS控制臺上傳文件。
狀態列顯示:上傳成功。
步驟五:接收消息
在左側導航欄,選擇 。
在頂部菜單欄,選擇地域。
在隊列列表頁面,找到目標隊列,在其右側操作列選擇 。
在隊列收發消息快速體驗頁面的接收消息區域,單擊接收消息。
接收消息區域顯示隊列的消息列表。
在消息列表中,找到目標消息,在其右側操作列單擊詳情,在消息詳情對話框中查看消息內容。