# serverless.yml
app: multi-scf
stage: dev
name: demo
component: multi-scf
inputs:
src:
src: ./ # 指定当前需要上传的包含工作流配置文件的目录
exclude:
- .env
region: ap-guangzhou # 云函数所在区域
runtime: Nodejs12.16
namespace: default
memorySize: 128
type: event # 函数类型
timeout: 3
isAutoPublish: false # 是否每次部署时,自动发布函数版本
publishDescription: Created By Serverless CLI # 自动发布版本的描述
environments:
- key: NODE_ENV
value: development
tags:
- key: slstest
value: slstest
functions:
index:
handler: app.index
userList:
handler: app.userList
memorySize: 256
timeout: 10
user-detail:
type: web
nodeType: CPU # 资源类型, 可选GPU/CPU
nodeSpec: "" # 资源配置, nodeType为GPU需配置
image: # 镜像配置
registryId: tcr-xxx # 容器镜像服务实例 ID,企业版必须
imageUrl: abc.com:latest@sha256:xxx # 镜像版本 URL
imageType: personal # 镜像类型
command: node index.js # 容器启动命名
args: test # 容器启动参数
triggers:
- type: timer
function: index
parameters:
name: timer1
cronExpression: '*/5 * * * * * *' # 每5秒触发一次
enable: true
argument: argument # 额外的参数
- type: cos
function: index
parameters:
bucket: bucket-name
filter:
prefix: filterdir/
suffix: .jpg
events: 'cos:ObjectCreated:*'
enable: true
- type: apigw
parameters:
serviceName: serverless
protocols:
- https
- http
id: service-xxx # 如果不配置,会自动创建
apis:
- path: /
method: GET
function: index
- path: /{uid}
method: POST
function: userList
param:
- name: uid
position: PATH
required: true
type: string
defaultValue: 0
desc: user id
- type: cmq
function: index
parameters:
name: test-topic-queue
enable: true
filterType: 1
filterKey:
- key1
- key2
- type: ckafka
function: index
parameters:
name: ckafka-xxx
topic: test
maxMsgNum: 999
retry: 10000
offset: latest
timeout: 60
enable: true
- type: cls
function: index
parameters:
topicId: 'xxx-228b-42f5-aab5-7f740cc2fb11' # 日志主题 ID
maxWait: 60 # 最长等待时间,单位秒
enable: true
- type: mps
function: index
parameters:
type: EditMediaTask # 事件类型
enable: true
主要的参数
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
src | 是 | Src | 指定当前需要上传的包含工作流配置文件的目录 | |
region | 否 | string | ap-guangzhou |
工作流所在区域 |
runtime | 否 | string | Nodejs12.16 |
运行环境 |
memorySize | 否 | number | 128 |
运行内存 |
timeout | 否 | number | 3 |
超时时间 |
functions | 否 | FunctionObject[] | '' |
函数配置 |
triggers | 否 | Trigger[] | '' |
触发器配置 |
ignoreTriggers | 否 | boolean | false |
是否忽略触发器,如果设置为 true ,triggers 参数将不起作用 |
isAutoPublish | 否 | boolean | false |
是否自动发布函数版本 |
publishDescription | 否 | string | Created by Serverless |
发布版本描述 |
项目代码配置
参数名称 | 是否必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
src | 否 | string | 上传代码目录 | |
exclude | 否 | string[] | 不包含的文件或路径, 遵守 glob 语法 |
functions:
index: # 唯一 Key
handler: app.index
# ...
userList: # 唯一 Key
handler: app.userList
# ...
部署后的函数名称默认会基于配置的唯一 Key
,进行规范化拼接,规则为:``${name}-${stage}-${app}-${Key},比如下面配置生成的函数名称为
demo-dev-multi-scf-index`:
app: multi-scf
stage: dev
name: demo
component: multi-scf
functions:
index:
handler: app.index
如果想要自定义函数名称,直接配置name
属性就好,比如:
functions:
index: # 唯一 Key
name: indexFunc
handler: app.index
函数配置为应用中唯一 Key
作为属性,然后 Key
属性值为 Function
对象,
Function
对象支持配置属性如下:
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
handler | 否 | string | 处理方法名称 | |
type | 否 | string | event |
函数类型,支持:event、web |
nodeType | 否 | string | CPU |
资源类型,支持:GPU、CPU,当nodeType=GPU时,必须指定image镜像配置 |
nodeSpec | 否 | string | GPU资源配置,支持:计算型GN7(GN7.LARGE20,GN7.2XLARGE40,GN7.5XLARGE80),渲染型GN7vw(GN7vw.LARGE16,GN7vw.2XLARGE32,GN7vw.2XLARGE32,GN7vw.4XLARGE64) | |
name | 否 | string | 函数名称 | |
src | 否 | string | 代码目录,相对于 Src 指定目录 | |
role | 否 | string | 运行角色。 | |
description | 否 | string | 描述 | |
memorySize | 否 | number | 128 |
运行内存,单位 MB ,范围 64、128-3072,以 128 为阶梯 |
timeout | 否 | number | 3 |
超时时间,单位为秒,可选值范围 1-900 秒 |
environments | 否 | Environment[] | 环境变量 | |
vpc | 否 | Vpc | 私有网络配置 | |
layers | 否 | Layer[] | 层 | |
cls | 否 | Cls | CLS 日志配置 | |
tags | 否 | Tag[] | 标签设置 | |
cfs | 否 | Cfs[] | 文件系统挂载配置,用于云函数挂载文件系统。 | |
publicAccess | 否 | number | true |
是否开启公网访问 |
eip | 否 | boolean | false |
固定出口 IP。默认为 false,即不启用。 |
asyncRunEnable | 否 | boolean | false |
是否启用异步执行,默认最大支持 12小时 ,配置为 true 时,cls 配置必须。此参数只有在函数创建时才有效 |
traceEnable | 否 | boolean | false |
是否启用状态追踪,如果要配置为 true ,必须配置 asyncRunEnable 为 true |
installDependency | 否 | boolean | false |
是否自动在线安装依赖 |
eip | 否 | boolean | false |
是否固定出口 IP |
image | 否 | Image | 镜像配置 | |
msgTTL | 否 | number | 21600 |
消息保留时间,单位 秒 |
retryNum | 否 | number | 2 |
重试次数 |
重要字段说明
- name - 云函数名称,字段字符需满足
只能包含字母、数字、下划线、连字符,以字母开头,以数字或字母结尾,2~60个字符
- runtime - 目前仅支持:
Nodejs6.10,Nodejs8.9,Nodejs10.15,Nodejs12.16,Nodejs14.18,Nodejs16.13,Python2.7,Python3.6,Python3.7,PHP5,PHP7,PHP7.4,PHP8.0,Go1,Java8,Java11 和 CustomRuntime
,使用CustomRuntime
部署参考 CustomRuntime
代码目录
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
src | 是 | string | 代码路径。与 object 不能同时存在。 | |
exclude | 否 | string[] | 不包含的文件或路径, 遵守 glob 语法 | |
bucket | 否 | string | 存储桶名称 | |
object | 否 | string | 部署的代码在存储桶中的路径。 |
注意:如果配置了
src
,表示部署src
参数指定目录的代码并压缩成zip
后上传到对应的存储桶中;如果配置了object
,表示获取对应存储桶中object
对应的代码进行部署
环境变量
参数名称 | 必须 | 类型 | 描述 |
---|---|---|---|
key | 是 | string | 键 |
value | 是 | string | 值 |
标签
参数名称 | 必须 | 类型 | 描述 |
---|---|---|---|
key | 是 | string | 键 |
value | 是 | string | 值 |
私有网络
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
vpcId | 否 | string | 私有网络 的 Id |
subnetId | 否 | string | 子网的 Id |
层配置
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
name | 是 | string | 层名称 |
version | 是 | number | 层版本号 |
函数日志
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
logsetId | 否 | string | 日志集 ID |
topicId | 否 | string | 日志主题 ID |
文件系统,使用文件系统必须配置私有网络,并保证 cfs 文件系统与云函数在同一个私有网络下。
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
cfsId | 是 | string | 文件系统实例 id |
mountInsId | 是 | string | 文件系统挂载点 id |
localMountDir | 是 | string | 本地挂载点,云函数目录 |
remoteMountDir | 是 | string | 远程挂载点,CFS 目录 |
镜像相关配置:
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
imageUrl | 是 | string | 镜像版本 URL | |
imageType | 否 | string | personal |
镜像类型,支持:personal、enterprise、public |
registryId | 否 | string | [容器镜像服务][tcr] 实例 ID,使用企业版镜像时必须 | |
command | 否 | string | 容器启动命令,默认使用镜像中的 Entrypoint 或者 CMD |
|
args | 否 | string | 容器启动参数,默认使用惊醒中的 CMD |
注意:
imageUrl
拼接格式为 <仓库地址>:<镜像版本>@<镜像ID(sha256)>
,如下:
ccr.ccs.tencentyun.com/sls-scf/nodejs_test:latest@sha256:xxx
触发器,触发器配置为数组
支持以下触发器:
timer - 定时触发器
apigw - API 网关触发器
cos - COS 触发器
cmq - CMQ 主题订阅触发器
ckafka - CKafka 触发器
cls - CLS 触发器
mps - MPS 触发器
注意:对于
API 网关触发器
,如果没有配置 网关服务 ID (serviceId),则自动创建一个 API 网关服务,对于其他触发器仅执行配置触发器,不涉及服务资源创建。
参考 官方触发器配置描述
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
function | 是 | string | 触发器关联函数 | |
parameters | 是 | object | 根据触发器类型,参考以下触发器参数表。 |
注意:
function
值为 FunctionObject 的唯一Key
值
参考: https://cloud.tencent.com/document/product/583/9708
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
name | 是 | string | 触发器名称 | |
cronExpression | 是 | string | 触发时间,为 Cron表达式 | |
qualifier | 否 | string | $DEFAULT |
触发版本,默认为 $DEFAULT ,即 默认流量 |
argument | 否 | object | 入参参数。 | |
enable | 否 | boolean | false |
触发器是否启用 |
参考: https://cloud.tencent.com/document/product/583/9707
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
qualifier | 否 | string | $DEFAULT |
触发版本,默认为 $DEFAULT ,即 默认流量 |
bucket | 是 | string | 配置对应COS存储桶适用于XML API的访问域名,仅支持选择同地域下的 COS 存储桶 | |
filter | 是 | CosFilter | COS 文件名的过滤规则 | |
events | 是 | string | COS 的事件类型 | |
enable | 否 | boolean | false |
触发器是否启用 |
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
qualifier | 否 | string | $DEFAULT |
触发版本,默认为 $DEFAULT ,即 默认流量 |
name | 是 | string | CMQ Topic 主题队列名称 | |
filterType | 否 | number | 消息过滤类型,1 为标签类型,2 为路由匹配类型 | |
filterKey | 否 | string[] | 当 filterType 为 1 时表示消息过滤标签,当 filterType 为 2 时表示 Binding Key | |
enable | 否 | boolean | false |
触发器是否启用 |
注意:添加 CMQ 触发器,需要给
SLS_QcsRole
添加QcloudCMQFullAccess
策略。
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
qualifier | 否 | string | $DEFAULT |
触发版本,默认为 $DEFAULT ,即 默认流量 |
name | 是 | string | 配置连接的 CKafka 实例,仅支持选择同地域下的实例。 | |
topic | 是 | string | 支持在 CKafka 实例中已经创建的 Topic。 | |
maxMsgNum | 是 | number | 100 |
5 秒内每汇聚 maxMsgNum 条 Ckafka 消息,则触发一次函数调用 |
offset | 是 | string | latest |
offset 为开始消费 Ckafka 消息的位置,目前只能填写 latest |
retry | 是 | number | 10000 |
重试次数,函数调用失败时的最大重试次数。 |
timeout | 是 | number | 60 |
单次触发的最长等待时间,最大 60 秒 |
enable | 否 | boolean | false |
触发器是否启用 |
注意:添加 CKafka 触发器,需要给
SLS_QcsRole
添加QcloudCKafkaFullAccess
策略。
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
environment | 否 | string | release |
发布的环境,填写 release 、test 或 prepub ,不填写默认为release |
id | 否 | string | 网关 Service ID(不传入则新建一个 Service) | |
protocols | 否 | string[] | ['http'] |
前端请求的类型,如 http,https,http 与 https |
netTypes | 否 | string[] | ['OUTER'] |
网络类型,如 ['OUTER'] , ['INNER'] 与['OUTER', 'INNER'] |
serviceName | 否 | string | 网关 API 名称。如果不传递则默认新建一个名称与触发器名称相同的 Apigw API 名称。 | |
description | 否 | string | 网关 API 描述 | |
apis | 是 | object[] | 参考 endpoint 参数。 |
注意:如果配置多个 API 网关触发器,需要配置不同的
serviceName
参考: https://cloud.tencent.com/document/product/628/14886
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
path | 是 | string | API 的前端路径,如/path。 | |
method | 否 | string | API 的前端请求方法,如 GET | |
apiId | 否 | string | API ID。如果不传递则根据 path 和 method 创建一个,传递了直接忽略 path 和 method 参数。 | |
apiName | 否 | string | API 名称 | |
description | 否 | string | API 描述 | |
enableCORS | 否 | boolean | false |
是否需要开启跨域 |
responseType | 否 | string | 自定义响应配置返回类型,现在只支持 HTML、JSON、TEST、BINARY、XML(此配置仅用于生成 API 文档提示调用者)。 | |
serviceTimeout | 否 | number | 15 |
API 的后端服务超时时间,单位是秒。 |
param | 否 | Parameter | 前端参数 | |
function | 否 | Function | SCF 配置 | |
usagePlan | 否 | UsagePlan | 使用计划 | |
auth | 否 | Auth | API 密钥配置 | |
isBase64Encoded | 否 | boolean | false |
是否开启 Base64 编码,只有后端为 scf 时才会生效 |
isBase64Trigger | 否 | boolean | false |
是否开启 Base64 编码的 header 触发,只有后端为 scf 时才会生效 |
base64EncodedTriggerRules | 否 | Base64Rule[] | [] | Header 触发 Base64 编码规则,总规则数不能超过 10,只有 isBase64Trigger 设置为 true 才有效 |
前端参数
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
name | 否 | string | API 的前端参数名称。 | |
position | 否 | string | API 的前端参数位置。当前仅支持 PATH、QUERY、HEADER | |
required | 否 | boolean | API 的前端参数是否必填,true:表示必填,false:表示可选。 | |
type | 否 | string | API 的前端参数类型,如 string、Int 等。 | |
defaultValue | 否 | string | API 的前端参数默认值。 | |
desc | 否 | string | API 的前端参数备注。 |
SCF 配置
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
isIntegratedResponse | 否 | boolean | false |
是否启用 SCF 集成响应。 |
functionQualifier | 否 | string | $DEFAULT |
触发器关联的 SCF 版本 。 |
使用计划
参考: https://cloud.tencent.com/document/product/628/14947
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
usagePlanId | 否 | string | 用户自定义使用计划 ID |
usagePlanName | 否 | string | 用户自定义的使用计划名称 |
usagePlanDesc | 否 | string | 用户自定义的使用计划描述 |
maxRequestNum | 否 | number | 请求配额总数,如果为空,将使用-1 作为默认值,表示不开启 |
API 密钥配置
参考: https://cloud.tencent.com/document/product/628/14916
参数名称 | 类型 | 描述 |
---|---|---|
secretName | string | 密钥名称 |
secretIds | string | 密钥 ID |
Header 触发 Base64 编码规则,总规则数不能超过 10,只有 isBase64Trigger
设置为 true
才有效
参数名称 | 类型 | 描述 |
---|---|---|
name | string | 进行编码触发的 header,可选值 "Accept"和"Content_Type" 对应实际数据流请求 header 中的 Accept 和 Content-Type |
value | string[] | 进行编码触发的 header 的可选值数组, 数组元素的字符串最大长度为 40,元素可以包括数字,英文字母以及特殊字符,特殊字符的可选值为: . + * - / _ |
例如 value
可以配置为:
value:
- application/zip
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
qualifier | 否 | string | $DEFAULT |
触发版本,默认为 $DEFAULT ,即 默认流量 |
topicId | 是 | string | CLS 日志主题 ID | |
maxWait | 否 | number | 60 |
最长等待时间,单位秒 |
enable | 否 | boolean | false |
触发器是否启用 |
注意:添加 CLS 触发器,需要给
SLS_QcsRole
添加QcloudCLSFullAccess
策略。
参数名称 | 必选 | 类型 | 默认值 | 描述 |
---|---|---|---|---|
qualifier | 否 | string | $DEFAULT |
触发版本,默认为 $DEFAULT ,即 默认流量 |
type | 是 | string | 事件类型。WorkflowTask - 工作流任务 ,EditMediaTask - 视频编辑任务 |
|
enable | 否 | boolean | false |
触发器是否启用 |
注意:添加 MPS 触发器,需要给
SLS_QcsRole
添加QcloudMPSFullAccess
策略。
注意:开启 API 网关 Base64 编码的后端必须是
云函数
如果需要开启 API 网关 Base64 编码,必须配置 isBase64Encoded
为 true
,此时每次请求的请求内容都会被 Base64 编码后再传递给云函数。如果想要部分请求 Base64 编码,可以通过配置 isBase64Trigger
为 true
,配置 base64EncodedTriggerRules
Header 触发规则,此时 API 网关将根据触发规则对请求头进行校验,只有拥有特定 Content-Type 或 Accept 请求头的请求会被 Base64 编码后再传递给云函数,不满足条件的请求将不进行 Base64 编码,直接传递给云函数。
官方介绍文档:https://cloud.tencent.com/document/product/628/51799