問題現象
觸發器無法調用函數執行。
問題原因
可能存在的原因如下。
不滿足觸發規則。
觸發器配置的角色不正確。
解決方案
方案一:確認是否滿足觸發器的觸發規則
常見觸發器的觸發規則示例如下。
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觸發器。
聯系我們
如果您已按照以上步驟排查并確認配置正確,但問題仍未解決,請加入釘釘用戶群(釘釘群號:11721331),聯系函數計算工程師即時溝通處理。同時,提供您的阿里云賬號ID、OSS的Bucket名稱以及函數計算的服務名稱、函數名稱和事件源等信息。