跳到主要内容

tcb-ff 使用指南

tcb-ff@cloudbase/functions-framework 提供,用于启动云函数服务。

@cloudbase/functions-framework 是云开发提供的函数框架,用于云端运行云函数,以及本地开发和调试云函数。

Q: 什么情况下需要安装 tcb-ff

A: 云函数本地开发和调试时,需要安装 tcb-ff

安装 tcb-ff

安装到全局

# 全局安装 tcb-ff
npm install -g @cloudbase/functions-framework
# 运行 tcb-ff
tcb-ff

安装到项目下

# 本地安装 tcb-ff
npm install @cloudbase/functions-framework
# 运行 tcb-ff
npx tcb-ff

使用 tcb-ff 启动云函数服务

如下为一个常用的示例,启动云函数同时监听文件(基于 nodemon)变化,文件变化后会重新启动,该命令开启 CORS 了能力,允许浏览器在 *.example.comwww.another.com 域名上访问服务。

tcb-ff -w --enableCors=true --allowedOrigins=*.example.com,www.another.com

在函数代码根路径下执行 tcb-ff 即可启动云函数服务

tcb-ff

默认情况下,tcb-ff 会监听 3000 端口,如需指定端口,可通过 --port 参数指定

tcb-ff --port=30000
tcb-ff -p=30000

tcb-ff 支持监听本地文件变更,如需启用热重启模式,可通过 -w 参数启用

tcb-ff -w

如果通过浏览器访问云函数服务,可能会遇到跨域问题,可以通过 --enableCors 参数启用 CORS

tcb-ff --enableCors=true

--enableCors 默认启用 Originlocalhost | 127.0.0.1 的跨域访问,如需配置其他域名,可通过 --allowedOrigins 参数配置

tcb-ff --enableCors=true --allowedOrigins=*.example.com,www.another.com

tcb-ff 支持开启 Basic Auth 进行身份认证,可以通过 --allowedAccounts 参数指定允许访问的账号

tcb-ff --allowedAccounts=abc:123,efg:456

tcb-ff 参数说明

参数说明

命令行参数环境变量默认值示例说明
-w, --watch/false-w是否启用热重启模式,如启用,将会在函数代码文件变更时自动重启服务
--portPORT3000--port=3000监听的端口
--extendedContextKeyEXTENDED_CONTEXT_KEY''--extendedContextKey=X-Functions-Extended-Context指定获取扩展 context.extendedContext 的头部字段
--enableCorsENABLE_CORSfalse--enableCors=true是否启用 CORS,启用后可配置放通的域名,默认放通 localhost127.0.0.1
--allowedOriginsALLOWED_ORIGINSlocalhost,127.0.0.1--allowedOrigins="example.com,*.abc.com"需放通 CORS 的域名,默认放通 localhost127.0.0.1。支持通配符,如 *.example.com 可匹配 www.example.comauth.example.com。该配置项仅在启用enableCors时生效。
--allowedAccountsALLOWED_ACCOUNTS--allowedAccounts=abc:123,efg:456允许访问的账号,配置后开启 Basic Auth
--gracefulShutdownGRACEFUL_SHUTDOWNNODE_ENV 不为 production 时开启--gracefulShutdown=false是否启用服务的优雅停止
--timeoutTIMEOUT0--timeout=5000Node.js Server 超时时间,见 https://nodejs.org/api/http.html#servertimeout
--keepAliveTimeoutKEEP_ALIVE_TIMEOUT65000--keepAliveTimeout=10000Node.js Server keep-alive 超时时间,见 https://nodejs.org/api/http.html#server-keepalivetimeout
--captureStackCAPTURE_STACKNODE_ENV 不为 production 时开启--captureStack=true请求出错时,是否返回错误堆栈
--concurrencyLimitCONCURRENCY_LIMIT1000--concurrencyLimit=100并发请求数限制,0 为不限制
--noExitNO_EXITfalse--noExit=true是否禁用 process.exit() 避免进程意外退出
--logHeaderBodyLOG_HEADER_BODYfalse--logHeaderBody=true是否在请求日志中记录请求头、请求体、响应头、响应体,如记录,将会限制 body 大小为 2KB
--logEventContextLOG_EVENT_CONTEXTtrue--logEventContext=false是否在请求日志中记录入参 eventcontext
--logDirnameLOG_DIRNAME./logs--logDirname=/var/logs日志文件目录
--maxLogFileSizeMAX_LOG_FILE_SIZE1024 * 1024 * 128(128m)--maxLogFileSize=2097152单个日志文件最大字节数
--maxLogFilesMAX_LOG_FILES4--maxLogFiles=5最多同时存在的日志文件数量
--interceptOutputINTERCEPT_OUTPUTfalse--interceptOutput=true是否拦截console.log等标准输出,若拦截,会将标准输出的内容记录到日志文件中

