OSS 與Function Compute整合後,OSS 事件能觸發相關函數執行,實現對 OSS 中的資料的自訂處理。本文介紹Function Compute支援的 OSS 觸發器的使用限制、事件類型及觸發規則。
背景資訊
OSS 和Function Compute通過 OSS 觸發器實現無縫整合,可以編寫函數對 OSS 事件進行自訂處理。當 OSS 捕獲到指定類型的事件後,會自動觸發關聯的函數執行。例如,設定函數處理檔案上傳事件,當通過PutObject介面上傳圖片到 OSS 後,關聯的函數會自動執行來處理該圖片。
OSS 和Function Compute整合後,可以調用函數處理映像或音頻資料,再將結果寫入儲存服務。只需關注函數邏輯的編寫,系統會以可靠、大規模並行的方式處理資料。
OSS 觸發器使用限制
-
僅EventBridge 類別的 OSS 觸發器支援配置多個檔案首碼和檔案尾碼。
-
原生 OSS 觸發器和EventBridge 類別的 OSS 觸發器配置的檔案首碼和檔案尾碼均不支援正則匹配。
-
僅EventBridge 類別的 OSS 觸發器支援在一個 Bucket 內關聯超過 10 個以上的 OSS 觸發器。
一般情況下,不推薦一個 Bucket 下關聯 10 個以上的觸發器。建議建立新的 Bucket,並基於新的 Bucket 建立觸發器。
-
原生 OSS 觸發器要求函數與 OSS Bucket 位於同地區,不支援跨地區配置。如需跨地區觸發,可使用EventBridge 類別的 OSS 觸發器或通過事件匯流排 EventBridge 路由事件。
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 |
資料複製過程涉及的寫入操作。 |
|
oss:ObjectReplication:ObjectModified |
資料複製過程涉及的覆蓋操作。 |
|
|
oss:ObjectReplication:ObjectRemoved |
資料複製過程涉及的刪除操作。 |
OSS 觸發器觸發規則
避免迴圈觸發
使用 OSS 觸發器時,請注意避免迴圈觸發。例如,OSS 的某個 Bucket 上傳檔案事件觸發函數執行,函數執行後產生了一個或多個檔案再寫回到 OSS 的 Bucket,這個寫入動作又觸發了函數執行,形成鏈狀迴圈。
為了避免迴圈觸發函數產生不必要的費用,建議設定檔首碼或檔案尾碼進行隔離。例如,將觸發函數的檔案首碼設定為src,函數執行完成後組建檔案的檔案首碼設定為dst,這樣產生的檔案不會再次觸發函數。如果不設定檔首碼和檔案尾碼,則表示匹配任意檔案。具體操作,請參見步驟一:建立OSS觸發器。
原生 OSS 觸發器配置規則
為避免在同一個 Bucket 下建立重複的觸發器導致單個事件同時觸發多個觸發器,系統在建立觸發器時會進行配置衝突檢測。如果建立觸發器的觸發事件、檔案首碼和檔案尾碼的組合與已有觸發器存在重疊,則建立失敗。
配置觸發器時,請遵循以下原則:
-
同一 Bucket 下,每個觸發器的"觸發事件 + 檔案首碼 + 檔案尾碼"組合應保持唯一。
-
檔案首碼和檔案尾碼使用通配匹配方式,未配置首碼或尾碼時表示匹配任意值。
設定檔首碼和檔案尾碼時,建議合理劃分檔案命名空間,避免因匹配範圍重疊導致觸發器建立失敗。
如果一個 OSS 事件類型可以觸發不同的函數進行不同的處理,即為不同的函數配置相同的觸發條件,可以建立 EventBridge 類別的 OSS 觸發器。
常見問題
相關文檔
-
配置觸發器
關於如何配置和使用原生 OSS 觸發器和 EventBridge 類別的 OSS 觸發器,請參見配置原生OSS觸發器和配置EventBridge類別的OSS觸發器。
-
觸發器相關問題
-
如果需要查看函數的執行觸發了哪個事件,可以在代碼邏輯中列印事件類型日誌,具體請參見日誌記錄。
-
如果需要在函數中調用另一個函數,可以使用 API 呼叫指定函數,具體請參見函數可以相互調用嗎?。
-