多函数 multi-scf 组件

最近更新时间:2026-05-08 11:32:41

我的收藏

组件概述

腾讯云 SCF 云函数组件通过使用 Serverless Cloud Framework ,基于云上 Serverless 服务(云函数及触发器等),支持同时部署多个云函数,该组件支持丰富的配置扩展,提供了目前最易用、低成本并且弹性伸缩的多个云函数的开发、配置及部署能力。

操作步骤

创建

方式1:参考 快速创建应用模板,选择 SCF 项目模板进行创建。
方式2:直接使用scf init命令创建。例如,快速创建 Node.js 示例:
scf init multi-scf-nodejs
说明:
目前 multi-scf 组件支持的 helloworld 模板有:multi-scf-golang、multi-scf-php、multi-scf-python,只需要将命令中的 multi-scf-nodejs 更换为前面列出的模板名称,即可快速初始化相应语言模板。

部署

执行cd multi-scf-nodejs进入项目目录,执行scf deploy命令,将会弹出二维码,直接扫码授权进行部署。

查看

执行scf info命令,查看您部署的项目信息。

移除

执行scf remove命令,移除您已经部署的项目。
注意:
使用 remove 命令后,将删除已部署的应用,同时删除对应的函数,且无法恢复,请谨慎使用此命令。

配置详情

全部配置

