跳到主要内容

部署云函数

命令说明

使用 tcb fn deploy 命令可以快速部署云函数到云开发环境。支持部署普通云函数和 HTTP 函数(Web 函数)两种类型。

基本用法

方式一:使用配置文件

在包含 cloudbaserc.json 配置文件的项目目录下,执行以下命令:

# 部署指定的云函数
tcb fn deploy <functionName>

# 部署配置文件中的所有云函数
tcb fn deploy

# 部署为 HTTP 函数
tcb fn deploy <functionName> --httpFn

方式二:从当前目录部署

在函数代码目录下(包含 package.json),无需配置文件即可直接部署:

cd my-function
tcb fn deploy

CLI 会自动从 package.json 读取函数名称,并使用默认配置部署。如需部署为 HTTP 函数,添加 --httpFn 参数:

tcb fn deploy --httpFn

命令参数

tcb fn deploy [options] [name]
参数说明必填
-e, --envId <envId>环境 Id
--httpFn部署为 HTTP 云函数
--ws部署 HTTP 云函数时启用 WebSocket 协议
--code-secret <codeSecret>传入此参数将保护代码,格式为 36 位大小写字母和数字
--force如果存在同名函数,上传后覆盖同名函数
--path <path>自动创建 HTTP 访问服务访问路径
--dir <dir>指定云函数的文件夹路径
--all部署配置文件中包含的全部云函数
--deployMode <deployMode>代码上传方式:coszip,默认 cos(zip 方式限制 1.5 MB)
-h, --help查看命令帮助信息

使用示例

# 部署 app 函数
tcb fn deploy app

# 部署所有函数
tcb fn deploy

# 指定环境部署
tcb fn deploy app -e your-env-id

代码加密

通过 --code-secret 参数对代码进行加密,密钥需要使用 36 位大小写字母和数字组成:

tcb fn deploy app --code-secret 7sGLwMnhgEfKmkqg2dMjB6xWk2hCxsAgGR6w
注意

启用代码加密后,将无法在小程序 IDE、腾讯云控制台中查看云函数的代码和信息。

覆盖同名函数

如果云端已存在同名函数,CLI 会提示是否覆盖。如需强制覆盖,可使用 --force 参数:

tcb fn deploy app --force

指定函数目录部署:

tcb fn deploy app --dir ./functions/app
重要提示

使用 --force 参数覆盖函数时,会同时覆盖函数的配置和触发器。

配置文件示例

{
"envId": "your-env-id",
"functionRoot": "./functions",
"functions": [
{
"name": "app",
"timeout": 5,
"runtime": "Nodejs18.15",
"installDependency": true,
"handler": "index.main"
},
{
"name": "webFunction",
"type": "HTTP",
"timeout": 60,
"runtime": "Nodejs18.15",
"memorySize": 256,
"envVariables": {
"NODE_ENV": "production"
}
}
]
}
说明

HTTP 函数需将 type 设置为 HTTP

默认配置

对于 Node.js 云函数,CLI 提供了默认配置,无需手动配置即可部署:

{
"timeout": 5,
"runtime": "Nodejs18.15",
"installDependency": true,
"handler": "index.main",
"ignore": ["node_modules", "node_modules/**/*", ".git"]
}

部署流程

执行 tcb fn deploy 命令时,CLI 会自动完成以下操作:

  1. 打包上传:将函数代码打包为压缩文件并上传
  2. 配置更新:更新函数配置(超时时间、内存、环境变量、网络配置等)
  3. 触发器部署:根据配置文件部署或更新触发器

HTTP 函数

HTTP 函数是专门针对 Web 服务场景优化的云函数类型,支持标准 HTTP 请求响应模式。

部署方式

方式一:使用配置文件

cloudbaserc.json 中将 type 设置为 HTTP,然后执行:

tcb fn deploy webFunction

方式二:使用命令行参数

tcb fn deploy <functionName> --httpFn

方式三:从当前目录部署

在函数代码目录下(包含 package.json),无需配置文件即可直接部署:

cd my-web-function
tcb fn deploy --httpFn

CLI 会自动从 package.json 读取函数名称,并使用默认配置部署。

启动脚本

HTTP 函数需要 scf_bootstrap 启动脚本来启动 Web Server。如果未创建,CLI 会提示自动生成。

基本要求

要求项说明
文件名称必须命名为 scf_bootstrap,云函数仅识别该名称
文件权限必须具备可执行权限(755777
脚本格式第一行必须包含 #!/bin/bash,文件结尾必须以 LF 结束
路径要求启动命令必须使用绝对路径
监听地址使用 0.0.0.0,不可使用 127.0.0.1
监听端口Web Server 需监听 9000 端口

示例模板

#!/bin/bash
export PORT=9000
/var/lang/node18/bin/node index.js

支持的运行时

启动命令必须使用绝对路径,否则无法正常调用。

运行时启动脚本路径
Node.js 20.19/var/lang/node20/bin/node
Node.js 18.15/var/lang/node18/bin/node
Node.js 16.13/var/lang/node16/bin/node
Node.js 14.18/var/lang/node14/bin/node
Node.js 12.16/var/lang/node12/bin/node
Node.js 10.15/var/lang/node10/bin/node
Python 3.10/var/lang/python310/bin/python3.10
Python 3.9/var/lang/python39/bin/python3.9
Python 3.7/var/lang/python37/bin/python3.7
PHP 8.0/var/lang/php80/bin/php
PHP 7.4/var/lang/php74/bin/php
Java 11/var/lang/java11/bin/java
Java 8/var/lang/java8/bin/java

设置权限

chmod 755 scf_bootstrap
注意

在 Windows 系统中编辑的文件可能使用 CRLF 换行符,需转换为 LF 格式,否则会导致启动失败。

常见错误

如果调用函数时返回 405 错误,通常表示 scf_bootstrap 无法正常运行。请检查:

  • 启动命令路径是否正确
  • 文件权限是否为可执行
  • 换行符是否为 LF 格式

项目结构

my-web-function/
├── scf_bootstrap # 启动脚本(必需)
├── package.json # 项目配置及依赖声明
├── cloudbaserc.json # CLI 配置文件(可选)
└── index.js # 函数代码

函数调用

CloudBase 云函数支持多种调用方式,满足不同场景和平台的需求。您可以根据实际情况选择最适合的调用方式。详情请参考 云函数调用

注意事项

上传方式

默认使用 COS 上传,可通过 --deployMode zip 指定 ZIP 上传(限制 1.5 MB)。

函数类型不可变更

已部署的函数类型(普通函数/HTTP 函数)不支持变更。如需变更类型,请先删除原函数后重新部署。

环境变量更新规则
  • @cloudbase/cli 2.12.0 及以上版本:部署时支持选择增量更新覆盖更新环境变量
  • @cloudbase/cli 2.12.0 以下版本cloudbaserc.json 中的环境变量配置会完全覆盖线上已配置的环境变量

重要:如果您使用的是 2.12.0 以下版本,且在控制台中手动配置了环境变量,请确保在 cloudbaserc.json 中也包含这些配置,否则部署后原有环境变量将会丢失。

相关文档