edit-icon download-icon

トリガーとイベントの設定

最終更新日: Oct 10, 2019

トリガーの種類によって、パラメーター設定ファイルの形式は異なります。ここでは、各種の形式の例と、そこでサポートされる属性について説明します。また、イベントトリガーから関数インターフェイスに渡されるイベントはトリガーの種類によって異なるため、イベントオブジェクトの形式についても説明します。

現在、次の 2 種類のトリガーに対応しています。

Function Compute で作成されるトリガーの場合は、fcli ツールを使用してシェルモードに入り、mkt コマンドを実行してトリガーを作成します。このコマンドのパラメーターは次の通りです。

  1. >>> mkt --help
  2. --etag string trigger etag for update
  3. --help
  4. -r, --invocation-role string invocation role
  5. -s, --source-arn string event source arn
  6. -c, --trigger-config string trigger config file
  7. -t, --type string trigger type, support oss now (default "oss")

注意: --trigger-config パラメーターで指定する設定ファイルは、トリガーによって形式が変わります。

HTTP トリガー

HTTP トリガーは、関数シグネチャがリクエストとレスポンスのオブジェクトであり、イベントオブジェクトではないところが他のトリガーとは違います。そのため、HTTP トリガーは、イベント形式を使用しません。

詳細については、「HTTP トリガー」をご覧ください。

トリガーの設定

トリガーの例: httpTrigger.yml

  1. triggerConfig:
  2. authType: anonymous
  3. methods: ["GET", "POST"]

トリガーパラメーターの説明:

  • authType は認証モードを示します。指定可能な値:
    • anonymous: 認証は不要で、任意のユーザーからのアクセスを許可します。
    • function: サーバー認証が必要です。HTTP リクエストヘッダーは、権限情報およびタイムスタンプを含んでいなければなりません。
  • methods は HTTP トリガーでサポートされているリクエストのメソッドを示します。指定可能な値:
    • GET: HTTP GET メソッド
    • POST: HTTP POST メソッド
    • HEAD: HTTP HEAD メソッド
    • PUT: HTTP PUT メソッド
    • DELETE: HTTP DELETE メソッド

OSS トリガー

トリガーの設定

トリガーの例: ossTrigger.yml

  1. triggerConfig:
  2. events:
  3. - oss:ObjectCreated:PostObject
  4. - oss:ObjectCreated:PutObject
  5. filter:
  6. key:
  7. prefix: source/
  8. suffix: .png

トリガーパラメーターの説明:

  • events は、OSS 用にトリガーされた関数実行イベントを示します。指定可能な値:
    • oss:ObjectCreated:*
    • oss:ObjectCreated:PutObject
    • oss:ObjectCreated:PutSymlink
    • oss:ObjectCreated:PostObject
    • oss:ObjectCreated:CopyObject
    • oss:ObjectCreated:InitiateMultipartUpload
    • oss:ObjectCreated:UploadPart
    • oss:ObjectCreated:UploadPartCopy
    • oss:ObjectCreated:CompleteMultipartUpload
    • oss:ObjectCreated:AppendObject
    • oss:ObjectRemoved:DeleteObject
    • oss:ObjectRemoved:DeleteObjects
    • oss:ObjectRemoved:AbortMultipartUpload
  • filter は OSS オブジェクトのフィルターパラメーターを示します。フィルター条件を満たす OSS オブジェクトだけが、関数の実行をトリガーすることができます。条件には次の属性を含みます。
    • key: フィルターは、キーによってオブジェクトをフィルタリングできます。キーには次の属性を含みます。
      • prefix: 前端と一致する文字列
      • suffix: 後端と一致する文字列

イベント形式

  1. {
  2. "events": [
  3. {
  4. "eventName": "ObjectCreated:PutObject",
  5. "eventSource": "acs:oss",
  6. "eventTime": "2017-04-21T12:46:37.000Z",
  7. "eventVersion": "1.0",
  8. "oss": {
  9. "bucket": {
  10. "arn": "acs:oss:cn-shanghai:1237050315505689:bucketname",
  11. "name": "bucketname",
  12. "ownerIdentity": "1237050315505689",
  13. "virtualBucket": ""
  14. },
  15. "object": {
  16. "deltaSize": 122539,
  17. "eTag": "688A7BF4F233DC9C88A80BF985AB7329",
  18. "key": "image/a.jpg",
  19. "size": 122539
  20. },
  21. "ossSchemaVersion": "1.0",
  22. "ruleId": "9adac8e253828f4f7c0466d941fa3db81161e853"
  23. },
  24. "region": "cn-shanghai",
  25. "requestParameters": {
  26. "sourceIPAddress": "140.205.128.221"
  27. },
  28. "responseElements": {
  29. "requestId": "58F9FF2D3DF792092E12044C"
  30. },
  31. "userIdentity": {
  32. "principalId": "262561392693583141"
  33. }
  34. }
  35. ]
  36. }

