ALIYUN::FC::Trigger类型用于触发函数执行的方式。

在事件驱动的计算模型中,事件源是事件的生产者,函数是事件的处理者,而触发器提供了一种集中的和统一的方式来管理不同的事件源。在事件源中,当事件发生时,如果满足触发器定义的规则,事件源则调用触发器所对应的函数。

语法

{
  "Type": "ALIYUN::FC::Trigger",
  "Properties": {
    "TriggerConfig": Map,
    "InvocationRole": String,
    "FunctionName": String,
    "ServiceName": String,
    "TriggerName": String,
    "TriggerType": String,
    "Qualifier": String,
    "SourceArn": String
  }
}

属性

属性名称 类型 必须 允许更新 描述 约束
ServiceName String Service名称。 长度为1~128个字符。
FunctionName String 要创建触发器的函数名称。 无。
TriggerName String 触发器名称。 以英文字母或下划线开头,可以包含数字和中划线,长度为1~128字符。
TriggerType String 触发器类型。 取值范围:oss、log、tablestore、timer、mns_topic。
TriggerConfig Map Trigger配置,针对不同的Trigger类型,Trigger配置会有所不同。 无。
InvocationRole String 该角色授予事件源代表用户运行函数的权限。例如:"acs:ram::1234567890:role/fc-test" Timer触发器该参数可不填,其它类型触发器必填。
SourceArn String 事件源的ARN,例如:"acs:<云产品名>:<地域>:<主账户ID>:<后缀>"不同类型触发器的后缀格式:
  • oss:<BucketName>
  • log:<ProjectName>/<LogStoreName>
  • ots:instance/<OTSInstanceName>/table/<TableName>
  • mns:/topics/<TopicName>
Timer触发器该参数可不填,其它类型触发器必填。
Qualifier String Service版本,例如:LATEST。 无。

oss-TriggerConfig语法

"TriggerConfig": {
  "BucketName": String,
  "Events": List,
  "Filter": Map
}      

oss-TriggerConfig属性

属性名称 类型 必须 允许更新 描述 约束
BucketName String Bucket名称。 请在对象存储(OSS)选择合适的Bucket作为事件源,选择框展示的都是同一个区域下的Bucket。
Events String 触发事件,表示您对云资源执行什么样的操作,实例值:oss:ObjectCreated:* 无。
Filter Map 触发规则,用于避免循环触发。示例:
"Filter": {
  "Key": {
    "Prefix": "prefix",
    "Suffix": "suffix"
  }
}
Prefix和Suffix的值为自定义字符串。

log-TriggerConfig语法

"TriggerConfig": {
  "SourceConfig": Map,
  "LogConfig": Map,
  "JobConfig": Map,
  "FunctionParameter": Map,
  "Enable": Boolean
}

log-TriggerConfig属性

属性名称 类型 必须 允许更新 描述 约束
SourceConfig Map 配置日志仓库,示例值:{"LogStore": "<SLS_LogStore>"} 无。
LogConfig Map 配置日志项目和触发器日志,示例值:{"Project": "<SLS_Project>", "LogStore": "SLS_LogStore"} 日志项目必填且不可更新,触发器日志非必填、可以更新,与SourceConfig设置的LogStore不能相同。
JobConfig Map 工作配置,用于设置重试次数和触发间隔,示例值:{"MaxRetryTime": 3, "TriggerInterval": 60}

触发间隔单位为秒。

重试次数取值范围为0~100。

FunctionParameter Map 函数配置,用于为函数传递参数,不传入任何参数时请填写{}。 无。
Enable Boolean 日志服务触发器启用状态。 无。

timer-TriggerConfig语法

"TriggerConfig": {
  "Payload": String,
  "CronExpression": String,
  "Enabled": Boolean
}

timer-TriggerConfig属性

属性名称 类型 必须 允许更新 描述 约束
Payload String 触发消息 无。
CronExpression String Cron表达式,用于设置触发时间,详情请参考CronExpression Cron以UTC时间运行,即北京时间减去8个小时。
Enabled Boolean 是否启用触发器。 无。

tablestore-TriggerConfig语法

"TriggerConfig",: {
  "InstanceName": String,
  "TableName": String
}

tablestore-TriggerConfig属性

属性名称 类型 必须 允许更新 描述 约束
InstanceName String 表格存储实例名称。 无。
TableName String 数据表名称。 无。

mns_topic-TriggerConfig语法

"TriggerConfig": {
  "NotifyStrategy": String,
  "NotifyContentFormat": String,
  "FilterTag": String
}

mns_topic-TriggerConfig属性

