edit-icon download-icon

時間トリガー(Time Trigger)

最終更新日: Jun 25, 2018

時間トリガー(Time Trigger)

Function Compute は、指定された時点で関数の実行をトリガー(Time Trigger)する時間トリガーをサポートします。本ドキュメントでは、時間トリガーについて 2 つの部分で説明します。

  • 時間トリガーの配置方式およびパラメータ設定。
  • コンソールからの時間トリガーの作成、fcli による時間トリガーの作成、および sdk の呼び出しによる時間トリガーの作成など、3 つの作成方法。

時間トリガーの設定

  1. {
  2. payload:"payload"
  3. cronExpression: "cronExpression"
  4. enable: true|false
  5. }
  • 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 に応じで処理します。

  1. {
  2. "triggerTime":"2018-02-09T05:49:00Z",
  3. "triggerName":"my_trigger",
  4. "payload":"awesome-fc"
  5. }
  • triggerTime は trigger をトリガする時間である、一つの trigger は、トリガ可能な時間内に複数回トリガーされることがありますが、ユーザーはこの値を使用して大量の処理を行うことができます。
  • triggerNametrigger の名前です。
  • payload はトリガ設定のユーザ入力パラメータです。

使用方法

Function Compute コンソールから、コマンドツールfcliを使用して、またはsdkを介して設定するなど三つの方法で関数トリガーを設定できます。 次に、これらの 3つ の方法について説明します。

時間トリガー設定を作成するにはSourceArnInvocationRoleを指定する必要はありません。

コンソール

新しい関数を作成するときに、時間トリガーを作成することができます。

新規関数

また、既存の関数を設定した時刻にトリガすることもできます。まず、関数プロパティページをクリックし、トリガーページをクリックして、時間トリガーを作成します。

時間トリガーに既存関数をトリガ

コマンドラインツール fcli を使用

  • 最初に、TimeTrigger Config を含む yaml ファイルを作成する必要があります。たとえば、入力パラメータが 「awesome-fc」 の関数トリガーが 5 時間ごとにトリガされる場合、トリガの timeTriggerConfig.yaml ファイルは次のようになります。
    1. triggerConfig:
    2. payload: "awesome-fc"
    3. cronExpression: "0 0 0/5 * * ?"
    4. enable: true
  • トリガーを作成(対応する function ディレクトリ内)mkt serviceName/functionName -t timer -c timeTriggerConfig.yaml

SDK を介して呼び出す

fc-python-sdk を例として、Function Compute は fc-nodejs-sdkfc-java-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)

関数のコード

  1. import json
  2. import logging
  3. LOG = logging.getLogger()
  4. def handler(event, context):
  5. LOG.info('event: %s', event)
  6. evt = json.loads(event)
  7. triggerName = evt["triggerName"]
  8. triggerTime = evt["triggerTime"]
  9. message = evt["payload"]
  10. creds = context.credentials
  11. LOG.info('access_key_id: %s', creds.access_key_id)
  12. LOG.info("message = %s", message)

ご不明な点がございましたら、メッセージをいただくか、または Function Compute の公式顧客チャートグループに加入してください。(DingTalk グループ番号:11721331)