# serverless.yml
#应用组织信息
app: '' # 应用名称。留空则默认取当前组件的实例名称为app名称。
stage: '' # 环境名称。默认值是 dev。建议使用${env.STAGE}变量定义环境名称
#组件信息
component: multi-scf
name: multi-scfdemo
#组件参数配置
inputs:
# 需要多个函数同时生效的配置参数放到这里
src:
src: ./ # 指定当前需要上传的包含工作流配置文件的目录
exclude:
- .env
region: ap-shanghai # 云函数所在区域
namespace: default
type: event # 函数类型,默认为 event(事件类型),web(web类型)
memorySize: 128 # 内存大小,单位MB
timeout: 20 # 函数执行超时时间,单位秒
initTimeout: 3 # 初始化超时时间,单位秒
publicAccess: true # 是否开启公网访问
installDependency: false # 是否在线安装依赖
vpcConfig: # 私有网络配置
vpcId: vpc-xxx # 私有网络的Id
subnetId: subnet-xxx # 子网ID
cfs: # cfs配置
- cfsId: cfs-xxx # cfs ID
mountInsId: cfs-xxx # mout ID
localMountDir: /mnt/ # 本地挂载路径
remoteMountDir: / # 远程挂载路径
deadLetter: # 死信队列配置
type: deadLetterType
name: deadLetterName
filterType: deadLetterFilterType
layers: #layer配置
- name: scfLayer # layer名称
version: 1 # 版本
cls: # 函数日志
logsetId: 3010c83a-f46d-45a8-94ba-d1567e8ca2f2
topicId: 9bedc538-3f03-4cc4-9eb3-376533d6db12
eip: true # 是否开启固定IP,true: 开启, false: 不开启,默认不开启
asyncRunEnable: true # 是否启用异步执行(长时间运行)
traceEnable: true # 是否状态追踪
msgTTL: 21600 # 消息保留时间,单位秒
retryNum: 2 # 重试次数
dnsCache: true # 是否开启dns缓存,true: 开启, false: 不开启,默认不开启
overClockConfig: # 请求缓冲队列
timeOut: 15 # 最大缓冲时间,单位秒,范围 1-15秒
publish: false # 部署的同时是否发布新版本,true:发布;false:不发布
aliasName: $DEFAULT #别名及流量灰度配置,需发布或使用的函数别名
aliasDescription: 'cli create alisa description' #别名描述,非必填
aliasFunctionVersion: $LATEST # 别名下配置的版本1
additionalVersionWeights: #别名下配置的版本2及权重,自动为版本1分配剩余权重
- version: 1
weight: 0.4
publishDescription: 'cli publish version' # 版本描述
environments: # 环境变量
- key: NODE_ENV
value: development
tags: # 标签配置
- key: slstest
value: slstest
functions:
index:
# 仅仅需要某个函数生效的配置参数放到这里
handler: index.index
type: event # 函数类型,默认为 event(事件类型),web(web类型)
runtime: Nodejs24.11
instanceConcurrencyConfig: # 单实例多并发配置,仅web函数支持开启
enable: true #是否开启
dynamicEnabled: false #是否开启智能动态并发,true: 动态并发,false:表示静态并发
maxConcurrency: 1 #最大并发数,dynamicEnabled是false时,可进行设置
protocolType: 'WS' #当前支持 WebSockets 协议,值为 WS,只有 type:web 时此配置生效。
protocolParams:
wsParams:
idleTimeOut: 60 #空闲超时时间, 单位秒,默认15s。可配置范围1-1800s
# image: # 镜像配置
# registryId: tcr-xxx # 容器镜像服务名称,企业版必须
# imageType: personal # 镜像类型:personal - 个人,enterprise - 企业版,public - 镜像模板
# imageUrl: ccr.ccs.tencentyun.com/sls-scf/nodejs_test:latest@sha256:xxx
# command: node index.js # 容器启动命令
# args: test # 容器启动参数
# containerImageAccelerate: true # 是否开启镜像加速
# imagePort: 9000 # -1表示 job镜像, 9000 表示webServer镜像。不传或为空时,默认取9000
hello:
# 仅仅需要某个函数生效的配置参数放到这里
handler: index.hello
type: event # 函数类型,默认为 event(事件类型),web(web类型)
memorySize: 256
timeout: 10
runtime: Nodejs22.21
triggers: # 触发器
- type: clb # clb触发器
function: index
parameters:
loadBalanceId: string
domain: string
protocol: string
port: string
url: string
weight: string
- type: timer # 定时触发器
function: index
parameters:
name: timer1
qualifier: $DEFAULT # 别名配置
cronExpression: '*/5 * * * * * *' # 每5秒触发一次
enable: true
argument: argument # 额外的参数
- type: http #函数URL
function: index
parameters:
netConfig:
enableIntranet: true
enableExtranet: true
qualifier: $DEFAULT
authType: NONE
- type: mqtt # mqtt触发器
function: index # 函数名
parameters:
enable: true # 是否开启mqtt触发器
qualifier: $DEFAULT # 函数别名/版本
name: test-xx # 触发器名称
timeout: 60 # 超时时间
MaxMsgNum: 40 # 最大消息数
RetryNum: 1 # 重试次数
InstanceId: "mqtt-xxx" # 实例id
topicFilters: '#' # 订阅主题过滤器, 支持多个用逗号分隔配置多个过滤器,如:#,+
userName: "xxxx" # 用户名
password: "xxxx" # 密码
encodeType: "Base64StdEncoding" # 编码类型,传空字符串,则不开启编码
userProperties:
"$where": "where $Qos = 1 AND K1 = v1 OR K2 = v2"
- type: cos #cos触发器
function: index
parameters:
qualifier: $DEFAULT # 别名配置
bucket: cli-appid.cos.ap-beijing.myqcloud.com
filter:
prefix: filterdir/
suffix: .jpg
events: 'cos:ObjectCreated:*'
enable: true
- type: cmq # CMQ Topic 触发器
function: index
parameters:
qualifier: $DEFAULT # 别名配置
name: test-topic-queue
enable: true
filterType: 1 # 消息过滤类型,1为标签类型,2为路由匹配类型
filterKey: # 当 filterType 为1时表示消息过滤标签,当 filterType 为2时表示 Binding Key
- key1
- key2
- type: ckafka # ckafka触发器
function: index
parameters:
name: ckafka-xxx-xxx
qualifier: $DEFAULT
instanceId: ckafka-xxx
topic: testxxx
maxMsgNum: 999
retry: 10000
offset: latest
timeout: 60
consumerGroupName: ckafkaxxx #消费组名称,不传时将自动创建新消费组
easConfig:
userName: ckafka-xxxx
password: "******"
enable: true
- type: cls # cls 触发器
function: index
parameters:
qualifier: '$DEFAULT' # 别名配置
topicId: 'xxx-228b-42f5-aab5-7f740cc2fb11' # 日志主题 ID
maxWait: 60 # 最长等待时间,单位秒
enable: true
- type: mps
function: index
parameters:
qualifier: $DEFAULT # 别名配置
type: EditMediaTask # 事件类型
enable: true
- type: apacheKafka # 自定义触发器
function: index
parameters:
name: xxx-apache-kafka-xxx #触发器名称
enable: true
topicName: testxxx #要订阅的主题
bootstrapServers:
- x.xxx.92.106:9006 #需连接消费的自建 Apache Kafka 实例地址,支持IP+端口或域名+端口
offset: latest
maxMsgNum: 1
timeout: 1
consumerGroupName: testxx #消费组名称
retry: 10
easConfig: #配置Apache Kafka 实例允许消费的账号密码信息及安全协议、身份验证机制
username: xxx
password: xxx
securityProtocol: SASL_PLAINTEXT
mechanism: PLAIN

配置描述

各项配置的具体描述,请参见 云函数 SCF 组件配置描述,以确保格式保持一致。