触发器不能正常触发函数执行怎么办?

问题现象

触发器无法调用函数执行。

问题原因

可能存在的原因如下。

  • 不满足触发规则。

  • 触发器配置的角色不正确。

解决方案

方案一:确认是否满足触发器的触发规则

常见触发器的触发规则示例如下。

  • OSS触发器

    • OSS的Bucket和函数必须在同一个地域。

    • 上传的文件前缀或者文件后缀必须和触发器设置的文件前缀或文件后缀一致。

      例如,您为触发器设置的文件前缀为ab,您分别上传文件a/b.zipab.zipabc.zip,只有上传文件ab.zipabc.zip能触发器函数执行。

    • OSS事件必须和触发器的触发事件完全一致。以下几种情况会被认为OSS事件与触发事件不匹配,无法触发函数执行。

      • 您使用OSS Browser工具分片上传文件,上传完成后的事件为oss:ObjectCreated:CompleteMultipartUpload。如果您为触发器设置的触发事件为oss:ObjectCreated:PutObject或者oss:ObjectCreated:PostObject,将不能触发函数执行。

      • 您使用控制台上传文件的事件为oss:ObjectCreated:PostObject,而您为触发器设置的触发事件为oss:ObjectCreated:PutObject。或者您调用oss:ObjectCreated:PutObjectAPI接口上传文件的事件为oss:ObjectCreated:PutObject,而您为触发器设置的触发器事件为oss:ObjectCreated:PostObject

    • OSS中开启版本控制的Bucket,删除Object时必须指定版本ID。

      使用OSS Browser工具删除Object时如果不指定版本ID,将不会触发oss:ObjectRemoved:DeleteObjectoss:ObjectRemoved:DeleteObjects事件。当前版本Object会被转为历史版本Object,并添加删除标记。更多信息,请参见常见问题

  • Tablestore触发器

    必须为Tablestore实例的数据表开启Stream信息。具体步骤,请参见步骤一:为数据表开启Stream功能

方案二:确认触发器的角色是否正确

请确认您为触发器配置的角色是否被删除,或者角色权限是否不足。建议您为触发器配置标准的角色,例如为OSS触发器配置AliyunOSSEventNotificationRole角色。更多信息,请参见配置原生OSS触发器

联系我们

如果您已按照以上步骤排查并确认配置正确,但问题仍未解决,请加入钉钉用户群(钉钉群号:11721331),联系函数计算工程师即时沟通处理。同时,提供您的阿里云账号ID、OSS的Bucket名称以及函数计算的服务名称、函数名称和事件源等信息。