時間トリガー(Time Trigger)
Function Compute は、指定された時点で関数の実行をトリガー(Time Trigger)する時間トリガーをサポートします。本ドキュメントでは、時間トリガーについて 2 つの部分で説明します。
- 時間トリガーの配置方式およびパラメータ設定。
- コンソールからの時間トリガーの作成、fcli による時間トリガーの作成、および sdk の呼び出しによる時間トリガーの作成など、3 つの作成方法。
時間トリガーの設定
{
payload:"payload"
cronExpression: "cronExpression"
enable: true|false
}
payload
: トリガーイベント自体の入力内容を表し、ユーザーがカスタマイズできます。cronExpression
: 関数がトリガされる時刻は、2 つの設定方法をサポートしています。@every
cron 式
cronExpression の設定
注意:時間トリガーに現在許可されている最小トリガー間隔は 1 分です。次の 2 つの cron 式では、間隔が 1 分未満の場合は無効な入力とみなされますので、使用しないでください。
@every
@every Value Unit
ここで、value は正の整数で、Unit は"ns"
, "us" (or "µs")
, "ms"
, "s"
, "m"
です。 "h"
は Value Unit 時間ごとに関数がトリガされることを示します。
例 | 式 |
---|---|
5 分ごとに関数がトリガされ、操作を実行します。 | @every 5m |
1.5 時間ごとに関数がトリガされ、操作を実行するします。 | @every 1.5h |
2 時間 45 分ごとに関数がトリガされ、操作を実行するします。 | @every 2h45m |
cron 式
cron(Seconds Minutes Hours Day-of-month Month Day-of-week )
は標準的な cron式の書式です。
注意: Cron は UTC 時間、つまり北京時間から8時間を引いた時間で実行します。
フィールド名 | 許可される値 | 許可された特殊文字 |
---|---|---|
Seconds | 0-59 | |
Minutes | 0-59 | , - * / |
Hours | 0-23 | , - * / |
Day-of-month | 1-31 | , - * ?/ |
Month | 1-12 or JAN-DEC | , - * / |
Day-of-week | 1-1 or SUN-SAT | , - * ? |
特殊文字の説明
符号名 | 定義 | 例 |
---|---|---|
* | いずれか1つ、「毎」で | Minutes フィールドには毎分ごと 0 秒に実行するを示します。 |
, | リストの値 | Day-of-week フィールドでは、MON,WED,FRI は月曜日、水曜日および金曜日を示します。 |
- | 範囲 | 時間フィールドに10-12 を使用して、10から12までのUTC時刻を示します。 |
? | 不確定な値 | 他の指定された値とともに使用されます。たとえば、特定の日付を指定しても、それが何曜日に該当するかを気にしない場合は、Day-of-week フィールドを使用できます。 |
/ | 値の増分を表します。n/m は n で始まる、毎回 m を増やすことを意味します。 |
minute フィールドに3/5 は 3 分から開始し、5分ごとに実行することを意味します。 |
以下の表は、cron expression
の一般的な例を示しています。
次の表の第 1 列は北京時間で、第 2 列は北京時間の対応するUTC時間(北京時間 - 8時間)です。たとえば、北京時間の 12:00 は UTC 時間の 4:00 です。 cronの式は 0 0 4 * * *
です
表示例(北京時間) | 表示例(UTC 時間) | 式 |
---|---|---|
毎日12:00 にトリガされ、関数を実行します。 | 毎日4:00 にトリガされ、関数を実行します。 | 0 0 4 * * * |
毎日12:30 にトリガされ、関数を実行します。 | 毎日 4:30 にトリガされ、関数を実行します。 | 0 30 4 * * * |
時間ごとに、26 分に、29 分に、33 分に実行します。 | 時間ごとに、26 分に、29 分に、33 分に実行します。 | 0 26,29,33 * * * * |
月曜日から金曜日までの毎日 12:30 にトリガされ、関数を実行します。 | 月曜日から金曜日までの毎日 4:30 にトリガされ、関数を実行します。 | 0 30 4 ? * MON-FRI |
月曜日から金曜日までの毎日 12:00-14:00 の間、5 分ごとにトリガされ、関数を実行します。 | 月曜日から金曜日までの毎日4:00-6:00 の間、5 分ごとにトリガされ、関数を実行します。 | 0 0/5 4-6 ? * MON-FRI |
一月から四月までの毎日 12:00 にトリガされ、関数を実行します。 | 一月から四月までの毎日 4:00 にトリガされ、関数を実行します。 | 0 0 4 ? JAN,FEB,MAR,APR * |
Event 形式
時間トリガーは、以下の Event 形式で関数をトリガし、Event に応じで処理します。
{
"triggerTime":"2018-02-09T05:49:00Z",
"triggerName":"my_trigger",
"payload":"awesome-fc"
}
triggerTime
は trigger をトリガする時間である、一つの trigger は、トリガ可能な時間内に複数回トリガーされることがありますが、ユーザーはこの値を使用して大量の処理を行うことができます。triggerName
はtrigger
の名前です。payload
はトリガ設定のユーザ入力パラメータです。
使用方法
Function Compute コンソールから、コマンドツールfcliを使用して、またはsdkを介して設定するなど三つの方法で関数トリガーを設定できます。 次に、これらの 3つ の方法について説明します。
時間トリガー設定を作成するには
SourceArn
とInvocationRole
を指定する必要はありません。
コンソール
新しい関数を作成するときに、時間トリガーを作成することができます。
また、既存の関数を設定した時刻にトリガすることもできます。まず、関数プロパティページをクリックし、トリガーページをクリックして、時間トリガーを作成します。
コマンドラインツール fcli を使用
- 最初に、TimeTrigger Config を含む yaml ファイルを作成する必要があります。たとえば、入力パラメータが 「awesome-fc」 の関数トリガーが 5 時間ごとにトリガされる場合、トリガの timeTriggerConfig.yaml ファイルは次のようになります。
triggerConfig:
payload: "awesome-fc"
cronExpression: "0 0 0/5 * * ?"
enable: true
- トリガーを作成(対応する function ディレクトリ内)
mkt serviceName/functionName -t timer -c timeTriggerConfig.yaml
SDK を介して呼び出す
fc-python-sdk を例として、Function Compute は fc-nodejs-sdk,fc-java-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)
関数のコード
import json
import logging
LOG = logging.getLogger()
def handler(event, context):
LOG.info('event: %s', event)
evt = json.loads(event)
triggerName = evt["triggerName"]
triggerTime = evt["triggerTime"]
message = evt["payload"]
creds = context.credentials
LOG.info('access_key_id: %s', creds.access_key_id)
LOG.info("message = %s", message)
ご不明な点がございましたら、メッセージをいただくか、または Function Compute の公式顧客チャートグループに加入してください。(DingTalk グループ番号:11721331)