属性名称 类型 必须 允许更新 描述 约束
NotifyStrategy String 重试策略,详情请参考NotifyStrategy 取值范围:
  • BACKOFF_RETRY:退避重试。
  • EXPONENTIAL_DECAY_RETRY:指数衰减。
NotifyContentFormat String Event格式。 取值范围:STREAM、JSON。
FilterTag String 过滤标签。 无。

返回值

Fn::GetAtt

  • TriggerId:系统为每个Trigger生成的唯一ID。
  • ServiceName: 函数服务的名称。
  • FunctionName: 函数名称。
  • TriggerName: 触发器名称。

示例

JSON格式

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "ServiceName": {
      "Type": "String",
      "Description": "FC ServiceName",
      "Default": "ros-test"
    },
    "FunctionName": {
      "Type": "String",
      "Description": "Function Name",
      "Default": "PythonFunc"
    },
    "SourceCode": {
      "Type": "String",
      "Description": "Function SourceCode",
      "Default": "def handler(event, context):\n\treturn 'Hello World!'"
    },
    "Handler": {
      "Type": "String",
      "Description": "Handler",
      "Default": "index.handler"
    },
    "Runtime": {
      "Type": "String",
      "Description": "Runtime",
      "Default": "python3"
    },
    "TriggerName": {
      "Type": "String",
      "Default": "test-trigger"
    },
    "TriggerType": {
      "Type": "String",
      "Default": "timer"
    },
    "CronExpression": {
      "Type": "String",
      "Default": "0 0/5 * * * *"
    },
    "Enabled": {
      "Type": "Boolean",
      "Default": "true"
    }
  },
  "Resources": {
    "Service": {
      "Type": "ALIYUN::FC::Service",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        }
      }
    },
    "Function": {
      "DependsOn": "Service",
      "Type": "ALIYUN::FC::Function",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "Code": {
          "SourceCode": {
            "Ref": "SourceCode"
          }
        },
        "Handler": {
          "Ref": "Handler"
        },
        "Runtime": {
          "Ref": "Runtime"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        }
      }
    },
    "Trigger": {
      "DependsOn": "Function",
      "Type": "ALIYUN::FC::Trigger",
      "Properties": {
        "ServiceName": {
          "Ref": "ServiceName"
        },
        "FunctionName": {
          "Ref": "FunctionName"
        },
        "TriggerName": {
          "Ref": "TriggerName"
        },
        "TriggerType": {
          "Ref": "TriggerType"
        },
        "TriggerConfig": {
          "CronExpression": {
            "Ref": "CronExpression"
          },
          "Enabled": {
            "Ref": "Enabled"
          }
        }
      }
    }
  },
  "Outputs": {
    "TriggerId": {
      "Value": {
        "Fn::GetAtt": [
          "Trigger",
          "TriggerId"
        ]
      }
    }
  }
}

YAML格式

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  ServiceName:
    Type: String
    Description: FC ServiceName
    Default: ros-test
  FunctionName:
    Type: String
    Description: Function Name
    Default: PythonFunc
  SourceCode:
    Type: String
    Description: Function SourceCode
    Default: "def handler(event, context):\n\treturn 'Hello World!'"
  Handler:
    Type: String
    Description: Handler
    Default: index.handler
  Runtime:
    Type: String
    Description: Runtime
    Default: python3
  TriggerName:
    Type: String
    Default: test-trigger
  TriggerType:
    Type: String
    Default: timer
  CronExpression:
    Type: String
    Default: 0 0/5 * * * *
  Enabled:
    Type: Boolean
    Default: 'true'
Resources:
  Service:
    Type: 'ALIYUN::FC::Service'
    Properties:
      ServiceName:
        Ref: ServiceName
  Function:
    DependsOn: Service
    Type: 'ALIYUN::FC::Function'
    Properties:
      ServiceName:
        Ref: ServiceName
      Code:
        SourceCode:
          Ref: SourceCode
      Handler:
        Ref: Handler
      Runtime:
        Ref: Runtime
      FunctionName:
        Ref: FunctionName
  Trigger:
    DependsOn: Function
    Type: 'ALIYUN::FC::Trigger'
    Properties:
      ServiceName:
        Ref: ServiceName
      FunctionName:
        Ref: FunctionName
      TriggerName:
        Ref: TriggerName
      TriggerType:
        Ref: TriggerType
      TriggerConfig:
        CronExpression:
          Ref: CronExpression
        Enabled:
          Ref: Enabled
Outputs:
  TriggerId:
    Value:
      'Fn::GetAtt':
        - Trigger
        - TriggerId