Log Service トリガー

詳細については、「Log Service トリガー」をご覧ください。

トリガーの設定

トリガーの例: slsTrigger.yml

  1. triggerConfig:
  2. sourceConfig:
  3. logstore: "etl-log"
  4. jobConfig:
  5. maxRetryTime: 3
  6. triggerInterval: 60
  7. functionParameter:
  8. a: "b"
  9. c: "d"
  10. logConfig:
  11. project: "ali-fc-test"
  12. logstore: "test-store"
  13. enable: true

トリガーパラメーターの説明:

  • sourceConfig はデータソース設定パラメーターを示し、次の属性を含みます。
    • logstore: データソースとして使用される Log Service の Logstore 名。Log Service は、定期的にこの Logstore をサブスクライブし、Function Compute にデータを送信してカスタム処理します。このパラメーターは、一度作成されたら変更できません。詳細については、「Logstore の管理」をご覧ください。
  • jobConfig はタスク設定パラメーターを示し、次の属性を含みます。
    • triggerInterval: Log Service が関数実行をトリガーする間隔。指定可能な値: [3, 600] (単位: 秒)。このパラメーターで、Log Service が関数の呼び出しをトリガーする間隔を指定します。たとえば triggerInterval: 60 は、60 秒毎に直近 60 秒に各シャードに書き込まれたデータ位置を読み取ります。増分データがこの関数の実行をトリガーします。この関数の中では、ユーザー定義のロジックがシャードのデータを読み取り、計算を実行します。Logstore シャードのトラフィック量が大きい (1 Mbit/s 以上) 場合、トリガー間隔を短くして、関数 1 回ごとの処理データ量を適量に抑えることを推奨します。詳細は、「シャードの分割」をご覧ください。
    • maxRetryTime: 1 回のトリガーで許される再試行の回数。指定可能な値: [0, 100]。エラー (権限不足、ネットワーク障害、関数の実行時例外など) が発生し、かつ、試行回数が最大値に達しても実行が成功しない場合、Log Service が設定されたトリガー間隔に従って関数実行をトリガーするには、関数を次回実行する前にトリガー間隔分の時間が経過している必要があります。ビジネスに対する再試行の影響は、関数コードの実装ロジックによって変わります。
  • functionParameter: Log Service は、関数の入力イベントパラメーターの一部として、この設定内容を使用します。使用方法は、関数のカスタムロジックによって決まり、関数の種類によって、設定内容に対する要件は異なります。標準提供の関数テンプレートの大半について、パラメーターを入力する際には説明書をお読みください。値はデフォルトでは、空 ({}) です。
  • logConfig には、ログ設定を指定します。次の属性を含みます。
    • {project}: Log Service のプロジェクト名。詳細については、「プロジェクトの作成」をご覧ください。
    • logstore: ログが保存されている Logstore 名。
  • enable は、トリガーが有効かどうかを示します。指定可能な値: true または false。

イベント形式

  1. {
  2. "parameter":{
  3. "a":"b",
  4. "c":"d"
  5. },
  6. "source":{
  7. "endpoint":"http://cn-shanghai-intranet.log.aliyuncs.com",
  8. "projectName":"vangie-fc-test",
  9. "logstoreName":"fc-test",
  10. "shardId":0,
  11. "beginCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNg==",
  12. "endCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNw=="
  13. },
  14. "jobName":"05c79f637c6b46eaa85911cae032cf47551af7bb",
  15. "taskId":"d22697c0-2a41-4d35-b27c-dccec8856768",
  16. "cursorTime":1523323454
  17. }

タイムトリガー

トリガーの設定

詳細については、「タイムトリガー」をご覧ください。

トリガーの例: timerTrigger.yml

  1. triggerConfig:
  2. payload: "aaaaa"
  3. cronExpression: "0 1/1000 * * * *"
  4. enable: true

トリガーパラメーターの説明:

  • payload はトリガーされるイベントの内容で、任意のテキスト形式をサポートしています。関数がトリガーされるたびに、入力パラメーターとして payload が渡されます。
  • cronExpression は Cron 式です。詳細については、Cron 式をご覧ください。
  • enable はトリガーが有効かどうかを示します。指定可能な値: true または false。

