FC 常见问题

其他问题小结

1. 函数计算的公网IP是什么怎么查看,需要在数据库或第三方服务设置函数计算的白名单

函数计算的IP是动态且不可枚举的,可以参考文档配置固定公网IP地址配合专有网络VPC的公网+NAT网关来完成。

2. 使用频率比较低的函数调用时间为什么调用会稍长/为什么调用函数都需要重新启动服务

函数计算默认是按量模式,是通过请求自动触发实例的创建,当首次发起调用时需要等待实例冷启动,在调用增加时创建实例,在请求减少后销毁实例(一般3-5分钟)。

3. 怎样保留实例一直存活不被销毁希望消除冷启动延时的影响

预留模式是将函数实例的分配和释放交由用户管理,当配置预留函数实例后,预留的函数实例将会常驻,直到用户主动将其释放。

4. 程序中的时间有时差/日志服务中记录的时间与程序中获取的不一致

函数计算默认是UTC时间,可以配置环境变量进行修改。

  • 可以配置环境变量进行时区修改:TZ = Asia/Shanghai 如何配置环境变量

  • 需要注意的是,在nodejs runtime环境中,console.log(date) 会转成utc 时间,可以直接先转成 string , 然后在console.log

var date = new Date(); console.info(date.toTimeString());

5. 函数执行超时 Function time out after

如果函数调用出现偶现的超时, 可以先让用户尝试如下操作:

  • 将函数的 timeout 调整大些
  • 检查函数逻辑,增加日志, 看看是不是调用其他接口返回超时, 从而导致整个函数时间变长导致超时
  • 有特殊的逻辑分支, 进入特别耗时的分支, 比如 cpu 密集型

6. 客户端断开连接 Error:Invocation canceled by client

函数计算是服务端,客户端主动取消了,需要将客户端超时设置的大一些,比如浏览器一般默认调用超时在1-2分钟

7. 执行异常退出 Process exited unexpectedly before completing request 错误码499

  1. 函数本身逻辑有问题, 导致执行环境退出,需要用户增加日志调试下代码,多现于下游数据库问题

  2. 调用函数的 client 端主动 cancel 导致, 比如函数的执行时长是10s, 但是client 端(比如 sdk)调用函数自己的设置的 timeout 是 5s; 这里建议调用函数的 client 端的 timeout 要稍稍大于函数设置的 timeout

  3. 如果是custom runtime 出现这种情况, 最有可能是因为实现的 custom runtime 的 http server 没有文档中的第3个条件: connection 最好设置为 keep alive,请求超时时间至少设置在 15 分钟以上

8. 触发器不能正常触发函数调用

可以按照如下顺序来检查:

  • 是否满足触发规则, 比如:
  1. 对于oss 触发器
    • OSS 和 函数必须在同一个 region
    • 是不是上传了指定后缀的文件到指定的前缀目录, 后缀是不是不对,比如前缀目录配置的是a ,可以直往a目录上传文件,这种是可以。或者直接就是在根目录下上传a.zip,这种也是可以的。如果在/b目录下上传a.zip,这种前缀就变成了/b/a.zip ,这种就是不可以的。
    • 控制台上传的是 PostObject 事件
    • SDK 直接使用 PutObject 接口是 PutObject 事件
    • OSS browser 工具默认使用的是分片上传, 上传完毕的事件是 CompleteMultipartUpload
  2. 对于表格存储触发器, 是不是没有打开表的 stream
  • 触发器的 role
    • 被删除了, 或者 role 的权限不足了,具体的触发器invocation role权限
    • role 是自己创建的, 比如 oss触发器, 授信的服务不是 oss, 最好使用标准的 AliyunOSSEventNotificationRole
  • 可以告知对应的 uid, bucket , 触发规则, 触发的服务/函数, 事件源相应的同学需要一起排查看看
在 GitHub 上编辑本页面 更新时间: Wed, Sep 21, 2022