問題現象
觸發器無法調用函數執行。
問題原因
可能存在的原因如下。
沒有成功產生觸發事件。
不滿足觸發規則。
觸發器配置的角色不正確。
解決方案
方案一:確認是否成功產生觸發事件
OSS觸發器
例如您的情境是將檔案上傳到OSS後觸發函數執行,那麼您要排查的步驟如下:
您需要確認檔案是否已上傳到對應的Bucket中。
如果檔案已上傳完成,需要確認Function Compute是否有作業記錄。
如果有作業記錄說明函數被觸發了,只是函數運行失敗了,需要根據日誌調試代碼邏輯。
如果沒有作業記錄說明函數沒有被觸發,需要排查是否滿足觸發規則,具體見方案二:確認是否滿足觸發器的觸發規則。
如果檔案沒有上傳完成,則需要確保先把檔案上傳完成。
SLS觸發器
如果SLS觸發器未觸發函數執行,您可以從以下兩個方面排查。
確認在SLS觸發器配置的Logstore是否有資料增量修改,當Shard資料有變化時會觸發函數運行。
查看函數作業記錄是否有異常。
方案二:確認是否滿足觸發器的觸發規則
常見觸發器的觸發規則樣本如下。
定時觸發器
請排查定時觸發器設定的觸發方式及對應的時間。如果您設定的觸發方式為自訂CRON 運算式,預設是UTC時間,請確認觸發時間是否正確。更多資訊,請參見步驟一:建立定時觸發器。
如果您設定的CRON運算式為0 0 4 * * *,表示UTC時間為每天04:00觸發函數執行,轉化為北京時間即每天12:00觸發函數執行。
如果您設定的CRON運算式為CRON_TZ=Asia/Shanghai 0 0 4 1 * *,表示北京時間每月1號的04:00觸發函數執行。
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,並添加刪除標記。更多資訊,請參見常見問題。EventBridge類別的OSS觸發器建立成功後不會立即生效,需要等待30s後才能觸發函數。
Tablestore觸發器
必須為Tablestore執行個體的資料表開啟Stream資訊。具體步驟,請參見步驟一:為資料表開啟Stream功能。
方案三:確認觸發器的角色是否正確
請確認您為觸發器配置的角色是否被刪除,或者角色許可權是否不足,建議您為觸發器配置標準的角色。
OSS觸發器:配置
AliyunOSSEventNotificationRole
角色。具體資訊,請參見配置原生OSS觸發器。Tablestore觸發器:配置
AliyunTableStoreStreamNotificationRole
角色。具體資訊,請參見步驟二:建立Tablestore觸發器。
相關文檔
如果您上傳檔案到OSS觸發函數執行了多次,需要重新設定觸發事件,具體請參見檔案上傳到OSS觸發函數執行多次,要如何處理?。