可以通过 tcb-ff -h 查看全部参数

$ tcb-ff -h
[@cloudbase/functions-framework@1.6.0][pid:0]
Usage: tcb-ff [options]

Options:
-w, --watch Watch the source file for changes and restart the service. Default is false.
Example: -w

--port, -p Set the port to listen on. Default is 3000.
Example: --port=3000
Environment Variable: PORT

--target Set the target function name. Default is 'main'.
Example: --target=hello
Environment Variable: FUNCTION_TARGET

--source Set the target function filename. Default is 'index.js' (extension differs based on module type).
Example: --source=main.mjs
Environment Variable: FUNCTION_SOURCE

--loadAllFunctions Whether to load all functions in the 'functionsRoot' directory. Default: false.
Example: --loadAllFunctions=true
Environment Variable: LOAD_ALL_FUNCTIONS

--functionsRoot The root directory of the functions. only effective when 'loadAllFunctions' is true.
Example: --functionsRoot=path/to/functionsRoot
Environment Variable: FUNCTIONS_ROOT

--signatureType Set the function format. Currently only 'event' is supported.
Example: --signatureType=event
Environment Variable: SIGNATURE_TYPE

--gracefulShutdown Enable graceful shutdown of the service. Default true when 'NODE_ENV=production' otherwise false.
Example: --gracefulShutdown=false
Environment Variable: GRACEFUL_SHUTDOWN

--timeout Set the Node.js Server timeout. Default is 0.
Example: --timeout=5000
Environment Variable: TIMEOUT

--keepAliveTimeout Set the Node.js Server keep-alive timeout. Default is 65000.
Example: --keepAliveTimeout=10000
Environment Variable: KEEP_ALIVE_TIMEOUT

--captureStack Return error stack when a request fails. Enabled when 'NODE_ENV=production'.
Example: --captureStack=true
Environment Variable: CAPTURE_STACK

--concurrencyLimit Limit the number of concurrent requests. 0 means no limit. Default is 1000.
Example: --concurrencyLimit=100
Environment Variable: CONCURRENCY_LIMIT

--noExit Disable 'process.exit()' to prevent accidental process exit. Default is false.
Example: --noExit=true
Environment Variable: NO_EXIT

--interceptOutput If true, intercept console、process.stdout、process.stderr output. Default: false.
Example: --interceptOutput=true
Environment Variable: INTERCEPT_OUTPUT

--logHeaderBody Log request and response headers and bodies in the request log.
Default is false.
Example: --logHeaderBody=false
Environment Variable: LOG_HEADER_BODY

--logEventContext Log original event and context in the access log. Default is true.
Example: --logEventContext=false
Environment Variable: LOG_EVENT_CONTEXT

--extendedContextKey The key of headers to parse `context.extendedContext`.
`''` means that the feature is turned off.
Default is .
Example: --extendedContextKey=X-Functions-Extended-Context
Environment Variable: EXTENDED_CONTEXT_KEY

--extendedContext The value to parse `context.extendedContext`.
`''` means that the feature is turned off.
This parameter will be ignore when 'extendedContextKey' is specified.
Default is null.
Example: --extendedContext='{"a":1,"b":2}'
Environment Variable: EXTENDED_CONTEXT

--functionsConfigFile Set the multi-functions definition config file. Default is 'cloudbase-functions.json'.
Example: --functionsConfigFile=functions.json
Environment Variable: FUNCTIONS_CONFIG_FILE

--enableCors If true, enable CORS for configured origins. Default is false.
Example: --enableCors=true
Environment Variable: ENABLE_CORS

--allowedOrigins Set the allowed origins for CORS. Default allows localhost,127.0.0.1.
Origins should be domain names without protocol or port.
Wildcard origins are supported. e.g. ['*.example.com'].
Multiple origins should be separated by comma.
Example: --allowedOrigins=*.example.com,www.another.com
Environment Variable: ALLOWED_ORIGINS

--allowedAccounts Set the accounts allowed to access.
If specified, The 'username:password' of request will be verified.
Parameter Format: username1:password1,username1:password1,....
Example: --allowedAccounts=abc:123,efg:456
Access Example:
curl http://username:password@127.0.0.1:3000/
curl -H "Authorization: Basic base64encode(username:password)" http://127.0.0.1:3000/
Environment Variable: ALLOWED_ACCOUNTS

--dry-run Do not start the service, only validate that the code can be loaded. Default is false.
Example: --dry-run