文档首页 > > Sandbox 调试工具使用指南> Sandbox应用示例> HSAM模板参考

HSAM模板参考

分享
更新时间:2020/05/13 GMT+08:00

介绍

HSAM是用于定义华为云serverless应用的模型。

Serverless应用是基于事件驱动的全托管应用。一个典型的serverless应用由一个或多个华为云函数组成。这些云函数可以独立使用,也可以结合其他华为云资源产生触发事件,触发云函数执行。如向华为云OBS上传对象,在华为云SMN上生产消息以及使用华为云API网关调用API等产生触发事件触发函数执行。

HSAM为应用程序管理员提供一种描述Serverless应用业务逻辑的描述语言模型。结合华为云应用编排服务AOS,在华为云中编排和部署Serverless应用所需的资源。

函数工作流本地调试工具HSS(Huawei Serverless Sandbox)使用HSAM在本地开发和测试用户自定义的serverless应用。利用本地调试工具HSS的远程部署功能,应用编排服务AOS可以根据HSAM自动将serverless应用部署到华为云。

规范

格式

华为云HSAM采用YAML格式的模板文件来描述serverless应用。

HSAM定义的serverless应用资源包括:Events、Functions、FunctionStages

其中:

  • Event和Function资源可定义成独立的资源,FunctionStage资源关联一个Function资源和若干Events资源。
  • HSAM支持的Events包括: OBS、DMS、SMN、DIS、LTS、CTS、APIG、TIMER。

模板文件必须在文档根节点中包含SAMversion: 'v1'部分,模板文件包含下面两种类型:Resource类型和事件源类型

示例:华为云HSAM模板

```yaml   
SAMversion: 'v1'
Resources:
   MyFunc1: # Function resource name
    Type: 'HC::Serverless::Function'
    Properties:
      FuncName: testFunc1 
      Description: "This is my Func1" 
      Handler: index.handler 
      Runtime: Python2.7
      MemorySize: 128
      Timeout: 180
      CodeUri: ""
      Code: |
        # -*- coding:utf-8 -*-
        import json
        def handler (event, context):
            output = 'Hello message: ' + json.dumps(event)
            return output
      Xrole: allService
      Environment:
        Variables:
          key1: value1
          key2: value2
   ObsEvt1: # OBS event resource name
    Type: OBS
    Properties:
      Bucket: my-photo-bucket
      EventType:
        - ObjectCreated:*
        - ObjectRemoved:*
      Prefix: fss
      Suffix: jpg
   SmnEvt: # SMN event resource name
    Type: SMN
    Properties:
      Topic: topic1
   DmsEvt: # DMS event resource name
    Type: DMS
    Properties:
      ConsumerGroupId: g-92777f57-a42a-401e-829d-4151417c639f
      QueueId: a99e1c82-808a-4d3b-b03a-0e161e514c2c
   LtsEvt: # LTS event resource name
    Type: LTS
    Properties:
      GroupId: fd537073-7ffb-11e8-b63a-286ed488ce71
      GroupName: test-log-group-1
      TopicId: 51acbef6-aa92-11e8-810a-286ed488ce71
      TopicName: lts-topic-aos
   CtsEvt: # CTS event resource name
    Type: CTS
    Properties:
      Name: ctstest
      Operations:
        AOS:
          stack:
            - createStack
            - deleteStack
          quota:
            - updateQuota
        CCE(1.0):
          app:
            - createApp
            - deleteApp
          image:
            - deleteImage
   DisEvt: # DIS event resource name
    Type: DIS
    Properties:
      Stream: dis-test
      BatchSize: 100
      ShardIteratorType: TRIM_HORIZON
      PollingInterval: 30
   ApiEvt: # APIG event resource name
    Type: APIG
    Properties:
      ApiName: testApi
      ApiGroup: my_apigroup
      Auth: IAM
      Protocol: HTTPS
      Timeout: 5000
   TimerEvt: # TIMER event resource name
     Type: TIMER
     Properties:
       Name: my_timer
       Schedule: 3m
       ScheduleType: Rate
       UserEvent: "user data"
   MyFuncStage1: # FunctionStage resource name
    Type: 'HC::Serverless::FunctionStage'
    Properties:
      Function: MyFunc1
      Events:
        TimerEvt
        LtsEvt
        CtsEvt
        ApiEvt
```

HSAM中的所有属性名称都区分大小写。

Resource类型

  • HC::Serverless::Function
  • HC::Serverless::FunctionStage

HC::Serverless::Function

创建serverless应用的云函数资源。

表1 属性

属性名称

类型

描述

FuncName

string

必填

函数的名称

Handler

string

必填

