問題現象
觸發器無法調用函數執行。
問題原因
可能存在的原因如下。
不滿足觸發規則。
觸發器配置的角色不正確。
解決方案
方案一:確認是否滿足觸發器的觸發規則
常見觸發器的觸發規則樣本如下。
OSS觸發器
OSS的Bucket和函數必須在同一個地區。
上傳的檔案首碼或者檔案尾碼必須和觸發器設定的檔案首碼或檔案尾碼一致。
例如,您為觸發器設定的檔案首碼為ab,您分別上傳檔案a/b.zip、ab.zip和abc.zip,只有上傳檔案ab.zip和abc.zip能觸發器函數執行。
OSS事件必須和觸發器的觸發事件完全一致。以下幾種情況會被認為OSS事件與觸發事件不匹配,無法觸發函數執行。
您使用OSS Browser工具分區上傳檔案,上傳完成後的事件為
oss:ObjectCreated:CompleteMultipartUpload
。如果您為觸發器設定的觸發事件為oss:ObjectCreated:PutObject
或者oss:ObjectCreated:PostObject
,將不能觸發函數執行。您使用控制台上傳檔案的事件為
oss:ObjectCreated:PostObject
,而您為觸發器設定的觸發事件為oss:ObjectCreated:PutObject
。或者您調用oss:ObjectCreated:PutObject
API介面上傳檔案的事件為oss:ObjectCreated:PutObject
,而您為觸發器設定的觸發事件為oss:ObjectCreated:PostObject
。
OSS中開啟版本控制的Bucket,刪除Object時必須指定版本ID。
使用OSS Browser工具刪除Object時如果不指定版本ID,將不會觸發
oss:ObjectRemoved:DeleteObject
或oss:ObjectRemoved:DeleteObjects
事件。目前的版本Object會被轉為歷史版本Object,並添加刪除標記。更多資訊,請參見常見問題。
Tablestore觸發器
必須為Tablestore執行個體的資料表開啟Stream資訊。具體步驟,請參見步驟一:為資料表開啟Stream功能。
方案二:確認觸發器的角色是否正確
請確認您為觸發器配置的角色是否被刪除,或者角色許可權是否不足。建議您為觸發器配置標準的角色,例如為OSS觸發器配置AliyunOSSEventNotificationRole
角色。更多資訊,請參見配置原生OSS觸發器。
聯絡我們
如果您已按照以上步驟排查並確認配置正確,但問題仍未解決,請加入DingTalk使用者群(DingTalk群號:64970014484),聯絡Function Compute工程師即時溝通處理。同時,提供您的阿里雲帳號ID、OSS的Bucket名稱以及Function Compute的服務名稱、函數名稱和事件來源等資訊。