腾讯云无服务器应用模型(Tencent Cloud Serverless Application Model,TCSAM),是用于在腾讯云上定义 Serverless 应用的模型。
Serverless 应用是由事件触发运行的应用,一个典型的 Serverless 应用由一个或多个腾讯云云函数 SCF 组成。例如云函数由向 腾讯云对象存储 COS 上传对象文件操作、向 腾讯云消息队列 CMQ 中投递消息等事件触发。这些函数可以独立运行,也可以使用其它资源,例如腾讯云对象存储 COS,腾讯云数据库服务 TencentDB。同时,最基本的 Serverless 应用可以只有一个函数。
说明:
- 本文中的 “一定”,“不一定”,“必填”,“将要”,“最好不要”,“应该”,“不应该”,“推荐”,“可能”,和 “可选” 按照 RFC 2119 中的描述进行解释。
- 本文中 TCSAM 根据 Apache 2.0 许可证 授权,其版本为2018-11-11。
TCSAM 用通过 YAML 或 JSON 格式的模板文件来描述 Serverless 应用。
注意:TCSAM 中的所有属性名称区分大小写。
Resources:
default:
Type: TencentCloud::Serverless::Namespace
hello_world:
Type: TencentCloud::Serverless::Function
Properties:
CodeUri: ./
Type: Event
Description: This is a template function
Handler: index.main_handler
MemorySize: 128
Runtime: Python3.6
Timeout: 3
Events:
timer: ## 触发器名
Type: Timer ## 定时触发器
Properties:
CronExpression: '*/5 * * * *'
Enable: True
全局部分定义了 TCSAM 模板中的全局属性,这些属性会被 TencentCloud::Serverless::Function
、TencentCloud::Serverless::Api
资源继承。
示例:
Globals:
Function:
Runtime: Python2.7
Timeout: 30
Handler: index.handler
Environment:
Variables:
DB_NAME: mydb
云函数命名空间,命名空间由一组函数组成。
描述云函数以及触发该函数的事件源,云函数属于某个命名空间。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
Handler | String |
是 | 云函数的入口执行方法。 |
Runtime | String |
是 | 云函数的运行时环境。可选值为:Python2.7、Python3.6、Nodejs6.10、Nodejs8.9、PHP5、PHP7、Golang1、Java8。 |
CodeUri | String |
是 | 代码位置。支持本地文件、本地目录、本地 zip 文件、对象存储 COS bucket 及 object 等形式,更多信息参考 CodeUri。 |
Description | String |
否 | 云函数的描述。 |
MemorySize | Integer |
否 | 函数执行时分配的内存大小,单位是 MB,默认为128(MB),按128递增。 |
Timeout | Integer |
否 | 函数在被终止之前可以运行的最长时间,单位是秒,默认为3秒。 |
Role | String |
否 | 通过填写角色名称,为函数指定运行角色。 如果此字段缺省,将为函数创建一个默认的角色 QCS_SCFExcuteRole。 |
Environment | 环境变量对象 | 否 | 为函数配置 环境变量。 |
Events | 事件源对象 | 否 | 用于定义触发此函数的事件源。 |
VpcConfig | VPC 配置对象 | 否 | 用于配置云函数访问 VPC。 |
ProjectTest: # 命名空间名称
Type: 'TencentCloud::Serverless::Namespace'
TestFunction: # 函数名
Type: 'TencentCloud::Serverless::Function'
Properties:
Handler: index.handler
Runtime: Python2.7
CodeUri: './'
Description: Cron function
Role: QCS_SCFExcuteRole
Timeout: 10
MemorySize: 512
注意:
- 如果有多个函数,可以在函数目录外部新建一个 template.yaml ,在 yaml 里指定每个函数的 CodeUri 即可,部署时将会部署多个函数。
- VS Code 插件尚未支持同时部署多个函数,请依次进行单个函数的部署。
如下所示,部署时会自动部署 “func1” ,“func2”两个函数。
Globals:
Function:
Timeout: 10
MemorySize: 128
Runtime: Python2.7
Resources:
default:
Type: TencentCloud::Serverless::Namespace
func1:
Type: TencentCloud::Serverless::Function
Properties:
CodeUri: ./func1
Description: This is a template function
Handler: index.main_handler
func2:
Type: TencentCloud::Serverless::Function
Properties:
CodeUri: ./func2
Description: This is a template function
Handler: index.main_handler
描述类型为 定时触发器 的对象。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
CronExpression | String |
是 | 函数被触发的时间,支持指定的 Cron 表达式。 |
Message | String |
否 | 自定义触发附加消息,可以在云函数入参 event 中获取。 |
Enable | Boolean |
否 | 是否启用触发器。 |
Events:
timername:
Type: Timer
Properties:
CronExpression: '*/5 * * * *'
Message:"这是一条附加消息"
Enable: True
描述类型为 对象存储触发器 的对象。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
Bucket | String |
是 | COS 对象存储存储桶 bucket 名称。 |
Events | String |
是 | 触发云函数的事件,可选值为 cos:ObjectCreated:* 、cos:ObjectCreated:Put 、cos:ObjectCreated:Post 、cos:ObjectCreated:Copy 、cos:ObjectCreated:Append 、cos:ObjectCreated:CompleteMultipartUpload 、cos:ObjectRemove:* 、cos:ObjectRemove:Delete 、cos:ObjectRemove:DeleteMarkerCreated 。 |
Filter | COS 通知过滤器 | 否 | 触发事件的过滤器规则。 |
Enable | Boolean |
否 | 是否启用触发器。 |
Events:
cli-appid.cos.ap-beijing.myqcloud.com: # full bucket name
Type: COS
Properties:
Bucket: cli-appid.cos.ap-beijing.myqcloud.com
Filter:
Prefix: filterdir/
Suffix: .jpg
Events: cos:ObjectCreated:*
Enable: True
Bucket name 及 bucket 字段的值可前往 COS 控制台 查看。
描述类型为 API 网关触发器 的对象。
说明:如果在描述文件中同时存在 API 资源对象或 API 网关触发器事件源对象时,API 资源对象将生效。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
StageName | String |
否 | 发布阶段的名称,API 网关用作调用统一资源标识符(URI)中的第一个路径段。可选值为:test 、prepub 、release 。默认如果为新 API 服务时为 release ,已有 API 服务时为test 。 |
HttpMethod | String |
否 | HTTP 请求方法,可选值为:ANY 、GET 、POST 、PUT 、DELETE 、HEAD ,默认值为ANY 。 |
IntegratedResponse | Boolean |
否 | 是否启用集成响应,默认值为false 。 |
Enable | Boolean |
否 | 是否启用触发器。 |
ServiceId | String |
否 | 网关服务 ID。在 SCF CLI 或 VS Code 插件部署时,在 template.yaml 中未填写 ServiceId,系统会新建网关并返回相关信息。您可以将此信息里的 ServiceId 填写到 template.yaml ,之后部署不会重复新建。 |
Events:
hello_world_apigw: # ${FunctionName} + '_apigw'
Type: APIGW
Properties:
StageName: release
ServiceId:
HttpMethod: ANY
描述类型为 CMQ 消息队列触发器 的对象。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
Name | String |
是 | 消息队列名称。 |
Enable | Boolean |
否 | 是否启用触发器。 |
Events:
topicname: # topic name
Type: CMQ
Properties:
Name: qname
Name 字段的值为 topic 名,可前往 CMQ 控制台 获取信息。
描述类型为 CKafka 触发器 的对象。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
Name | String |
是 | 消息队列 CKafka ID。 |
Topic | String |
是 | 消息队列 CKafka 主题 Topic 名称。 |
MaxMsgNum | Integer |
是 | 最大批量消息数,范围1 - 1000。 |
Offset | String |
否 | 起始 offset 位置,默认为latest 。 |
Enable | Boolean |
否 | 是否启用触发器。 |
Events:
ckafka-name:
Type: Ckafka
Properties:
Name: ckafka-XXXXX
Topic: test_scf
MaxMsgNum: 999
Offset: latest
Enable: true
Name 的字段为 CKafka ID,Topic 字段的值为 topic name 。可前往 CKafka 控制台 查看对应信息。
描述触发函数的事件源的对象。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
Type | String |
是 | 事件类型。 事件源类型包括 Timer、COS、API、CMQ。有关所有类型的更多信息, 请参阅 事件源类型。 |
Properties | * | 是 | 描述此事件映射属性的对象。必须符合定义的类型。有关所有类型的更多信息,请参阅 事件源类型。 |
Events:
Type: Timer
Properties:
CronExpression: '*/5 * * * *'
Message:"这是一条附加消息"
Enable: true
VPC 配置对象包含的属性包括:VpcId
、SubnetId
属性。它们所代表的含义参考 VPC Config 对象。
属性名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
VpcId | String |
是 | VPC ID。 |
SubnetId | String |
是 | 属于 VPC 内的子网 ID。 |
VpcConfig:
VpcId: 'vpc-qdqc5k2p'
SubnetId: 'subnet-pad6l61i'
环境变量对象描述了函数可以配置的环境变量属性,环境变量配置为一系列的键值对。
属性名称 | 类型 | 描述 |
---|---|---|
Variables | String 到 String 的映射 |
定义环境变量的字符串对字符串映射,其中变量名为 key,变量值为 value。变量名限制为字母与数字组合,且第一个字符需要为字母。变量值定义为字母与数字及特殊字符 _(){}[]$*+-\/"#',;.@!? 的组合。 |
Environment:
Variables:
MYSQL_USER: root
MYSQL_PASS: pass
通过指定 Bucket
、Key
指定对象存储位置,用于指向代码存储位置。
示例:
CodeUri:
Bucket: mycodebucket
Key: '/code.zip'
CodeUri 用来指定代码存储的位置,可以指定为本地文件系统中的文件、文件夹、zip 包。
示例:
CodeUri: index.py
CodeUri: ./build
CodeUri: /user/code/func/build.zip
用于指定对象存储通知时的过滤配置,由前缀过滤参数和后缀过滤参数组合而成。
示例:
Filter:
Prefix: 'filterdir/'
Suffix: '.jpg'
本页内容是否解决了您的问题?