AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Lambda 函数处理程序 (Node.js)

在创建 Lambda 函数时,需要指定一个处理程序(您代码中的一个函数),以供 AWS Lambda 在服务执行代码时调用。在使用 Node.js 创建处理程序函数时,请使用以下一般语法。

Copy
exports.myHandler = function(event, context,) { ... }

回调参数是可选的,取决于您是否希望将信息返回到调用方。

Copy
exports.myHandler = function(event, context, callback) { ... // Use callback() and return information to the caller. }

在该语法中,需要注意以下方面:

  • event - AWS Lambda 使用此参数将事件数据传递到处理程序。

  • context - AWS Lambda 使用此参数为您的处理程序提供正在执行的 Lambda 函数的运行时信息。有关更多信息,请参阅 Context 对象 (Node.js)

  • callback - 您可以使用可选的回调将信息返回给调用方,否则返回值为 null。有关更多信息,请参阅 使用回调参数

    注意

    只有 Node.js 运行时 v6.10 和 v4.3 支持回调。如果您使用运行时 v0.10.42,则需要使用 context 方法 (done、succeed 和 fail) 正确终止 Lambda 函数。有关信息,请参阅 使用较早的 Node.js 运行时 v0.10.42

  • myHandler - 这是 AWS Lambda 调用的函数的名称。您导出此项,使其对 AWS Lambda 可见。 假设您将此代码保存为 helloworld.js。然后,helloworld.myHandler 是处理程序。有关更多信息,请参阅 CreateFunction

    • 如果使用了 RequestResponse 调用类型(同步执行),则 AWS Lambda 会将 Node.js 函数调用的结果返回到调用 Lambda 函数的客户端(在对调用请求的 HTTP 响应中,已序列化为 JSON)。例如,AWS Lambda 控制台使用 RequestResponse 调用类型,因此当您使用该控制台测试调用函数时,该控制台将显示返回值。

      如果处理程序未返回任何内容,AWS Lambda 将返回空值。

    • 如果使用了 Event 调用类型(异步执行),则会放弃该值。

示例

请考虑以下 Node.js 示例代码。

Copy
exports.myHandler = function(event, context, callback) { console.log("value1 = " + event.key1); console.log("value2 = " + event.key2); callback(null, "some success message"); // or // callback("some error type"); }

此示例有一个函数,该函数同时也是处理程序。在该函数中,console.log() 语句会将一些传入的事件数据记录到 CloudWatch Logs。在调用回调时,Lambda 函数仅在 Node.js 事件循环为空(Node.js 事件循环与作为参数传递的事件不同)时退出。

注意

如果您使用运行时 v0.10.42,则需要使用 context 方法 (done、succeed 和 fail) 正确终止 Lambda 函数。有关更多信息,请参阅 使用较早的 Node.js 运行时 v0.10.42

上传此代码并将其作为 Lambda 函数(控制台)进行测试

  1. 在控制台中,使用以下信息创建 Lambda 函数:

    • 使用 hello-world 蓝图。

    • 建议将 nodejs6.10 指定为 runtime,不过您也可以选择 nodejs4.3。所提供的代码示例对于这两个版本都适用。

    • Handler 中,将 index.handler 替换为 exports.myHandler

    有关使用控制台创建 Lambda 函数的说明,请参阅 步骤 2.1:创建 Hello World Lambda 函数

  2. 将模板代码替换为本部分中提供的代码,然后创建函数。

  3. 使用 Lambda 控制台中提供的名为 Hello WorldSample event template 测试 Lambda 函数。有关如何执行此操作的说明,请参阅 步骤 2.2:手动调用 Lambda 函数并验证结果、日志和指标

使用回调参数

Node.js 运行时 v4.3 和 v6.10 支持可选的 callback 参数。您可以使用它显式将信息返回到调用方。一般语法为:

Copy
callback(Error error, Object result);

其中:

  • error - 是可选参数,可用于提供失败的 Lambda 函数执行的结果。Lambda 函数成功时,您可以传递 null 作为第一个参数。

  • result - 是可选参数,可用于提供成功的函数执行的结果。提供的 result 必须兼容 JSON.stringify。如果提供了错误,则忽略此参数。

注意

使用 callback 参数是可选的。如果您不使用可选的 callback 参数,则行为与您不使用任何参数调用 callback() 的情况相同。您可以在代码中指定 callback 以将信息返回到调用方。

如果您在代码中不使用 callback,AWS Lambda 将隐式调用它,返回值是 null

在调用回调(显式或隐式)时,AWS Lambda 继续执行 Lambda 函数调用,直至 Node.js 事件循环为空。

以下为示例回调:

Copy
callback(); // Indicates success but no information returned to the caller. callback(null); // Indicates success but no information returned to the caller. callback(null, "success"); // Indicates success with information returned to the caller. callback(error); // Indicates error with error information returned to the caller.

AWS Lambda 将任何非 null 的 error 参数值视为已处理的异常。

请注意以下几点:

  • 无论在调用 Lambda 函数时指定了什么调用类型(请参阅 Invoke),回调方法自动将 error 的非 null 的字符串表示形式记录到与 Lambda 函数关联的 Amazon CloudWatch Logs 流中。

  • 如果同步调用了 Lambda 函数(使用 RequestResponse 调用类型),则回调返回响应正文,如下所示:

    • 如果 error 为 null,则将响应正文设置为 result 的字符串表示形式。

    • 如果 error 不为 null,则 error 值将填充到响应正文中。

注意

在调用 callback(error, null)(和 callback(error))时,Lambda 将记录错误对象的前 256 KB。对于较大的错误对象,AWS Lambda 截断日志并在错误对象旁边显示文本 Truncated by Lambda

本页内容: