OSS支援的事件通知功能,能夠對您所關心的OSS資源上的相關操作及時進行消息通知。例如:
- 有新數據從圖片內容分享平台、音視頻平台上傳到OSS。
- OSS上的相關內容發生了更新。
- OSS上的重要檔案被刪除。
- OSS上資料同步已經完成。
OSS事件通知是非同步進行的,不影響正常的OSS操作。事件通知的配置包括規則和消息通知兩部分。
- 規則:用來描述什麼情況下需要OSS進行消息通知。
- 消息通知:基於阿里雲Message ServiceMNS實現,提供多種通知方式。
OSS事件通知整體架構如下圖:
建立方法
- 進入OSS 管理主控台介面。
- 在左側儲存空間列表中,單擊目標儲存空間名稱,開啟該儲存空間概覽頁面。
- 單擊事件通知頁簽,然後單擊建立規則,開啟建立規則頁面。
- 在規則名稱框中,輸入規則名稱。
说明
- 您在同地區下的同產品中最多可以建立10條規則,新規則約10分鐘後生效。
- 任意兩個規則不能有交集,單條規則任意兩個資源描述不能有交集。
- 在資源描述 區域,單擊添加,添加一個或多個資源描述。
说明
- 資源描述:可以是全名、首碼、尾碼以及前尾碼,不同資源描述不能有交集。
- 全名:輸入某個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。
- 資源描述:可以是全名、首碼、尾碼以及前尾碼,不同資源描述不能有交集。
- 在事件類型下拉式清單中,選擇一個或多個需要進行消息通知的事件。
说明
- 事件類型對應OSS資源的不同操作,具體類型和含義請參見下文中的事件類型列表。
- 選擇您想要觸發通知的事件,可以選擇多個。同樣的事件不可以多次配置在同一資源上。
- 在接收終端區域,單擊添加,添加一個或多個接收終端。
说明
- 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"}}]}