トリガーの種類によって、パラメーター設定ファイルの形式は異なります。ここでは、各種の形式の例と、そこでサポートされる属性について説明します。また、イベントトリガーから関数インターフェイスに渡されるイベントはトリガーの種類によって異なるため、イベントオブジェクトの形式についても説明します。
現在、次の 2 種類のトリガーに対応しています。
イベントソースサービスで作成されるトリガー: API Gateway、DataHub および IoT
Function Compute で作成されるトリガー: HTTP、OSS、Log Service、タイム、CDN イベント、MNS トピック および Table Store
Function Compute で作成されるトリガーの場合は、fcli ツールを使用してシェルモードに入り、mkt
コマンドを実行してトリガーを作成します。このコマンドのパラメーターは次の通りです。
>>> mkt --help
--etag string trigger etag for update
--help
-r, --invocation-role string invocation role
-s, --source-arn string event source arn
-c, --trigger-config string trigger config file
-t, --type string trigger type, support oss now (default "oss")
注意:
--trigger-config
パラメーターで指定する設定ファイルは、トリガーによって形式が変わります。
HTTP トリガー
HTTP トリガーは、関数シグネチャがリクエストとレスポンスのオブジェクトであり、イベントオブジェクトではないところが他のトリガーとは違います。そのため、HTTP トリガーは、イベント形式を使用しません。
詳細については、「HTTP トリガー」をご覧ください。
トリガーの設定
トリガーの例: httpTrigger.yml
triggerConfig:
authType: anonymous
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
triggerConfig:
events:
- oss:ObjectCreated:PostObject
- oss:ObjectCreated:PutObject
filter:
key:
prefix: source/
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
: 後端と一致する文字列
イベント形式
{
"events": [
{
"eventName": "ObjectCreated:PutObject",
"eventSource": "acs:oss",
"eventTime": "2017-04-21T12:46:37.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shanghai:1237050315505689:bucketname",
"name": "bucketname",
"ownerIdentity": "1237050315505689",
"virtualBucket": ""
},
"object": {
"deltaSize": 122539,
"eTag": "688A7BF4F233DC9C88A80BF985AB7329",
"key": "image/a.jpg",
"size": 122539
},
"ossSchemaVersion": "1.0",
"ruleId": "9adac8e253828f4f7c0466d941fa3db81161e853"
},
"region": "cn-shanghai",
"requestParameters": {
"sourceIPAddress": "140.205.128.221"
},
"responseElements": {
"requestId": "58F9FF2D3DF792092E12044C"
},
"userIdentity": {
"principalId": "262561392693583141"
}
}
]
}
Log Service トリガー
詳細については、「Log Service トリガー」をご覧ください。
トリガーの設定
トリガーの例: slsTrigger.yml
triggerConfig:
sourceConfig:
logstore: "etl-log"
jobConfig:
maxRetryTime: 3
triggerInterval: 60
functionParameter:
a: "b"
c: "d"
logConfig:
project: "ali-fc-test"
logstore: "test-store"
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。
イベント形式
{
"parameter":{
"a":"b",
"c":"d"
},
"source":{
"endpoint":"http://cn-shanghai-intranet.log.aliyuncs.com",
"projectName":"vangie-fc-test",
"logstoreName":"fc-test",
"shardId":0,
"beginCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNg==",
"endCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNw=="
},
"jobName":"05c79f637c6b46eaa85911cae032cf47551af7bb",
"taskId":"d22697c0-2a41-4d35-b27c-dccec8856768",
"cursorTime":1523323454
}
タイムトリガー
トリガーの設定
詳細については、「タイムトリガー」をご覧ください。
トリガーの例: timerTrigger.yml
triggerConfig:
payload: "aaaaa"
cronExpression: "0 1/1000 * * * *"
enable: true
トリガーパラメーターの説明:
payload
はトリガーされるイベントの内容で、任意のテキスト形式をサポートしています。関数がトリガーされるたびに、入力パラメーターとして payload が渡されます。cronExpression
は Cron 式です。詳細については、Cron 式をご覧ください。enable
はトリガーが有効かどうかを示します。指定可能な値: true または false。
イベント形式
{
"triggerTime":"2018-04-10T01:31:00Z",
"triggerName":"t1",
"payload":"abcde"
}
CDN イベントトリガー
詳細については、「CDN イベントトリガー」をご覧ください。
トリガーの設定
トリガーの例:cdn_events_trigger.yml
triggerConfig:
eventName: "LogFileCreated"
eventVersion: "1.0.0"
notes: "cdn events trigger test"
filter:
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 つは指定する必要があります。書式は次の通りです。
filter:
key1: {value a, value b}
key2: {value c, value d}
イベント形式
CachedObjectsRefreshed イベント、CachedObjectsPushed イベント、CachedObjectsBlocked イベントの形式:
{
"events": [
{
"eventName": "CachedObjectsRefreshed",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"objectPath": [
"/2018/03/16/13/33b430c57e7.mp4",
"/2018/03/16/14/4ff6b9bd54d.mp4"
],
"createTime": 1521180769,
"domain": "example.com",
"completeTime": 1521180777,
"objectType": "File",
"taskId": 2089687230
},
"userIdentity": {
"aliUid": "1xxxxxxxxxx"
}
}
]
}
LogFileCreated イベントの形式:
{
"events": [
{
"eventName": "LogFileCreated",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventVersion": "1.0.0",
"eventTime": "2018-06-14T15:31:49+08:00",
"userIdentity": {
"aliUid": "1xxxxxxxxxxxx"
},
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com",
"endTime": 1528959900,
"fileSize": 1788115,
"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",
"startTime": 1528959600
},
"traceId": "c6459282-6a4d-4413-894c-e4ea39686738"
}
]
}
CdnDomainStartedイベント、CdnDomainStopped イベントの形式:
{
"events": [
{
"eventName": "CdnDomainStarted",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",
"resource": {
"domain": "chongshi.alicdn.com"
},
"eventParameter": {
"domain": "chongshi.alicdn.com",
"status": "online"
},
"userIdentity": {
"aliUid": "12345678"
}
}
]
}
詳細については、「CDN イベントトリガー」をご覧ください。
MNS トピックトリガー
トリガーの設定
詳細については、「MNS トピックトリガー」をご覧ください。
トリガーの例: mnsTrigger.yml
triggerConfig:
notifyContentFormat: STREAM
notifyStrategy: BACKOFF_RETRY
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 のイベントを構築します。増分データイベントの形式は次の通りです。
{
"Version": "string",
"Records": [
{
"Type": "string",
"Info": {
"Timestamp": int64
},
"PrimaryKey": [
{
"ColumnName": "string",
"Value": formated_value
}
],
"Columns": [
{
"Type": "string",
"ColumnName": "string",
"Value": formated_value,
"Timestamp": int64
}
]
}
]
}
トリガーパラメーターの説明:
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)。
イベントの例:
{
"Version": "Sync-v1",
"Records": [
{
"Type": "PutRow",
"Info": {
"Timestamp": 1506416585740836
},
"PrimaryKey": [
{
"ColumnName": "pk_0",
"Value": 1506416585881590900
},
{
"ColumnName": "pk_1",
"Value": "2017-09-26 17:03:05.8815909 +0800 CST"
},
{
"ColumnName": "pk_2",
"Value": 1506416585741000
}
],
"Columns": [
{
"Type": "Put",
"ColumnName": "attr_0",
"Value": "hello_table_store",
"Timestamp": 1506416585741
},
{
"Type": "Put",
"ColumnName": "attr_1",
"Value": 1506416585881590900,
"Timestamp": 1506416585741
}
]
}
]
}
API Gateway トリガー
詳細については、「API Gateway トリガー」をご覧ください。
イベント形式
入力形式
Function Compute を API Gateway のバックエンドサービスに使用する場合、API Gateway は固定的なマッピング構造を使用して、Function Compute の入力パラメーター event
にリクエストパラメーターを送ります。Function Compute は、次の構造によって必要なパラメーターを入手し処理します。リクエストパラメーターのマッピング構造は次の通りです。
{
"path":"api request path",
"httpMethod":"request method name",
"headers":{all headers,including system headers},
"queryParameters":{query parameters},
"pathParameters":{path parameters},
"body":"string of request payload",
"isBase64Encoded":"true|false, indicate if the body is Base64-encode"
}
トリガーパラメーターの説明:
isBase64Encoded=true
は、API Gateway が Function Compute に送信するbody
内容を Base64 形式でエンコードすることを示します。Function Compute は、body
内容を Base64 形式でデコードして使用します。isBase64Encoded=false
は、API Gateway が Function Compute に送信するbody
内容を Base64 形式でエンコードしないことを示します。
イベントの例:
{
"body":"",
"headers":{
"X-Ca-Api-Gateway":"BDB46B3A-71A7-447B-B20B-28C594426407",
"X-Forwarded-For":"106.11.231.99"
},
"httpMethod":"GET",
"isBase64Encoded":false,
"path":"/fc",
"pathParameters":{
},
"queryParameters":{
}
}
出力形式
API Gateway が出力内容を解析できるようにするため、Funciton Compute は出力内容を標準化しています。たとえば、出力内容を JSON 形式で返すこともできます。
{
"isBase64Encoded":true|false,
"statusCode":httpStatusCode,
"headers":{response headers},
"body":"..."
}
トリガーパラメーターの説明:
body
内容がバイナリデータの場合、Function Compute でbody
内容を Base64 でエンコードし、isBase64Encoded=true
を設定する必要があります。API Gateway は、isBase64Encoded=true
に設定されたbody
内容を Base64 でデコードし、クライアントに送信します。body
を Base64 形式でエンコードする必要がない場合、isBase64Encoded
をfalse
に設定することができます。- 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 トリガー
イベント形式
{
"eventSource": "acs:datahub",
"eventName": "acs:datahub:putRecord",
"eventSourceARN": "/projects/test_project_name/topics/test_topic_name",
"region": "cn-hangzhou",
"records": [
{
"eventId": "0:12345",
"systemTime": 1463000123000,
"data": "[\"col1's value\",\"col2's value\"]"
},
{
"eventId": "0:12346",
"systemTime": 1463000156000,
"data": "[\"col1's value\",\"col2's value\"]"
}
]
}
トリガーパラメーターの説明:
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 トピックにメッセージをプッシュすることができます。
PubRequest request = new PubRequest();
request.setProductKey("VHo5FRjudkZ");
request.setMessageContent(Base64.getEncoder().encodeToString("{\"hello\":\"world\"}".getBytes()));
request.setTopicFullName("/VHo5FRjudkZ/deviceName/update");
request.setQos(0);
PubResponse response = client.getAcsResponse(request);
System.out.println(response.getSuccess());
System.out.println(response.getErrorMessage());
Function Compute で受け取るイベントは次の通りです。
{
"hello": "world"
}