全部产品

触发器的增删改查

更新时间:2019-06-20 10:39:32

触发器 (Trigger) 设置函数可以被触发执行的方式,是函数级别的。例如,为函数设置 OSS 触发器,则当对应的 OSS 中有 object 的新增或删除(具体的动作需要由触发器配置时指定)时,会触发函数的执行;为函数设置 定时触发器,则可以在指定的时间点触发函数的执行。

本文介绍使用 控制台命令行工具 fcli 对触发器的操作:触发器的增删改查。

使用控制台对触发器的增删改查(推荐)

创建触发器

控制台有两个入口可以创建触发器:

  1. 在创建函数时创建触发器,请参考 创建函数时创建触发器
  2. 在函数创建成功后创建触发器,下面介绍此情况下创建触发器的步骤。

newTrigger1newTrigger2

不同触发器有不同的配置,具体配置方式请参考相应的触发器文档:

更新触发器

更新触发器2

查看触发器

查看触发器

删除触发器

删除触发器

使用 Fun 实现触发器的创建与更新(推荐)

通过配置 Fun 提供的 Events 属性,可以实现函数触发器的创建与更新。

下面我们以 HTTP 触发器为例,介绍如何 Fun 配置触发器的步骤。

首先在项目根目录下创建一个 index.js 文件。

  1. var getRawBody = require('raw-body')
  2. module.exports.handler = function (request, response, context) {
  3. // get request body
  4. getRawBody(request, function (err, body) {
  5. var respBody = {
  6. headers: request.headers,
  7. url: request.url,
  8. path: request.path,
  9. queries: request.queries,
  10. method: request.method,
  11. clientIP: request.clientIP,
  12. body: body.toString()
  13. };
  14. response.setStatusCode(200);
  15. response.setHeader('content-type', 'application/json');
  16. response.send(JSON.stringify(respBody, null, 4));
  17. });
  18. };

接下配置相关服务。在项目根目录创建一个 template.yml 文件:

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. FunDemo:
  5. Type: 'Aliyun::Serverless::Service'
  6. httpdemo:
  7. Type: 'Aliyun::Serverless::Function'
  8. Properties:
  9. Handler: index.handler
  10. CodeUri: ./
  11. Description: 'http trigger demo!'
  12. Runtime: nodejs8
  13. Events:
  14. http-test:
  15. Type: HTTP
  16. Properties:
  17. AuthType: ANONYMOUS
  18. Methods: ['GET', 'POST', 'PUT']

代码以及模板文件编写完成后,就可以使用 fun deploy 命令一键将服务部署到线上环境了:

  1. $ fun deploy
  2. using region: cn-hangzhou
  3. using accountId: ***********3557
  4. using accessKeyId: ***********r3Ra
  5. using timeout: 300
  6. Waiting for service FunDemo to be deployed...
  7. Waiting for function httpdemo to be deployed...
  8. Waiting for packaging function httpdemo code...
  9. package function httpdemo code done
  10. Waiting for HTTP trigger http-test to be deployed...
  11. methods: [ 'GET', 'POST', 'PUT' ]
  12. url: https://1911504709953557.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/FunDemo/httpdemo/
  13. function http-test deploy success
  14. function httpdemo deploy success
  15. service FunDemo deploy success

打开浏览器访问 https://1911504709953557.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/FunDemo/httpdemo/ 即可触发函数的执行。对于 HTTP 触发器,服务端会为 response header 中强制添加 content-disposition: attachment 字段,此字段会使得返回结果在浏览器中以附件的方式打开。此字段无法覆盖,使用自定义域名将不受影响。更多信息请参见 函数计算常见问题

如果修改了 HTTP Trigger 的配置,重新执行 fun deploy 即可。

如果想在本地单步调试、运行 http trigger 的函数,可以参考 开发函数计算的正确姿势 —— Http Trigger 本地运行调试

更多的配置规则 请参考

Fun 的更多教程 请参考

使用 fcli 对触发器的增删改查

创建触发器

mkt 创建触发器

  • -r —invocation-role string 设置触发角色
  • -s —source-arn string 事件源的资源符号,例如 acs:oss:cn-shanghai:12345678:myBucketName
  • -c —trigger-config string 设置 trigger 配置文件
  • -t —type string 触发器类型,默认是 oss
  1. >>> mkt myFunction/myFunctionTrigger -t oss -r acs:ram::account_id:role/AliyunOSSEventNotificationRole -s acs:oss:cn-region:account_id:bucketName -c code/trigger.yaml
  2. //Example
  3. >>> mkt myFunction/myFunctionTrigger -t oss -r acs:ram::12345678:role/AliyunOSSEventNotificationRole -s acs:oss:cn-shanghai:12345678:myOssBucket -c code/ossTrigger.yaml
  4. //其中yaml的文件内容如下
  5. triggerConfig:
  6. events:
  7. - oss:ObjectCreated:PutObject
  8. - oss:ObjectRemoved:DeleteObject
  9. filter:
  10. key:
  11. prefix: myPrefix
  12. suffix: mySuffix

更新触发器

upt 更新触发器,参数与 mkt 相同。

  1. >>> upt myFunction/myFunctionTrigger -t oss -r acs:ram::account_id:role/AliyunOSSEventNotificationRole -s acs:oss:cn-region:account_id:bucketName -c code/trigger.yaml

查看触发器

在函数下,输入 ls 命令即可查看此函数下的所有触发器。

输入 info triggerName 命令可以查看触发器的详细信息。

删除触发器

在函数下,输入 rm triggerName 即可删除此触发器。