イベント形式

  1. {
  2. "triggerTime":"2018-04-10T01:31:00Z",
  3. "triggerName":"t1",
  4. "payload":"abcde"
  5. }

CDN イベントトリガー

詳細については、「CDN イベントトリガー」をご覧ください。

トリガーの設定

トリガーの例:cdn_events_trigger.yml

  1. triggerConfig:
  2. eventName: "LogFileCreated"
  3. eventVersion: "1.0.0"
  4. notes: "cdn events trigger test"
  5. filter:
  6. domain: {"www.taobao.com","www.tmall.com"}

トリガーパラメーターの説明

  • eventName は、関数の実行をトリガーする CDN イベントです。
  • eventVersion は、関数の実行をトリガーする CDN イベントのバージョンです。
  • notes は、CDN イベントの説明です。
  • filter はフィルターです。

次の表に示す eventName、eventVersion および filter のキーに対応しています。

イベント名 イベントのバージョン フィルターキー 説明
CachedObjectsRefreshed 1.0.0 domain RefreshObjectCaches 参照。
CachedObjectsBlocked 1.0.0 domain CDN リソースをブロック中
CachedObjectsPushed 1.0.0 domain PushObjectCache 参照。
LogFileCreated 1.0.0 domain DescribeCdnDomainLogs 参照。
CdnDomainStarted 1.0.0 domain StartCdnDomain 参照。
CdnDomainStopped 1.0.0 domain StopCdnDomain 参照。

フィルターには、キーと値の組み合わせを少なくとも 1 つは指定する必要があります。書式は次の通りです。

  1. filter:
  2. key1: {value a, value b}
  3. key2: {value c, value d}

イベント形式

CachedObjectsRefreshed イベント、CachedObjectsPushed イベント、CachedObjectsBlocked イベントの形式:

  1. {
  2. "events": [
  3. {
  4. "eventName": "CachedObjectsRefreshed",
  5. "eventVersion": "1.0.0",
  6. "eventSource": "cdn",
  7. "region": "cn-hangzhou",
  8. "eventTime": "2018-03-16T14:19:55+08:00",
  9. "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",
  10. "resource": {
  11. "domain": "example.com"
  12. },
  13. "eventParameter": {
  14. "objectPath": [
  15. "/2018/03/16/13/33b430c57e7.mp4",
  16. "/2018/03/16/14/4ff6b9bd54d.mp4"
  17. ],
  18. "createTime": 1521180769,
  19. "domain": "example.com",
  20. "completeTime": 1521180777,
  21. "objectType": "File",
  22. "taskId": 2089687230
  23. },
  24. "userIdentity": {
  25. "aliUid": "1xxxxxxxxxx"
  26. }
  27. }
  28. ]
  29. }

LogFileCreated イベントの形式:

  1. {
  2. "events": [
  3. {
  4. "eventName": "LogFileCreated",
  5. "eventSource": "cdn",
  6. "region": "cn-hangzhou",
  7. "eventVersion": "1.0.0",
  8. "eventTime": "2018-06-14T15:31:49+08:00",
  9. "userIdentity": {
  10. "aliUid": "1xxxxxxxxxxxx"
  11. },
  12. "resource": {
  13. "domain": "example.com"
  14. },
  15. "eventParameter": {
  16. "domain": "example.com",
  17. "endTime": 1528959900,
  18. "fileSize": 1788115,
  19. "filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx",
  20. "startTime": 1528959600
  21. },
  22. "traceId": "c6459282-6a4d-4413-894c-e4ea39686738"
  23. }
  24. ]
  25. }

CdnDomainStartedイベント、CdnDomainStopped イベントの形式:

  1. {
  2. "events": [
  3. {
  4. "eventName": "CdnDomainStarted",
  5. "eventVersion": "1.0.0",
  6. "eventSource": "cdn",
  7. "region": "cn-hangzhou",
  8. "eventTime": "2018-03-16T14:19:55+08:00",
  9. "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",
  10. "resource": {
  11. "domain": "chongshi.alicdn.com"
  12. },
  13. "eventParameter": {
  14. "domain": "chongshi.alicdn.com",
  15. "status": "online"
  16. },
  17. "userIdentity": {
  18. "aliUid": "12345678"
  19. }
  20. }
  21. ]
  22. }

詳細については、「CDN イベントトリガー」をご覧ください。

MNS トピックトリガー

トリガーの設定

詳細については、「MNS トピックトリガー」をご覧ください。

トリガーの例: mnsTrigger.yml

  1. triggerConfig:
  2. notifyContentFormat: STREAM
  3. notifyStrategy: BACKOFF_RETRY
  4. filterTag: testTag

