本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
OSS與函數計算集成后,OSS事件能觸發相關函數執行,實現對OSS中的數據的自定義處理。本文介紹函數計算支持的OSS觸發器的使用限制、事件類型及觸發規則。
背景信息
OSS和函數計算通過OSS觸發器實現無縫集成,您可以編寫函數對OSS事件進行自定義處理,當OSS捕獲到指定類型的事件后,OSS事件觸發相應的函數執行。例如,您可以設置函數來處理PutObject事件,當您調用OSS的PutObject接口上傳圖片到OSS后,相關聯的函數會自動被觸發來處理該圖片。
OSS和函數計算集成后,您可以自由地調用各種函數處理圖像或音頻數據,再把結果寫回到多種存儲服務中。整個架構中,您只需要專注于函數邏輯的編寫,系統將以實時的、可靠的、大規模并行的方式處理海量的數據。
OSS觸發器使用限制
僅EventBridge類別的OSS觸發器支持配置多個文件前綴和文件后綴。
原生OSS觸發器和EventBridge類別的OSS觸發器配置的文件前綴和文件后綴都不支持正則匹配。
僅EventBridge類別的OSS觸發器支持在一個Bucket內關聯超過10個以上的OSS觸發器。
一般情況下,不推薦一個Bucket下關聯10個以上的觸發器,建議您創建新的Bucket,并基于新的Bucket創建觸發器。
OSS事件定義
當OSS系統捕獲到相關事件后,會將事件信息編碼為JSON字符串,傳遞給事件處理函數。OSS事件通知格式的詳細信息,請參見消息通知。
已支持的OSS事件定義如下表所示。一種事件類型對應一個ObjectCreated、ObjectRemoved或ObjectModified類型的API,調用某個API并執行成功后會觸發函數執行一次。
事件類型 | 事件名稱 | 說明 |
ObjectCreated | oss:ObjectCreated:PutObject | 調用PutObject接口上傳文件。更多信息,請參見PutObject。 |
oss:ObjectCreated:PutSymlink | 調用PutSymlink接口針對OSS上的TargetObject創建軟鏈接,您可以通過該軟鏈接訪問TargetObject。更多信息,請參見PutSymlink。 | |
oss:ObjectCreated:PostObject | 調用PostObject接口使用HTML表單上傳文件到指定的Bucket。更多信息,請參見PostObject。 | |
oss:ObjectCreated:CopyObject | 調用CopyObject接口拷貝一個在OSS上已經存在的對象。更多信息,請參見CopyObject。 | |
oss:ObjectCreated:InitiateMultipartUpload | 使用MultipartUpload模式傳輸數據前,必須先調用InitiateMultipartUpload接口來通知OSS初始化一個MultipartUpload事件。更多信息,請參見InitiateMultipartUpload。 | |
oss:ObjectCreated:UploadPart | 初始化一個MultipartUpload事件之后,可以根據指定的對象名和Upload ID來分塊(Part)上傳數據。更多信息,請參見UploadPart。 | |
oss:ObjectCreated:UploadPartCopy | UploadPartCopy通過從一個已存在的Object中拷貝數據來上傳一個Part。更多信息,請參見UploadPartCopy。 | |
oss:ObjectCreated:CompleteMultipartUpload | 在將所有數據Part都上傳完成后,必須調用CompleteMultipartUpload接口來完成整個文件的MultipartUpload。更多信息,請參見CompleteMultipartUpload。 | |
oss:ObjectCreated:AppendObject | 調用AppendObject接口以追加寫的方式上傳文件。更多信息,請參見AppendObject。 | |
oss:ObjectCreated:* | 調用任何上述ObjectCreated類型的API執行成功后都會觸發函數。 | |
ObjectRemoved | oss:ObjectRemoved:DeleteObject | 調用DeleteObject接口刪除某個對象。更多信息,請參見DeleteObject。 |
oss:ObjectRemoved:DeleteObjects | 調用DeleteMultipleObjects接口批量刪除文件。更多信息,請參見DeleteMultipleObjects。 | |
oss:ObjectRemoved:AbortMultipartUpload | 調用AbortMultipartUpload接口可以根據用戶提供的Upload ID終止其對應的MultipartUpload事件。更多信息,請參見AbortMultipartUpload。 | |
ObjectModified | oss:ObjectModified:UpdateObjectMeta | 調用UpdateObjectMeta接口修改某個對象的屬性。 說明 目前,支持該事件的地域包括:華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華南1(深圳)和西南1(成都)。 |
ObjectReplication | oss:ObjectReplication:ObjectCreated | 數據復制過程涉及的寫入操作。 說明 目前,支持該事件的地域包括:華東1(杭州)、華東2(上海)、華北2(北京)、華南1(深圳)。 |
oss:ObjectReplication:ObjectModified | 數據復制過程涉及的覆蓋操作。 說明 目前,支持該事件的地域包括:華東1(杭州)、華東2(上海)、華北2(北京)、華南1(深圳)。 | |
oss:ObjectReplication:ObjectRemoved | 數據復制過程涉及的刪除操作。 說明 目前,支持該事件的地域包括:華東1(杭州)、華東2(上海)、華北2(北京)、華南1(深圳)。 |
OSS觸發器觸發規則
避免循環觸發
使用OSS觸發器時,請注意避免循環觸發。例如,一個典型的循環觸發場景是OSS的某個Bucket上傳文件事件觸發函數執行,此函數執行完成后又生成了一個或多個文件再寫回到OSS的Bucket里,這個寫入動作又觸發了函數執行,形成了鏈狀循環。
為了避免循環觸發函數產生不必要的費用,建議您配置文件前綴或文件后綴,例如將觸發函數的文件的文件前綴設置為src
,函數執行完成后生成文件的文件前綴設置為dst
,生成的文件將不會再次觸發函數。如果不設置文件前綴和文件后綴,表示匹配任意文件前綴和文件后綴。具體操作,請參見步驟一:創建OSS觸發器。
原生OSS觸發器觸發規則:保證語義唯一性
一個Bucket下創建的觸發器必須保證語義唯一性,即觸發事件、文件前綴和文件后綴組成的語義唯一。例如,您已為某Bucket創建了觸發事件為oss:ObjectCreated:PutObject的觸發器,該觸發器的文件前綴和文件后綴分別為source和zip,那么為該Bucket新創建的觸發器是否合法的說明如下表所示。
觸發事件 | 文件前綴 | 文件后綴 | 是否合法 | 解釋說明 |
oss:ObjectCreated:* | source1 | zip1 | 否 | 新創建的觸發器和已創建的觸發器的事件重合。 說明 OSS的事件oss:ObjectCreated:*是所有ObjectCreated類型事件的全集。如果某Bucket下已經創建了任意一個ObjectCreated類型事件的觸發器,將無法創建oss:ObjectCreated:*事件的觸發器。同理,如果某Bucket下已經創建了oss:ObjectCreated:*事件的觸發器,將無法創建任何ObjectCreated類型事件的觸發器。 |
oss:ObjectCreated:PutObject | source | zip | 否 | 新創建的觸發器和已創建的觸發器的文件前后綴均重合。 |
source | 無 | 否 | 新創建的觸發器和已創建的觸發器的文件前綴重合,文件后綴不設置則包含了后綴為zip的對象。 | |
無 | zip | 否 | 新創建的觸發器和已創建的觸發器的文件后綴重合,文件前綴不設置則包含了前綴為source的對象。 | |
source1 | zip1 | 是 | 新創建的觸發器和已創建的觸發器的文件前后綴均不重合。 | |
source | zip1 | 是 | 新創建的觸發器和已創建的觸發器的文件后綴不重合。 | |
source1 | zip | 是 | 新創建的觸發器和已創建的觸發器的文件前綴不重合。 | |
oss:ObjectCreated:PostObject | source | zip | 是 | 新創建的觸發器和已創建的觸發器的事件不同。 |
原生OSS觸發器要保證語義唯一性,所以不支持為不同的函數配置相同的OSS觸發器。
如果您希望一個OSS事件類型可以觸發不同的函數進行不同的處理,即想為不同的函數配置相同的OSS觸發器,可以創建EventBridge類別的OSS觸發器。
常見問題
相關文檔
配置觸發器
關于如何配置和使用原生OSS觸發器和EventBridge類別的OSS觸發器,請參見配置原生OSS觸發器和配置EventBridge類別的OSS觸發器。
觸發器相關問題
如果您希望查看函數的執行觸發了哪個事件,可以手動在代碼邏輯中打印事件類型日志,具體請參見日志記錄。
如果您希望在函數中調用另一個函數,可以使用API調用指定函數,具體請參見函數可以相互調用嗎?。
觸發器實踐教程
如果您需要實現解壓上傳到OSS的ZIP文件,請參見使用函數計算實現自動解壓上傳到OSS的ZIP文件。