部署云函数
命令说明
使用 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> | 代码上传方式:cos 或 zip,默认 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 会自动完成以下操作:
- 打包上传:将函数代码打包为压缩文件并上传
- 配置更新:更新函数配置(超时时间、内存、环境变量、网络配置等)
- 触发器部署:根据配置文件部署或更新触发器
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,云函数仅识别该名称 |
| 文件权限 | 必须具备可执行权限(755 或 777) |
| 脚本格式 | 第一行必须包含 #!/bin/bash,文件结尾必须以 LF 结束 |
| 路径要求 | 启动命令必须使用绝对路径 |
| 监听地址 | 使用 0.0.0.0,不可使用 127.0.0.1 |
| 监听端口 | Web Server 需监听 9000 端口 |
示例模板
- Node.js
- Python
- PHP
#!/bin/bash
export PORT=9000
/var/lang/node18/bin/node index.js
#!/bin/bash
export PORT=9000
/var/lang/python39/bin/python3.9 app.py
#!/bin/bash
/var/lang/php80/bin/php -c /var/runtime/php8 -S 0.0.0.0:9000 index.php
支持的运行时
启动命令必须使用绝对路径,否则无法正常调用。
| 运行时 | 启动脚本路径 |
|---|---|
| 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格式
项目结构
- Node.js
- Python
my-web-function/
├── scf_bootstrap # 启动脚本(必需)
├── package.json # 项目配置及依赖声明
├── cloudbaserc.json # CLI 配置文件(可选)
└── index.js # 函数代码
my-python-function/
├── scf_bootstrap # 启动脚本(必需)
├── requirements.txt # Python 依赖声明
├── cloudbaserc.json # CLI 配置文件(可选)
└── app.py # 函数代码
函数调用
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 中也包含这些配置,否则部署后原有环境变量将会丢失。