トリガーパラメーターの説明:

パラメーター 制約事項 デフォルト値 説明
notifyContentFormat STREAM, JSON STREAM String オプション。関数の入力パラメーターとしてプッシュされたイベントの形式。
notifyStrategy BACKOFF_RETRY, EXPONENTIAL_DECAY_RETRY BACKOFF_RETRY String オプション。詳細については、メッセージのプッシュ計画参照。
filterTag 16 文字以内の文字列 なし String オプション。サブスクライブ中のメッセージ (整合するタグのメッセージのみプッシュ) をフィルタリングするためのタグ。関数へのメッセージを制限しない場合、設定不要。

イベント形式

詳細については、「MNS トピックトリガー」をご覧ください。

Table Store トリガー

詳細については、「Table Store トリガー」をご覧ください。

イベント形式

Table Store トリガーは、CBOR (Concise Binary Object Representation) 形式を使用して増分データをエンコードし、Function Compute のイベントを構築します。増分データイベントの形式は次の通りです。

  1. {
  2. "Version": "string",
  3. "Records": [
  4. {
  5. "Type": "string",
  6. "Info": {
  7. "Timestamp": int64
  8. },
  9. "PrimaryKey": [
  10. {
  11. "ColumnName": "string",
  12. "Value": formated_value
  13. }
  14. ],
  15. "Columns": [
  16. {
  17. "Type": "string",
  18. "ColumnName": "string",
  19. "Value": formated_value,
  20. "Timestamp": int64
  21. }
  22. ]
  23. }
  24. ]
  25. }

トリガーパラメーターの説明:

  • Version はペイロードのバージョン番号です。値: Sync-v1。
  • Records は、テーブル内の増分データ行の集合を示し、次の属性を含みます。
    • Type: データ行の型で、PutRow、UpdateRow および deleteRow を含みます。
    • Info: データ行の基本的な情報で、次の属性を含みます。
      • Timestamp: 最後にこの行が更新された時刻 (UTC)。
      • PrimaryKey: プライマリキーの配列で、次の属性を含みます。
        • ColumnName: プライマリキー列の名前。
        • Value: プライマリキー列の内容で、Integer、String および Blob をサポートしています。
      • Columns: 列属性の配列で、次の属性を含みます。
        • Type: 列属性で、Put、DeleteOneVersion および DeleteAllVersions を含みます。
        • ColumnName: カラム名。
        • Value: 列の値で、Integer、Boolean、Double、String および Blob のデータ型をサポートしています。
        • Timestamp: 最後にこの列が更新された時刻 (UTC)。

イベントの例:

  1. {
  2. "Version": "Sync-v1",
  3. "Records": [
  4. {
  5. "Type": "PutRow",
  6. "Info": {
  7. "Timestamp": 1506416585740836
  8. },
  9. "PrimaryKey": [
  10. {
  11. "ColumnName": "pk_0",
  12. "Value": 1506416585881590900
  13. },
  14. {
  15. "ColumnName": "pk_1",
  16. "Value": "2017-09-26 17:03:05.8815909 +0800 CST"
  17. },
  18. {
  19. "ColumnName": "pk_2",
  20. "Value": 1506416585741000
  21. }
  22. ],
  23. "Columns": [
  24. {
  25. "Type": "Put",
  26. "ColumnName": "attr_0",
  27. "Value": "hello_table_store",
  28. "Timestamp": 1506416585741
  29. },
  30. {
  31. "Type": "Put",
  32. "ColumnName": "attr_1",
  33. "Value": 1506416585881590900,
  34. "Timestamp": 1506416585741
  35. }
  36. ]
  37. }
  38. ]
  39. }

API Gateway トリガー

詳細については、「API Gateway トリガー」をご覧ください。

イベント形式

入力形式

Function Compute を API Gateway のバックエンドサービスに使用する場合、API Gateway は固定的なマッピング構造を使用して、Function Compute の入力パラメーター event にリクエストパラメーターを送ります。Function Compute は、次の構造によって必要なパラメーターを入手し処理します。リクエストパラメーターのマッピング構造は次の通りです。

  1. {
  2. "path":"api request path",
  3. "httpMethod":"request method name",
  4. "headers":{all headers,including system headers},
  5. "queryParameters":{query parameters},
  6. "pathParameters":{path parameters},
  7. "body":"string of request payload",
  8. "isBase64Encoded":"true|false, indicate if the body is Base64-encode"
  9. }

