関数を呼び出すためにトリガーが使用できます。イベントによって関数が自動的にトリガーされる場合、このイベントはイベントソースと呼ばれます。トリガーを設定することでイベントソースを設置し、関数の実行を発火させます。
例えば、タイムトリガーを設定することで、特定な時点で関数を実行させます。
内容
このチュートリアルでは、タイムトリガーが、Function Compute コンソール、およびコマンドラインツール fcli、 または SDK を使用して関数を呼び出す方法について説明します。トリガーは、 Hello World の例の testHelloWorld
関数を 5 分ごとに呼び出します。タイムトリガーを設定するには、次のいずれかの方法を選択します。
Function Compute コンソールでタイムトリガーを作成する
タイムトリガーの作成を開始する前に、「コンソールの使用方法」および「タイムトリガー」を読むことをお勧めします。関数の作成中または作成後に、タイムトリガーを設定できます。「トリガー操作」をご参照ください。この例では、関数を作成した後にタイムトリガーを設定する方法について説明します。
関数実行ページで、[トリガー] - > [トリガーの設定] - > [タイムトリガー] をクリックします。このページでは、タイムトリガーの名前と間隔、または cron 式を設定できます。イベント Payload は、関数がタイマートリガーに呼び出されたときの入力パラメータです。
設定が完了したら、指定した時刻に関数が呼び出されることを確認するために、関数ログをチェックします。Log Service コンソールで、または fcli ツールを使用して、関数ログを確認できます。詳細は、「関数ログ」をご参照ください。
fcli ツールを使用してタイムトリガーを作成する
Hello World の例が完了したら、新しくタイムトリガーを作成します。サービス名は demo 、関数名は testTHelloWorld 、タイムトリガー名は time-trigger とします。
fcli の対話モードに入ります。
# get into service
>>> cd demo
# get into function
>>> cd testHelloWorld
トリガーを作成します。
>>> mkt time-trigger -t timer -c timeTriggerConfig.yaml
-t
はトリガーのタイプを指定します。-c
は設定ファイルを指定します。
mkt --help
を使用して、トリガーに関する詳細情報を得ることができます。logs testHelloWorld
を使用して、関数ログをチェックし、関数が指定どおりに呼び出されたことを確認できます。
SDK を使用してタイムトリガーを作成する
複数言語の SDK の詳細については、「SDK リスト」をご参照ください。
Python SDK の例
import fc2
client = fc2.Client(
endpoint = '<Your Endpoint>',
accessKeyID = '<Your AccessKeyID>',
accessKeySecret = '<Your AccessKeySecret>')
service_name = '<service_name>'
function_name = '<function_name>'
trigger_name = '<trigger_name>'
trigger_type = 'timer'
trigger_config = {
'payload': 'awesome-fc',
'cronExpression': '0 0 0/5 * * ?',
'enable': True
}
client.create_trigger(service_name, function_name,
trigger_name, trigger_type, trigger_config, None, None)
Nodejs SDK の例
'use strict';
var fs =require('fs')
var FCClient = require('@alicloud/fc2');
var client = new FCClient('<accountId>', {
accessKeyID: '<accessKeyID>',
accessKeySecret: '<accessKeySecret>',
region: 'cn-shanghai',
timeout: 10000 // Request timeout in milliseconds, default is 10s
});
var serviceName = '<serviceName>';
var funcName = '<fuctionName>';
var triggerName = '<triggerName>'
var timeTriggerConfig = {
payload: 'awesome-fc',
cronExpression: '0 0 0/5 * * ?',
enable: true
}
client.createTrigger(serviceName, funcName,{
triggerName: triggerName,
triggerType: 'timer',
triggerConfig: timeTriggerConfig
} ).then(function(res) {
console.log('create trigger: %j', res)
}).catch(function(err){
console.error(err)
})
Java SDK の例
import com.aliyuncs.fc.client.FunctionComputeClient;
import com.aliyuncs.fc.model.TimeTriggerConfig;
import com.aliyuncs.fc.request.*;
import com.aliyuncs.fc.response.*;
import java.io.IOException;
public class testTimeTrigger {
private static final String REGION = "cn-shanghai";
private static final String SERVICE_NAME = "<service_name>";
private static final String FUNCTION_NAME = "<function_name>";
public static void main(final String[] args) throws IOException {
String accountId = "<accountId>";
String accessKey = "<accessKey";
String accessSecretKey = "accessSecretKey";
// Initialize FC client
FunctionComputeClient fcClient = new FunctionComputeClient(REGION, accountId, accessKey, accessSecretKey);
String cronEvery = "@every 5m";
String payload = "awesome-fc";
String triggerName = "time-trigger";
CreateTriggerRequest createTReq = new CreateTriggerRequest(SERVICE_NAME, FUNCTION_NAME);
TimeTriggerConfig timeTriggerConfig = new TimeTriggerConfig(cronEvery, payload, true);
createTReq.setTriggerName(triggerName);
createTReq.setTriggerType("timer");
createTReq.setTriggerConfig(timeTriggerConfig);
CreateTriggerResponse createTriggerResponse = fcClient.createTrigger(createTReq);
}
}