觸發(fā)器不能正常觸發(fā)函數(shù)執(zhí)行怎么辦?
問題現(xiàn)象
觸發(fā)器無法調(diào)用函數(shù)執(zhí)行。
問題原因
可能存在的原因如下。
沒有成功生成觸發(fā)事件。
不滿足觸發(fā)規(guī)則。
觸發(fā)器配置的角色不正確。
解決方案
方案一:確認是否成功生成觸發(fā)事件
OSS觸發(fā)器
例如您的場景是將文件上傳到OSS后觸發(fā)函數(shù)執(zhí)行,那么您要排查的步驟如下:
您需要確認文件是否已上傳到對應(yīng)的Bucket中。
如果文件已上傳完成,需要確認函數(shù)計算是否有運行日志。
如果有運行日志說明函數(shù)被觸發(fā)了,只是函數(shù)運行失敗了,需要根據(jù)日志調(diào)試代碼邏輯。
如果沒有運行日志說明函數(shù)沒有被觸發(fā),需要排查是否滿足觸發(fā)規(guī)則,具體見方案二:確認是否滿足觸發(fā)器的觸發(fā)規(guī)則。
如果文件沒有上傳完成,則需要確保先把文件上傳完成。
SLS觸發(fā)器
如果SLS觸發(fā)器未觸發(fā)函數(shù)執(zhí)行,您可以從以下兩個方面排查。
確認在SLS觸發(fā)器配置的Logstore是否有數(shù)據(jù)增量修改,當Shard數(shù)據(jù)有變化時會觸發(fā)函數(shù)運行。
查看函數(shù)運行日志是否有異常。
方案二:確認是否滿足觸發(fā)器的觸發(fā)規(guī)則
常見觸發(fā)器的觸發(fā)規(guī)則示例如下。
定時觸發(fā)器
請排查定時觸發(fā)器設(shè)置的觸發(fā)方式及對應(yīng)的時間。如果您設(shè)置的觸發(fā)方式為自定義CRON 表達式,默認是UTC時間,請確認觸發(fā)時間是否正確。更多信息,請參見步驟一:創(chuàng)建定時觸發(fā)器。
如果您設(shè)置的CRON表達式為0 0 4 * * *,表示UTC時間為每天04:00觸發(fā)函數(shù)執(zhí)行,轉(zhuǎn)化為北京時間即每天12:00觸發(fā)函數(shù)執(zhí)行。
如果您設(shè)置的CRON表達式為CRON_TZ=Asia/Shanghai 0 0 4 1 * *,表示北京時間每月1號的04:00觸發(fā)函數(shù)執(zhí)行。
OSS觸發(fā)器
OSS的Bucket和函數(shù)必須在同一個地域。
上傳的文件前綴或者文件后綴必須和觸發(fā)器設(shè)置的文件前綴或文件后綴一致。
例如,您為觸發(fā)器設(shè)置的文件前綴為ab,您分別上傳文件a/b.zip、ab.zip和abc.zip,只有上傳文件ab.zip和abc.zip能觸發(fā)器函數(shù)執(zhí)行。
OSS事件必須和觸發(fā)器的觸發(fā)事件完全一致。以下幾種情況會被認為OSS事件與觸發(fā)事件不匹配,無法觸發(fā)函數(shù)執(zhí)行。
您使用OSS Browser工具分片上傳文件,上傳完成后的事件為
oss:ObjectCreated:CompleteMultipartUpload
。如果您為觸發(fā)器設(shè)置的觸發(fā)事件為oss:ObjectCreated:PutObject
或者oss:ObjectCreated:PostObject
,將不能觸發(fā)函數(shù)執(zhí)行。您使用控制臺上傳文件的事件為
oss:ObjectCreated:PostObject
,而您為觸發(fā)器設(shè)置的觸發(fā)事件為oss:ObjectCreated:PutObject
。或者您調(diào)用oss:ObjectCreated:PutObject
API接口上傳文件的事件為oss:ObjectCreated:PutObject
,而您為觸發(fā)器設(shè)置的觸發(fā)器事件為oss:ObjectCreated:PostObject
。
OSS中開啟版本控制的Bucket,刪除Object時必須指定版本ID。
使用OSS Browser工具刪除Object時如果不指定版本ID,將不會觸發(fā)
oss:ObjectRemoved:DeleteObject
或oss:ObjectRemoved:DeleteObjects
事件。當前版本Object會被轉(zhuǎn)為歷史版本Object,并添加刪除標記。更多信息,請參見常見問題。EventBridge類別的OSS觸發(fā)器創(chuàng)建成功后不會立即生效,需要等待30s后才能觸發(fā)函數(shù)。
Tablestore觸發(fā)器
必須為Tablestore實例的數(shù)據(jù)表開啟Stream信息。具體步驟,請參見步驟一:為數(shù)據(jù)表開啟Stream功能。
方案三:確認觸發(fā)器的角色是否正確
請確認您為觸發(fā)器配置的角色是否被刪除,或者角色權(quán)限是否不足,建議您為觸發(fā)器配置標準的角色。
OSS觸發(fā)器:配置
AliyunOSSEventNotificationRole
角色。具體信息,請參見配置原生OSS觸發(fā)器。Tablestore觸發(fā)器:配置
AliyunTableStoreStreamNotificationRole
角色。具體信息,請參見步驟二:創(chuàng)建Tablestore觸發(fā)器。
相關(guān)文檔
如果您上傳文件到OSS觸發(fā)函數(shù)執(zhí)行了多次,需要重新設(shè)置觸發(fā)事件,具體請參見文件上傳到OSS觸發(fā)函數(shù)執(zhí)行多次,要如何處理?。