函数的执行入口。 规则:xx.xx,若代码采用在线编辑方式,执行入口可自定义;若采用OBS上传文件方式,函数的执行入口由本地代码文件名称+入口函数名称组成。举例:本地代码文件main.py,入口函数名称为handler,则Handler:main.handler。

Runtime

string

必填

运行时环境。可选值为:Node.js6.10、Node.js8.10、Python2.7、Python3.6、Java8,Go1.8,csharp2.0、csharp2.1。

CodeUri

string

OBS上传文件方式时必填

本地代码文件位置

Code

string

在线编辑方式时必填

函数源码

Description

string

可选

函数的描述

Xrole

string

可选

为函数配置委托

MemorySize

integer

可选

每次函数执行分配的内存大小,单位是MB,有效值为128、256、512、768、1024、1280、1536、1792、2048、2560、3072、3584、4096,默认为128(MB)。

Timeout

integer

可选

函数在被终止之前可以运行的最长时间,单位是秒,范围3~900秒,默认为 3 秒。

Environment

环境变量对象

可选

为函数配置环境变量

示例:HC::Serverless::Function

```yaml
MyFunc1: # Function resource name
    Type: 'HC::Serverless::Function'
    Properties:
      FuncName: testFunc1
      Description: "This is my Func1"
      Handler: index.handler
      Runtime: Python2.7
      MemorySize: 128
      Timeout: 180
      Code: |
        # -*- coding:utf-8 -*-
        import json
        def handler (event, context):
            output = 'Hello message: ' + json.dumps(event)
            return output
      Xrole: allService
      Environment:
        Variables:
          key1: value1
          key2: value2
```

HC::Serverless::FunctionStage

创建FunctionStage资源。FunctionStage资源包含一个函数和若干触发器,也可只包含一个函数。该资源描述函数与触发器的编排关系。

表2 属性

属性名称

类型

描述

Function

string

必填

Function resource名称,关联一个函数。

Events

Events

可选

Event resource列表,关联该函数下的一组触发器。 如果未配置Events属性,则表示函数下没有配置触发器。

示例:HC::Serverless::FunctionStage

```yaml
MyFunc1: # Function resource name
    Type: 'HC::Serverless::Function'
    Properties:
      FuncName: testFunc1
      Description: "This is my Func1"
      Handler: index.handler
      Runtime: Python2.7
      MemorySize: 128
      Timeout: 180
      Code: |
        # -*- coding:utf-8 -*-
        import json
        def handler (event, context):
            output = 'Hello message: ' + json.dumps(event)
            return output
      Xrole: allService
      Environment:
        Variables:
          key1: value1
          key2: value2
SmnEvt: # SMN event resource name
    Type: SMN
    Properties:
      Topic: topic1
MyFuncStage1: # FunctionStage resource name
    Type: 'HC::Serverless::FunctionStage'
    Properties:
      Function: MyFunc1
      Events:
        SmnEvt
```

