全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网

创建触发器

更新时间:2017-08-01 19:49:16

在事件驱动的计算模型中,事件源是事件的生产者,函数是事件的处理者,而触发器提供了一种集中的和统一的方式来管理不同的事件源。在事件源中,当事件发生时,如果满足触发器定义的规则,事件源则调用触发器所对应的函数。目前函数计算支持对象存储(Object Storage Service,简称OSS)和API网关,后续会支持更多的事件源。触发器从属于函数。不同函数之间的触发器相互独立。

需要注意的是,由于不同的触发器可以和数据源的同一资源(例如OSS的bucket)关联,事件源可能会限制可以关联的触发器个数。一个OSS bucket最多可以关联10个触发器。

触发器属性

在创建触发器时,您需要指定下述信息:

  • triggerName(必选):触发器的名字。在当前函数内唯一,并符合如下约束:
    • 由英文字符(a-z)或(A-Z),数字(0-9),下划线(_)和中划线(-)组成
    • 首字母必须为英文字母(a-z)、(A-Z)或下划线(_)
    • 大小写敏感
    • 长度为1-128字符
  • triggerType(必选):触发器类型,目前仅支持oss。
  • sourceArn(必选):事件源资源地址,例如OSS的bucket(acs:oss:cn-shanghai:12345:mybucket)。注意,这个资源必须和函数计算服务在同一区域(region)。该值格式是acs:oss:$region:$account-id:$bucket-name
  • invocationRole(必选):事件源以何种角色调用函数,例如acs:ram::12345:role/myrole。该角色授权事件源可以调用执行函数。该值格式是acs:ram::$account-id:role/$role-name
  • triggerConfig(必选):触发器配置。这个配置和触发器类型相关,不同的类型会有不同的配置。例如OSS的触发器配置定义了当某些事件(如上传对象,删除对象)发生时,OSS会调用触发器所属的函数。

其中,只有invocationRoletriggerConfig是可以后续修改的。

支持的触发器类型和配置

OSS触发器配置

您需要指定下述信息:

  • events: OSS端触发函数执行的事件,可以指定以下一种或者多种。
    • oss:ObjectCreated:*
    • oss:ObjectCreated:PutObject
    • oss:ObjectCreated:PutSymlink
    • oss:ObjectCreated:PostObject
    • oss:ObjectCreated:CopyObject
    • oss:ObjectCreated:InitiateMultipartUpload
    • oss:ObjectCreated:UploadPart
    • oss:ObjectCreated:UploadPartCopy
    • oss:ObjectCreated:CompleteMultipartUpload
    • oss:ObjectCreated:AppendObject
    • oss:ObjectRemoved:DeleteObject
    • oss:ObjectRemoved:DeleteObjects
    • oss:ObjectRemoved:AbortMultipartUpload
  • filter: OSS对象过滤器,只有满足过滤条件的对象才有可能触发函数执行
    • key: 过滤器目前只支持基于对象Key的过滤
      • prefix: 前缀匹配
      • suffix: 后缀匹配

使用命令行工具创建和更新触发器

在命令行工具的 shell 模式中,您可以使用 mkt/upt 命令创建/更新触发器,并通过info命令查看触发器属性。例如,我们已经在 hello 服务下创建了名为 world 的函数。现在我们来创建一个触发器:

注意:由于触发器配置的多样性,触发器配置是通过文件方式输入的。

sample_oss_trigger_config.yaml

  1. triggerConfig:
  2. events:
  3. - oss:ObjectCreated:PostObject
  4. - oss:ObjectCreated:PutObject
  5. filter:
  6. key:
  7. prefix: source/
  8. suffix: .png
  1. 执行fcli shell命令,进入交互模式
  2. 创建触发器
    1. mkt hello/world/mytrigger -t oss -r acs:ram::12345:role/myrole -s acs:oss:cn-shanghai:12345:mybucket -c sample_oss_trigger_config.yaml

    注意:这里的调用角色(invocationRole)和事件源资源地址(sourceArn)都必须是真实有效的。如果您没有可用的角色,您可以通过命令行去创建调用角色。

    1. mkir fc-invoke-function
    2. mkrp fc-invoke-all -a '"fc:InvokeFunction"' -r '"*"'
    3. attach -p /ram/policies/fc-invoke-all -r /ram/roles/fc-invoke-function
  3. 更新触发器
    1. upt hello/world/mytrigger -r acs:ram::12345:role/myrole2 -c sample_oss_trigger_config2.yaml
本文导读目录