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

Context 对象 (Node.js)

在执行 Lambda 函数时,它可以与 AWS Lambda 进行交互以获取有用的运行时信息,例如:

  • AWS Lambda 终止您的 Lambda 函数之前的剩余时间量(超时是 Lambda 函数配置属性之一)。

  • 与正在执行的 Lambda 函数关联的 CloudWatch 日志组和日志流。

  • 返回到调用了 Lambda 函数的客户端的 AWS 请求 ID。可以使用此请求 ID 向 AWS Support 进行任何跟进查询。

  • 如果通过 AWS 移动软件开发工具包调用 Lambda 函数,则可了解有关调用 Lambda 函数的移动应用程序的更多信息。

AWS Lambda 通过 context 对象提供此信息,服务将此对象作为第二个参数传递给 Lambda 函数处理程序。有关更多信息,请参阅 Lambda 函数处理程序 (Node.js)

以下部分提供了使用 context 对象的示例 Lambda 函数,然后列出了所有可用的方法和属性。

示例

请考虑以下 Node.js 示例。处理程序通过 context 参数接收运行时信息。

Copy
console.log('Loading function'); exports.handler = function(event, context, callback) { //console.log('Received event:', JSON.stringify(event, null, 2)); console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); console.log('remaining time =', context.getRemainingTimeInMillis()); console.log('functionName =', context.functionName); console.log('AWSrequestID =', context.awsRequestId); console.log('logGroupName =', context.logGroupName); console.log('logStreamName =', context.logStreamName); console.log('clientContext =', context.clientContext); if (typeof context.identity !== 'undefined') { console.log('Cognito identity ID =', context.identity.cognitoIdentityId); } callback(null, event.key1); // Echo back the first key value // or // callback("some error type"); };

在本示例中,处理程序将 Lambda 函数的一些运行时信息记录到 CloudWatch。如果使用 Lambda 控制台调用该函数,控制台将在 Log output 部分中显示日志。您可使用此代码创建 Lambda 函数并使用控制台测试它。

在 AWS Lambda 控制台中测试此代码

  1. 在控制台中,使用 hello-world 蓝图创建 Lambda 函数。在 runtime 中,选择 nodejs6.10。有关如何执行此操作的说明,请参阅 步骤 2.1:创建 Hello World Lambda 函数

  2. 测试此函数,然后也可更新代码以获取更多上下文信息。

Context 对象方法 (Node.js)

context 对象提供了以下方法。

context.getRemainingTimeInMillis()

返回当前正在执行的 Lambda 函数的大约剩余执行时间(在发生超时前)。超时是 Lambda 函数配置之一。当达到超时时间时,AWS Lambda 会终止您的 Lambda 函数。

您可利用该方法在函数执行期间检查剩余时间并在运行时采取适当的纠正措施。

一般语法为:

Copy
context.getRemainingTimeInMillis();

Context 对象属性 (Node.js)

context 对象提供您可以更新的以下属性:

callbackWaitsForEmptyEventLoop

默认值为 true。此属性仅在修改回调的默认行为时有用。默认情况下,回调将等待直至 Node.js 运行时事件循环为空,然后才冻结进程并将结果返回给调用方。您可以将此属性设置为 false,以请求 AWS Lambda 在调用 callback 后立即冻结进程,即使事件循环中存在事件也是如此。AWS Lambda 将冻结进程、任何状态数据以及 Node.js 事件循环中的事件(下次调用 Lambda 函数时,如果 AWS Lambda 选择使用冻结的进程,则处理事件循环中的任何剩余事件)。有关回调的更多信息,请参阅使用回调参数

此外,context 对象提供了您可用来获取运行时信息的以下属性:

functionName

正在执行的 Lambda 函数的名称。

functionVersion

正在执行的 Lambda 函数版本。如果别名用于调用函数,function_version 将为别名指向的版本。

invokedFunctionArn

ARN 用于调用此函数。它可以是函数 ARN 或别名 ARN。非限定的 ARN 执行 $LATEST 版本,别名执行它指向的函数版本。

memoryLimitInMB

为 Lambda 函数配置的内存限制(以 MB 为单位)。您在创建 Lambda 函数时设置内存限制,并且随后可更改此限制。

awsRequestId

与请求关联的 AWS 请求 ID。这是返回到调用了 invoke 方法的客户端的 ID。

注意

如果 AWS Lambda 重试调用(例如,在处理 Kinesis 记录的 Lambda 函数引发异常的情况下)时,请求 ID 保持不变。

logGroupName

CloudWatch 日志组的名称,可从该日志组中查找由 Lambda 函数写入的日志。

logStreamName

CloudWatch 日志组的名称,可从该日志组中查找由 Lambda 函数写入的日志。每次调用 Lambda 函数时,日志流可能会更改,也可能不更改。

如果 Lambda 函数无法创建日志流,则该值为空。当向 Lambda 函数授予必要权限的执行角色未包括针对 CloudWatch 操作的权限时,可能会发生这种情况。

identity

有关 Amazon Cognito 身份提供商的信息(通过 AWS 移动软件开发工具包调用时)。它可以为空。

  • identity.cognitoIdentityId

  • identity.cognitoIdentityPoolId

有关特定移动平台准确值的更多信息,请参阅 AWS Mobile SDK for iOS Developer Guide中的身份上下文以及“适用于 Android 的 AWS 移动软件开发工具包 Developer Guide”中的身份上下文

clientContext

通过 AWS 移动软件开发工具包进行调用时的客户端应用程序和设备的相关信息。它可以为空。利用 clientContext,您可获取以下信息:

  • clientContext.client.installation_id

  • clientContext.client.app_title

  • clientContext.client.app_version_name

  • clientContext.client.app_version_code

  • clientContext.client.app_package_name

  • clientContext.Custom

    由移动客户端应用程序设置的自定义值。

  • clientContext.env.platform_version

  • clientContext.env.platform

  • clientContext.env.make

  • clientContext.env.model

  • clientContext.env.locale

有关特定移动平台准确值的更多信息,请参阅 AWS Mobile SDK for iOS Developer Guide中的客户端上下文适用于 Android 的 AWS 移动软件开发工具包 Developer Guide中的客户端上下文