跳到主要内容

常见问题

性能相关

调用云函数耗时较长

可以通过排查云函数日志分析耗时位置。如果日志包含 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 风格的路径分隔符。

  1. 下载安装 7-Zip
  2. 右键选择要打包的文件夹
  3. 选择 "7-Zip" -> "添加到压缩包"
  4. 压缩格式选择 "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'
}
});

方案四:关闭身份验证

如果该云函数需要公开访问,可以关闭身份验证:

  1. 登录 云开发控制台
  2. 进入【环境】-【HTTP 访问服务】
  3. 找到对应的云函数路径,关闭身份验证
注意

关闭身份验证意味着任何人都可以访问该云函数,请确保云函数内部有适当的安全校验逻辑。

在线开发相关

在线编辑器的 Python 运行时环境与云函数实际运行环境不一致

问题原因

在线编辑器的开发环境是独立环境,与云函数的实际运行环境是分离的。在线编辑器环境主要用于代码编写和简单开发,不会因为删除或重新创建云函数而自动同步运行时版本。

同时,在线编辑器需要从运行环境下载代码后才能进行在线开发,因此可能会存在多个云函数代码同时下载到在线编辑器的情况。

解决方案

  1. 在线开发时保持在当前函数目录操作 - 在线编辑器中可能存在多个云函数的代码,请确保在当前云函数所在的代码目录进行操作即可,不影响云函数的实际运行

  2. 本地开发部署(推荐) - 如果对 Python 小版本有强依赖要求,建议在本地开发环境中使用对应的 Python 版本进行开发,然后通过控制台或命令行工具部署到云函数

提示

云函数的实际运行环境与在线编辑器的开发环境是独立的。创建 Python 3.10 的云函数后,该函数在云端的实际运行环境就是 Python 3.10,不受在线编辑器环境版本的影响。

云函数等在线开发功能无法正常使用

问题原因

云开发平台中的在线开发使用的编辑器是 CloudStudio,并依赖于"Tencent CloudBase Toolkit V2"扩展来实现云开发的在线开发能力。因此需要确保"Tencent CloudBase Toolkit V2"这一扩展始终是最新版本

解决方式

  1. 尝试重新打开在线编辑器

当您重新打开在线编辑器时,系统会自动检测并更新扩展,更新成功后会提示刷新,如下图所示:

  1. 手动更新扩展

有时候,由于扩展市场的网络问题可能导致自动更新失败,在这种情况下,您可以尝试手动更新扩展,如下图所示:

如果更新依然失败,可以按照提示将扩展下载到本地,然后将其拖到编辑器中进行安装,如下图所示:

在云开发平台删除云函数后,在线编辑器仍存在这个云函数

原因分析

在云开发平台中,云函数属于部署服务,而在线编辑器用于存放云函数的代码。这两者相互独立,删除云函数部署并不会自动删除对应的代码

打个比方,我们在本地编写一个服务的代码,然后将其部署到线上环境。当不再需要这个服务时,我们可以把服务下线,也就是删除部署。但此时,本地的服务代码依然会保留,并不会因为线上服务的删除而自动消失。

云开发平台的在线编辑器,其实就相当于本地编辑器的远程版本,本质上只是换了个地方编写代码,其代码存储机制和本地编写、部署的模式原理一致

解决方法

若你已明确不再需要某个云函数的代码,直接在在线编辑器中删除该云函数代码就行

在云开发平台删除并重新创建了同名的云函数后,在线编辑器仍显示之前的版本

原因分析

这与在线编辑器的自动下载策略有关。当工作空间中已经存在同名的云函数时,为了避免代码被覆盖,在线编辑器会自动跳过下载过程,并提示用户手动下载更新

解决方法

通过手动下载方式同步云函数代码即可

具体步骤参考云函数在线开发手册中的下载部分

创建了函数型云托管后,进入在线开发时下载失败

原因分析

函数型云托管是基于云托管的。在没有部署历史的情况下,在线开发无法下载到对应的代码包,所以会出现以下提示

解决方法

请耐心等待云函数的部署完成,然后再进入在线开发进行操作

在线开发的功能操作菜单在哪里?

请参考 云函数在线开发

pnpm 安装依赖时报错

原因分析

项目的 package.json 中声明的 pnpm 版本与当前环境安装的 pnpm 版本不一致

解决方法

打开终端,执行命令 corepack enable 即可

在线编辑器提示磁盘使用率过高

当在线编辑器的磁盘空间使用率超过 85% 时,您将会看到以下提示:

您可以点击【自动清理缓存】按钮,清理 npm / yarn / pnpm / pip 等依赖缓存。同时请检查工作空间中是否存在较大的文件(如压缩包、二进制安装文件等),建议仅保留必要的代码文件。

若磁盘空间使用率超过 90%,为了确保在线编辑器的正常运行,系统将自动进行缓存清理。

您可以通过执行命令 "df -h" 来查看工作空间的磁盘使用情况。

获取临时凭证超时,在线编辑器部分功能将无法正常使用

原因分析

当遇到上述提示时,首先请检查在线编辑器中是否已安装"Tencent CloudBase Toolkit V2"扩展。如果未安装,请在扩展市场中搜索关键字"Tencent CloudBase Toolkit V2"来查找并安装该扩展,然后刷新页面重试

如果不是以上问题,那么很可能是在线编辑器的磁盘空间不足,导致扩展执行异常,请根据以下解决方法进行处理

解决方法

通常,进入在线编辑器时会有相关提示,参考在线编辑器提示磁盘使用率过高

如果没有提示,您可以先打开终端,执行命令 df -h 查看磁盘的剩余空间

如果发现磁盘空间已经所剩无几,可以先尝试运行以下命令清除缓存,同时清理工作空间中非必要的大文件

npm cache clean --force
pnpm store prune
yarn cache clean
pip cache purge

最后,再次通过 df -h 命令检查磁盘空间使用率是否有所降低。如果空间使用率有所降低,可重新进入在线编辑器进行操作

打开云函数调试服务链接时提示登录

原因分析

调试链接仅在在线编辑器内有效。为了防止外部访问,调试链接只能在【测试面板】内进行访问,其他位置均无法访问

解决方法

请使用在线编辑器调试时自动打开的【测试面板】进行调试操作,如下图所示: