常见问题
性能相关
调用云函数耗时较长
可以通过排查云函数日志分析耗时位置。如果日志包含 Coldstart: xxxms 类日志,则为云函数冷启动耗时。如果希望解决该部分耗时,可以参考 预置并发。
云函数执行超时怎么处理?
超时客户端会直接断开连接并报错,建议控制函数执行时间,尽量不要把耗时长的操作放在客户端直接调用的云函数内。
如果需要在云函数执行一些长耗时的处理怎么办?
为了保证客户端的体验,不允许直接调用长耗时的云函数。
- 建议在云控制台调整为需要的超时时间(上限为 60s),在云函数内使用 callback() 返回成功,客户端不等待执行结果。
- 云函数会在超时时间内继续执行直到完毕或超时,将执行结果写入数据库等存储服务,再在客户端获取该结果。
配置相关
调整云函数内存配置不生效
云函数配置对 $LATEST 版本生效。如果请求的不是 $LATEST 版本,则配置修改不会生效。
解决方案:
- 确保请求的是
$LATEST版本 - 或者基于
$LATEST版本发布新版本,新版本会使用当前的快照,包含代码和配置(超时时间、环境变量、内存配置等)
云函数内置模块怎么使用?
- 云函数内置模块已经集成于运行环境,可以直接使用。
- 如果内置模块的版本不能满足需求,可以自行安装模块到云函数内,默认会被优先使用。
目前已支持的内置模块为 request 2.87.1 。
云函数内怎么保存密钥等配置信息
云函数是无状态的,配置信息建议存储在云开发的数据库服务
部署相关
为什么云函数更新时,返回 exit status 11?
请检查一下函数的打包方式和入口方法。
- 云函数创建时,默认执行方法是 index.main ,其入口文件为 index.js ,且 index.js 必须用 export 暴露出 main 方法。
- 云函数更新时,如果选择用 zip 包上传,打包的方式需要注意,要保证 zip 包解压后的第一级内容必须包含入口文件(常见的错误打包方式是,将某个云函数代码放在某个文件夹内,并针对这个文件夹进行压缩,这样解压出来的文件是一个文件夹,不包含入口文件 index.js )。
Windows 环境下打包云函数层部署失败
在 Windows 环境下打包云函数层(Layer)的 zip 文件后,部署到云函数时可能会遇到 An internal error has occurred 报错。
问题现象
在 Windows 系统下使用系统自带的压缩工具或 PowerShell 的 Compress-Archive 命令打包云函数层后,上传部署时报错:
函数更新失败
An internal error has occurred. Retry your request, but if the problem persists, contact us with details
问题原因
Windows 系统打包的 zip 文件,内部的路径分隔符使用的是反斜杠 \,而云函数的构建环境是 Linux 系统,要求路径分隔符为正斜杠 /。
这会导致 Linux 环境无法正确解析 zip 包中的文件路径,从而引发部署失败。
解决方案
方案一:使用 7-Zip 打包(推荐)
7-Zip 是一个开源的压缩工具,打包时会使用 Unix 风格的路径分隔符。
- 下载安装 7-Zip
- 右键选择要打包的文件夹
- 选择 "7-Zip" -> "添加到压缩包"
- 压缩格式选择 "zip"
方案二:使用 WSL 打包
如果已安装 WSL (Windows Subsystem for Linux),可以在 WSL 环境中使用 zip 命令打包:
# 进入 WSL 环境
wsl
# 进入层文件所在目录
cd /mnt/c/your/layer/path
# 使用 zip 命令打包
zip -r layer.zip ./*
方案三:使用 Git Bash 打包
Git for Windows 自带的 Git Bash 也可以使用 Unix 风格的 zip 命令:
# 打开 Git Bash,进入层文件目录
cd /c/your/layer/path
# 打包
zip -r layer.zip ./*
调试相关
云函数测试时,部分日志丢失了?
- 云函数测试时,如果以同步调用的方式(超时时间小于 20 秒),返回的日志最多为 4k,超过 4k 的日志不显示。
- 如果以异步调用的方式(超时时间大于或等于 20 秒),返回的日志最多为 6M,超过 6M 的日志不显示。
为什么云函数中调用其他云函数报错 socket timeout,但是被调用的云函数实际是有执行成功并且返回数据的?
您可在页面上的函数配置-基本信息中,为云函数设置超时时长。同时,如果使用到 SDK,SDK 默认的超时时间是 15 秒,两者以最短时间为准。
使用相关
云函数如何调用云函数
目前只可以通过云开发提供的 SDK 调用,没有其它方式
不同的云函数可以共用代码文件(目录)吗
未上线
Node.js 云函数同时支持异步和同步写法吗
是的,推荐使用同步(async/await)写法。
云函数 HTTP 访问配置身份验证后报 MISSING_CREDENTIALS 错误
当云函数配置了 HTTP 访问服务后,在环境配置中对该云函数开启身份认证,会导致原先可直接访问的 URL 报 MISSING_CREDENTIALS 错误。
问题现象
- 云函数已配置 HTTP 访问服务路径,可通过 URL 直接访问
- 在环境配置中对该云函数开启身份认证后
- 访问该 URL 返回
MISSING_CREDENTIALS错误
问题原因
开启身份验证后,所有请求都需要携带有效的身份凭证(如 Access Token 或 API Key)才能访问云函数。这是云开发的安全机制,用于保护云函数不被未授权访问。
解决方案
方案一:使用 Access Token 认证
在请求头中携带 Access Token:
// 先通过登录获取 Access Token
const response = await fetch(
"https://your-env-id.api.tcloudbasegateway.com/v1/functions/your-function-name",
{
headers: {
Authorization: "Bearer your-access-token",
},
},
);
Access Token 获取方法请参考 AccessToken 使用指南
方案二:使用 API Key 认证
如果是服务端调用,可以使用 API Key:
const response = await fetch(
"https://your-env-id.api.tcloudbasegateway.com/v1/functions/your-function-name",
{
headers: {
Authorization: "Bearer your-api-key",
},
},
);
方案三:使用 Publishable Key 认证
如果是客户端公开访问场景,可以使用 Publishable Key:
const response = await fetch(
"https://your-env-id.api.tcloudbasegateway.com/v1/functions/your-function-name",
{
headers: {
Authorization: "Bearer your-publishable-key",
},
},
);
方案四:关闭身份验证
如果该云函数需要公开访问,可以关闭身份验证:
- 登录 云开发控制台
- 进入【环境】-【HTTP 访问服务】
- 找到对应的云函数路径,关闭身份验证
关闭身份验证意味着任何人都可以访问该云函数,请确保云函数内部有适当的安全校验逻辑。