文档中心 云函数 开发者工具 SCF 命令行工具 腾讯云无服务器应用模型

腾讯云无服务器应用模型

最近更新时间:2019-08-15 12:23:31

简介

腾讯云无服务器应用模型(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 用通过 YAMLJSON 格式的模板文件来描述 Serverless 应用。

TCSAM 模板

注意:

TCSAM 中的所有属性名称区分大小写

Resources:
  ProjectTest: # namespace name
    Type: 'TencentCloud::Serverless::Namespace'
    TestFunction: # function name
      Type: 'TencentCloud::Serverless::Function'
      Properties:
        Handler: index.handler
        Runtime: Python2.7
        CodeUri: './' 
      Events:
        crontrigger: # trigger name
          Type: timer # api gateway trigger
          Properties:
              Cron: '*/5 * * * *'

全局部分

全局部分定义了 TCSAM 模板中的全局属性,这些属性会被 TencentCloud::Serverless::FunctionTencentCloud::Serverless::Api资源继承。
示例:

Globals:
  Function:
    Runtime: Python2.7
    Timeout: 30
    Handler: index.handler
    Environment:
      Variables:
        DB_NAME: mydb

资源类型

TencentCloud::Serverless::Namespace

云函数命名空间,命名空间由一组函数组成。

TencentCloud::Serverless::Function

描述云函数以及触发该函数的事件源,云函数属于某个命名空间。

属性

属性名称 类型 是否必填 描述
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。
Policies String|String列表|CAM Policy 文档对象|CAM Policy 文档对象列表 指定函数需要的访问管理(Cloud Access Management,CAM) 预设策略名称,或自定义策略。如 Role 为默认角色或缺省,则策略会被附加到该函数的默认角色上。如果设置了自定义的 Role 属性,则 Policies 属性会被忽略。
Environment 环境变量对象 为函数配置 环境变量
Events 事件源对象 用于定义触发此函数的事件源。
VpcConfig VPC 配置对象 用于配置云函数访问 VPC。

示例:TencentCloud::Serverless::Namespace 与 TencentCloud::Serverless::Function

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 即可,部署时将会部署多个函数。

如下所示,部署时会自动部署 “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

事件源类型

Timer

描述类型为 定时触发器 的对象。

属性

属性名称 类型 是否必填 描述
CronExpression String 函数被触发的时间,支持指定的 Cron 表达式
Enable Boolean 是否启用触发器。

示例:Timer 事件源对象

Type: Timer
Properties:
  CronExpression: '*/5 * * * *'
  Enable: true

COS

描述类型为 对象存储触发器 的对象。

属性

属性名称 类型 是否必填 描述
Bucket String COS 对象存储存储桶 bucket 名称。
Events String 触发云函数的事件,可选值为 cos:ObjectCreated:*cos:ObjectCreated:Putcos:ObjectCreated:Postcos:ObjectCreated:Copycos:ObjectCreated:Appendcos:ObjectCreated:CompleteMultipartUploadcos:ObjectRemove:*cos:ObjectRemove:Deletecos:ObjectRemove:DeleteMarkerCreated
Filter COS 通知过滤器 触发事件的过滤器规则。
Enable Boolean 是否启用触发器。

示例:COS 事件源对象

Type: COS
Properties:
  Bucket: mycosbucket
  Events: cos:ObjectCreated:*
  Filter:
    Prefix: 'filterdir/'
    Suffix: '.jpg'
  Enable: true

API

描述类型为 API 网关触发器 的对象。

说明:

如果在描述文件中同时存在 API 资源对象或 API 网关触发器事件源对象时,API 资源对象将生效。

属性

属性名称 类型 是否必填 描述
StageName String 发布阶段的名称,API 网关用作调用统一资源标识符(URI)中的第一个路径段。可选值为:testprepubrelease。默认如果为新 API 服务时为 release,已有 API 服务时为test
HttpMethod String HTTP 请求方法,可选值为:ANYGETPOSTPUTDELETEHEAD,默认值为ANY
IntegratedResponse Boolean 是否启用集成响应,默认值为false
Enable Boolean 是否启用触发器。
ServiceId String 网关服务 ID。在 SCF CLI 或 VS Code 插件部署时,在 template.yaml 中未填写 ServiceId,系统会新建网关并返回相关信息。您可以将此信息里的 ServiceId 填写到 template.yaml ,之后部署不会重复新建。

示例:API 事件源对象

apigw-trigger: # api gateway service name
    Type: APIGW # trigger type
    Properties:
        StageName: release
        HttpMethod: ANY
        IntegratedResponse: true
        Enable: true
        ServiceId: service-9gz3r6bo

CMQ

描述类型为 CMQ 消息队列触发器 的对象。

属性

属性名称 类型 是否必填 描述
Name String 消息队列名称。
Enable Boolean 是否启用触发器。

示例:CMQ 事件源对象

Events:
  Type: CMQ
  Properties:
    Name: test-topic-queue
    Enable: true

CKafka

描述类型为 CKafka 触发器 的对象。

属性

属性名称 类型 是否必填 描述
Name String 消息队列 CKafka 名称。
Topic String 消息队列 CKafka 主题 Topic 名称。
MaxMsgNum Integer 最大批量消息数,范围1 - 1000。
Offset String 起始 offset 位置,默认为latest
Enable Boolean 是否启用触发器。

示例:CKafka 事件源对象

Events:
  Type: Ckafka
  Properties:
    Name: ckafka-2o10hua5
    Topic: test
    MaxMsgNum: 999
    Offset: latest
    Enable: true

属性类型

事件源对象

描述触发函数的事件源的对象。

属性

属性名称 类型 是否必填 描述
Type String 事件类型。 事件源类型包括 TimerCOSAPICMQ。有关所有类型的更多信息, 请参阅 事件源类型
Properties * 描述此事件映射属性的对象。必须符合定义的类型。有关所有类型的更多信息,请参阅 事件源类型

示例:事件源对象

Events:
  Type: Timer
  Properties:
    CronExpression: '*/5 * * * *'
    Enable: true

VPC 配置对象

VPC 配置对象包含的属性包括:VpcIdSubnetId属性。它们所代表的含义参考 VPC Config 对象

属性名称 类型 是否必填 描述
VpcId String VPC ID。
SubnetId String 属于 VPC 内的子网 ID。

示例:VPC 配置对象

VpcConfig:
  VpcId: 'vpc-qdqc5k2p'
  SubnetId: 'subnet-pad6l61i'

环境变量对象

环境变量对象描述了函数可以配置的环境变量属性,环境变量配置为一系列的键值对。

属性名称 类型 描述
Variables StringString 的映射 定义环境变量的字符串对字符串映射,其中变量名为 key,变量值为 value。变量名限制为字母与数字组合,且第一个字符需要为字母。变量值定义为字母与数字及特殊字符 _(){}[]$*+-\/"#',;.@!? 的组合。

示例:环境变量对象

Environment:
  Variables:
    MYSQL_USER: root
    MYSQL_PASS: pass

数据类型

COS 对象

通过指定BucketKey指定对象存储位置,用于指向代码存储位置。
示例:

CodeUri:
  Bucket: mycodebucket
  Key: '/code.zip'

CodeUri

CodeUri 用来指定代码存储的位置,可以指定为本地文件系统中的文件、文件夹、zip 包或对象存储 COS 中的内容。
示例:

CodeUri: index.py
CodeUri: ./build
CodeUri: /user/code/func/build.zip

COS 通知过滤

用于指定对象存储通知时的过滤配置,由前缀过滤参数和后缀过滤参数组合而成。
示例:

Filter:
  Prefix: 'filterdir/'
  Suffix: '.jpg'