事件源类型

  • TIMER

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

    表3 属性

    属性名称

    类型

    描述

    Name

    string

    必填

    定时触发器的名称。支持英文,数字,下划线,且只能以英文字母开头,长度不能超过64个字符。

    Schedule

    string

    必填

    定时触发规则。 触发规则详情请参考:使用定时触发器

    ScheduleType

    string

    必填

    定时触发规则类型,支持Rate、Cron两种触发规则类型。

    Status

    Status

    可选

    是否启用定时触发器。 有效值为DISABLED,ACTIVE, 默认启动定时触发器。

    UserEvent

    string

    可选

    附加信息,用户可以自定义。 当输入附加信息时,Timer触发器触发函数执行时,执行事件中将包含附加的信息,附加信息小于2KB

    示例:TIMER事件源对象

    ```yaml
    TimerEvt:
      Type: TIMER
      Properties:
        Name: my_timer
        Schedule: 3m
        ScheduleType: Rate
        UserEvent: "user data"
    ```
  • APIG

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

    表4 属性

    属性名称

    类型

    描述

    ApiName

    string

    必填

    API的名称

    APIGroup

    string

    必填

    API分组的名称

    Auth

    string

    可选

    安全认证类型,支持IAM、APP和NONE三种安全认证类型,若不配置该属性默认采用IAM安全认证。

    Protocol

    string

    可选

    请求协议,支持HTTP、HTTPS两种请求协议。 若不配置该属性默认采用HTTPS请求协议。

    Timeout

    integer

    可选

    后端超时(毫秒),超时时间范围为1~60000毫秒。若不配置该属性默认设置超时时间为5000毫秒。

    示例:APIG事件源对象

    ```yaml
    ApiEvt:
      Type: APIG # trigger type
      Properties:
        ApiName: testApi
        ApiGroup: my_apigroup
        Auth: IAM
        Protocol: HTTPS
        Timeout: 5000
    ```
  • OBS

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

    表5 属性

    属性名称

    类型

    描述

    Bucket

    string

    必填

    OBS桶的名称。

    EventType

    string列表

    必填

    OBS触发事件列表。有效值为["ObjectCreated:", "ObjectCreated:Put", "ObjectCreated:Post", "ObjectCreated:Copy","ObjectCreated:CompleteMultipartUpload", "ObjectRemoved:", "ObjectRemoved:Delete", "ObjectRemoved:DeleteMarkerCreated"]'.

    Prefix

    string

    必填

    前缀过滤配置。 用来限制对以此关键字开头的对象的通知。

    Suffix

    string

    必填

    后缀过滤配置。 用来限制对以此关键字结尾的对象的通知。

    示例:OBS事件源对象

    ```yaml
    ObsEvt:
      Type: OBS
      Properties:
        Bucket: my-photo-bucket
        EventType:
          - ObjectCreated:*
          - ObjectRemoved:*
        Prefix: fss
        Suffix: jpg
    ```
  • SMN

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

    表6 属性

    属性名称

    类型

    描述

    Topic

    string

    必填

    订阅的SMN主题名称。该属性从已创建的SMN主题中获取。

    Remark

    string

    可选

    订阅备注。当该属性未配置时,采用默认值APItest。

    示例:SMN事件源对象

    ```yaml
    SmnEvt:
      Type: SMN
      Properties:
        Topic: topic1
    ```
  • DMS

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

    表7 属性

    属性名称

    类型

    描述

    ConsumerGroupId

    ConsumerGroupId

    必填

    ConsumerGroupId

    QueueId

    string

    必填

    DMS队列ID。该属性从已创建的DMS队列中获取。

    PollingInterval

    integer

    可选

    拉取周期为DMS触发器轮询消息的间隔时间。当该属性未配置时,采用默认值30。

    示例:DMS事件源对象

    ```yaml
    DmsEvt:
      Type: DMS
      Properties:
        ConsumerGroupId: g-92777f57-a42a-401e-829d-4151417c639f
        QueueId: a99e1c82-808a-4d3b-b03a-0e161e514c2c
        PollingInterval: 30
    ```
  • DIS

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

    表8 属性

    属性名称

    类型

    描述

    Stream

    string

    必填

    通道名称。该属性从已创建的DIS通道中获取。

    BatchSize

    integer

    可选

    批处理大小,有效范围为1到10000。当该属性未配置时,采用默认值100。

    ShardIteratorType

    string

    可选

    在流中开始读取数据的位置,支持TRIM_HORIZON,LATEST。当该属性未配置时,采用默认值TRIM_HORIZON。

    PollingInterval

    integer

    可选

    拉取流数据的周期(秒),有效范围为1到60秒。当该属性未配置时,采用默认值30。

    示例:DIS事件源对象

    ```yaml
    DisEvt:
      Type: DIS
      Properties:
        Stream: dis-test
        BatchSize: 100
        ShardIteratorType: TRIM_HORIZON
        PollingInterval: 30
    ```
  • LTS

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

    表9 属性

    属性名称

    类型

    描述

    GroupId

    string

    必填

    LTS日志组ID。该属性从已创建的LTS日志组中获取。

    GroupName

    string

    必填

    LTS日志组名称。该属性从已创建的LTS日志组中获取。

    TopicId

    string

    必填

    LTS日志主题ID。该属性从已创建的LTS日志主题中获取。

    TopicName

    string

    必填

    LTS日志主题名称。该属性从已创建的LTS日志主题中获取。

    示例:LTS事件源对象

    ```yaml
    LtsEvt:
      Type: LTS
      Properties:
        GroupId: fd537073-7ffb-11e8-b63a-286ed488ce71
        GroupName: test-log-group-1
        TopicId: 51acbef6-aa92-11e8-810a-286ed488ce71
        TopicName: lts-topic-aos
    ```
  • CTS

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

    表10 属性

    属性名称

    类型

    描述

    Name

    string

    必填

    CTS触发器的名称。支持中文、英文、数字和下划线,长度不能超过64个字符。

    Operations

    object

    必填

    支持审计的服务操作。详情请参考支持审计的服务操作

    示例:CTS事件源对象

    ```yaml
    CtsEvt:
      Type: CTS
      Properties:
        Name: ctstest
        Operations:
          AOS:
            stack:
              - createStack
              - deleteStack
            quota:
              - updateQuota
          CCE(1.0):
            app:
              - createApp
              - deleteApp
            image:
              - deleteImage
    ```
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问