トリガーパラメーターの説明:

  • isBase64Encoded=true は、API Gateway が Function Compute に送信する body 内容を Base64 形式でエンコードすることを示します。Function Compute は、body 内容を Base64 形式でデコードして使用します。
  • isBase64Encoded=false は、API Gateway が Function Compute に送信する body 内容を Base64 形式でエンコードしないことを示します。

イベントの例:

  1. {
  2. "body":"",
  3. "headers":{
  4. "X-Ca-Api-Gateway":"BDB46B3A-71A7-447B-B20B-28C594426407",
  5. "X-Forwarded-For":"106.11.231.99"
  6. },
  7. "httpMethod":"GET",
  8. "isBase64Encoded":false,
  9. "path":"/fc",
  10. "pathParameters":{
  11. },
  12. "queryParameters":{
  13. }
  14. }

出力形式

API Gateway が出力内容を解析できるようにするため、Funciton Compute は出力内容を標準化しています。たとえば、出力内容を JSON 形式で返すこともできます。

  1. {
  2. "isBase64Encoded":true|false,
  3. "statusCode":httpStatusCode,
  4. "headers":{response headers},
  5. "body":"..."
  6. }

トリガーパラメーターの説明:

  • body 内容がバイナリデータの場合、Function Compute で body 内容を Base64 でエンコードし、isBase64Encoded=true を設定する必要があります。API Gateway は、isBase64Encoded=true に設定された body 内容を Base64 でデコードし、クライアントに送信します。
  • body を Base64 形式でエンコードする必要がない場合、isBase64Encodedfalse に設定することができます。
  • Function Compute の Node.js バージョンでは、状況によっては callback を設定する必要があります。
    • リクエスト成功メッセージを返す場合: callback{null,{"statusCode":200,"body":"..."}}
    • リクエスト例外メッセージを返す場合: callback{new Error('internal server error'),null}
    • クライアントエラーを返す場合: callback{null,{"statusCode":400,"body":"param error"}}
  • Function Compute によって返される結果の形式がこれらの要件に適合しない場合は、API Gateway はクライアントに 503 Service Unavailable を返します。

DataHub トリガー

イベント形式

  1. {
  2. "eventSource": "acs:datahub",
  3. "eventName": "acs:datahub:putRecord",
  4. "eventSourceARN": "/projects/test_project_name/topics/test_topic_name",
  5. "region": "cn-hangzhou",
  6. "records": [
  7. {
  8. "eventId": "0:12345",
  9. "systemTime": 1463000123000,
  10. "data": "[\"col1's value\",\"col2's value\"]"
  11. },
  12. {
  13. "eventId": "0:12346",
  14. "systemTime": 1463000156000,
  15. "data": "[\"col1's value\",\"col2's value\"]"
  16. }
  17. ]
  18. }

トリガーパラメーターの説明:

  • eventSource はイベントソースを示します。値: acs:datahub。
  • eventName はイベント名を示します。値: acs:datahub:putRecord。
  • eventSourceARN はイベントソース ID を示し、DataHub のプロジェクト名とトピック名を含みます。例: /projects/test_project_name/topics/test_topic_name。
  • region は、イベントソースの DataHub のリージョンです。例: cn-hangzhou。詳細は、「リージョンとゾーン」をご覧ください。
  • records はイベントに含まれるレコードのリストで、次のキー値を含みます。
    • eventId: レコード ID。形式: shardId:SequenceNumber。
    • systemTime: このイベントが DataHub に保存を開始された時のタイムスタンプ。
    • data: イベントのデータ内容。タプル型のトピックでは、このフィールドのデータ型は “List” です。ここで、リスト型の各要素は、文字列型のデータの各トピックの各フィールド値に対応します。ブロブ型のトピックでは、このフィールドのデータ型は “String” です。

IoT トリガー

詳細については、「IoT トリガー」をご覧ください。

イベント形式

IoT Hub が Function Compute に送信するイベント内容は、カプセル化されていない IoT メッセージ内容です。たとえば、次の Java プログラム例を使用して IoT トピックにメッセージをプッシュすることができます。

  1. PubRequest request = new PubRequest();
  2. request.setProductKey("VHo5FRjudkZ");
  3. request.setMessageContent(Base64.getEncoder().encodeToString("{\"hello\":\"world\"}".getBytes()));
  4. request.setTopicFullName("/VHo5FRjudkZ/deviceName/update");
  5. request.setQos(0);
  6. PubResponse response = client.getAcsResponse(request);
  7. System.out.println(response.getSuccess());
  8. System.out.println(response.getErrorMessage());

Function Compute で受け取るイベントは次の通りです。

  1. {
  2. "hello": "world"
  3. }

参考文献