全部产品
云市场

定时触发器示例

更新时间:2018-09-06 10:33:24

触发器是触发函数执行的方式。有时候您不想手动调用函数执行,您希望当某件事情发生时自动触发函数的执行,这个事情就是事件源。您可以通过配置触发器的方式设置事件源触发函数执行。

例如,设置定时触发器,可以在某个时间点触发函数执行;设置 OSS 事件触发器,可以在当 OSS bucket 中有对象上传时触发函数执行;设置 SLS 触发器,可以当日志仓库中有日志写入时触发函数执行。

简介

本文对使用定时触发器触发函数执行的过程进行介绍。每 5 min 触发一次 应用示例 1 中的 testHelloWorld 函数执行。同样,您也可以使用控制台或者命令行工具 fcli 或者 SDK 设置定时触发器,本文也分别对三种方式进行介绍。您选择习惯的方式设置即可。

使用控制台设置定时触发器

建议您提前阅读以下文章:

您可以在创建函数时设置触发器,或者函数创建完成后设置触发器。请参考 触发器的增删改查

本示例对函数创建完成后设置触发器的步骤进行演示。

  • 在函数执行页面点击 触发器 -> 创建触发器 -> 定时触发器,设置触发器名称和时间配置。

time-trigger-config

其中,触发信息表示函数触发执行时的输入参数。

设置完成后,您可以查看函数日志,判断函数是否按时执行。函数日志可以通过日志服务控制台或 fcli 工具查看。有关更多信息,请参考 函数日志

使用 fcli 设置定时触发器

在完成 应用示例 1 的基础上,新建定时触发器。

服务名为 demo ,函数名为 testTHelloWorld,触发器名为 time-trigger。

fcli shell 进入交互模式

  1. # get into service
  2. >>> cd demo
  3. # get into function
  4. >>> cd testHelloWorld
  5. # create trigger
  6. >>> mkt time-trigger -t timer -c timeTriggerConfig.yaml

其中

  • -t 指定了触发器的类型
  • -c 指定了配置文件
  • 您可以通过 mkt --help 获取创建触发器的更多信息

您可以通过 logs testHelloWorld 查看函数日志,判断函数是否成功被定时触发。

使用 SDK 设置定时触发器

Python SDK 示例

  1. import fc2
  2. client = fc2.Client(
  3. endpoint = '<Your Endpoint>',
  4. accessKeyID = '<Your AccessKeyID>',
  5. accessKeySecret = '<Your AccessKeySecret>')
  6. service_name = '<service_name>'
  7. function_name = '<function_name>'
  8. trigger_name = '<trigger_name>'
  9. trigger_type = 'timer'
  10. trigger_config = {
  11. 'payload': 'awesome-fc',
  12. 'cronExpression': '0 0 0/5 * * ?',
  13. 'enable': True
  14. }
  15. client.create_trigger(service_name, function_name,
  16. trigger_name, trigger_type, trigger_config, None, None)

Nodejs SDK 示例

  1. 'use strict';
  2. var fs =require('fs')
  3. var FCClient = require('@alicloud/fc2');
  4. var client = new FCClient('<accountId>', {
  5. accessKeyID: '<accessKeyID>',
  6. accessKeySecret: '<accessKeySecret>',
  7. region: 'cn-shanghai',
  8. timeout: 10000 // Request timeout in milliseconds, default is 10s
  9. });
  10. var serviceName = '<serviceName>';
  11. var funcName = '<fuctionName>';
  12. var triggerName = '<triggerName>'
  13. var timeTriggerConfig = {
  14. payload: 'awesome-fc',
  15. cronExpression: '0 0 0/5 * * ?',
  16. enable: true
  17. }
  18. client.createTrigger(serviceName, funcName,{
  19. triggerName: triggerName,
  20. triggerType: 'timer',
  21. triggerConfig: timeTriggerConfig
  22. } ).then(function(res) {
  23. console.log('create trigger: %j', res)
  24. }).catch(function(err){
  25. console.error(err)
  26. })

Java SDK 示例

  1. import com.aliyuncs.fc.client.FunctionComputeClient;
  2. import com.aliyuncs.fc.model.TimeTriggerConfig;
  3. import com.aliyuncs.fc.request.*;
  4. import com.aliyuncs.fc.response.*;
  5. import java.io.IOException;
  6. public class testTimeTrigger {
  7. private static final String REGION = "cn-shanghai";
  8. private static final String SERVICE_NAME = "<service_name>";
  9. private static final String FUNCTION_NAME = "<function_name>";
  10. public static void main(final String[] args) throws IOException {
  11. String accountId = "<accountId>";
  12. String accessKey = "<accessKey";
  13. String accessSecretKey = "accessSecretKey";
  14. // Initialize FC client
  15. FunctionComputeClient fcClient = new FunctionComputeClient(REGION, accountId, accessKey, accessSecretKey);
  16. String cronEvery = "@every 5m";
  17. String payload = "awesome-fc";
  18. String triggerName = "time-trigger";
  19. CreateTriggerRequest createTReq = new CreateTriggerRequest(SERVICE_NAME, FUNCTION_NAME);
  20. TimeTriggerConfig timeTriggerConfig = new TimeTriggerConfig(cronEvery, payload, true);
  21. createTReq.setTriggerName(triggerName);
  22. createTReq.setTriggerType("timer");
  23. createTReq.setTriggerConfig(timeTriggerConfig);
  24. CreateTriggerResponse createTriggerResponse = fcClient.createTrigger(createTReq);
  25. }
  26. }

有关各语言 SDK 的详细信息,请参考 SDK 列表

相关文章