関数を作成するときは、コード実行中に Function Compute (FC) によって呼び出すことができるイベントハンドラ関数を指定する必要があります。Node.js でのハンドラ関数のシグネチャは次の通りです。
exports.myHandler = function(event, context, callback) {
...
// Use callback() to return information to the caller.
}
myHandler は、FC が呼び出す関数の名前です。FC から見えるように、この関数をエクスポートする必要があります。たとえば、エントリポイントが helloworld.js にある場合、helloworld.myHandler ({filename}.{handlername}) が関数ハンドラです。詳細は、「関数の作成」をご参照ください。
- event:Buffer 型のイベントぺイロードです。
- context:呼び出された関数の有用なランタイム情報を含む Context 型オブジェクトです。
- callback:関数呼び出しを停止して、呼び出し元にデータを返して FC に通知する関数です。
関数例:
exports.myHandler = function(event, context, callback) {
// Assume that the given event is a JSON string.
var eventObj = JSON.parse(event.toString());
console.log("value1 = " + eventObj.key1);
console.log("value2 = " + eventObj.key2);
// The first callback parameter is of the error type and null indicates that the function execution is successful.
callback(null, "some success message");
// or
// callback("some error type");
}
上記の例は、イベントハンドラ関数を示しています。指定された event は、まず JSON オブジェクトに変換され、 console.log() 文によってイベントデータが Alibaba Cloud Log Service に保存されます。callback が呼び出されると、関数は終了し、”some error message” が返されます。
event の形式
関数が呼び出されると、FC は、InvokeFunction リクエストの本文を関数に渡します。FC は event の形式を制限しません。ビジネス要件に基づいて、JSON、XML、Image、Video などの形式を選択できます。event の解釈は開発者によって完全に制御されています。
次の例は、OSS トリガーを使用した場合、event が JSON 形式であることを示しています。
{
"events": [
{
"eventName": "ObjectCreated:PutObject",
"eventSource": "acs:oss",
"eventTime": "2017-04-21T12:46:37.000Z",
"eventVersion": "1.0",
"oss": {
"bucket": {
"arn": "acs:oss:cn-shanghai:123456789:bucketname",
"name": "testbucket",
"ownerIdentity": "123456789",
"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": "123456789"
}
}
]
}
callback の使用
callback のパラメーターは、関数の実行結果を呼び出し側に返すために使用されます。callback 関数のシグネチャは、次のように定義されます。
callback(Error error, Object result)
callback が呼び出されると、FC は呼び出しを終了します。
error:オプションのパラメーターで、関数が失敗したことを示し、呼び出し元にエラー情報を返します。
result:オプションのパラメーターで、成功した関数の実行結果を呼び出し元に返します。error パラメーターが callback に渡された場合、このパラメーターは無視されます。
callback の使用例を次に示します。
callback(); // function execution is successful with no information to return.
callback(null); // function execution is successful with no information to return.
callback(null, null); // function execution is successful with no information to return.
callback(null, "success"); // function execution is successful with a "success" string as returned value.
callback(new Error("error")); // function execution fails with an "error" message as returned value.
callback(new Error("error"), "ignored message") // function execution fails with an "error" message and the second parameter is ignored.
callback("error"); // function execution fails with an "error" message
注意:
- 関数の実行が完了したことを FC に通知するには、callback 関数を呼び出す必要があります。そうしないと、タイムアウトエラーが発生するまで関数の実行を終了できません。
- callback の error パラメーターを使用してエラーメッセージが返されると、FC はサービスに関連付けられている LogStore にエラーメッセージを自動的に記録します。エラーメッセージのサイズが 256 KB より大きい場合は、最初の 256 KB のデータのみが格納され、”Truncated by FunctionCompute” というメッセージが表示されます。
- 関数が同期的に呼び出されると、エラーメッセージまたは結果データが HTTP の本文に追加され、クライアントに返されます。関数が非同期に呼び出されると、エラーメッセージまたは結果データは返されません。