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

Context 对象 (Python)

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

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

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

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

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

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

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

示例

考虑以下 Python 示例。它有一个函数,此函数也是处理程序。处理程序通过作为参数传递的 context 对象接收运行时信息。

Copy
from __future__ import print_function import time def get_my_log_stream(event, context):     print("Log stream name:", context.log_stream_name)    print("Log group name:", context.log_group_name)    print("Request ID:",context.aws_request_id)    print("Mem. limits(MB):", context.memory_limit_in_mb) # Code will execute quickly, so we add a 1 second intentional delay so you can see that in time remaining value. time.sleep(1)    print("Time remaining (MS):", context.get_remaining_time_in_millis())

此示例中的处理程序代码只打印部分运行时信息。每个打印语句均在 CloudWatch 中创建一个日志条目。如果您使用 Lambda 控制台调用函数,则控制台会显示日志。利用 from __future__ 语句,可以编写与 Python 2 或 3 兼容的代码。

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

  1. 在控制台中,使用 hello-world 蓝图创建 Lambda 函数。在 runtime 中,选择 Python 2.7。在 Handler 中,将 lambda_function.lambda_handler 替换为 lambda_function.get_my_log_stream。有关如何执行此操作的说明,请参阅 步骤 2.1:创建 Hello World Lambda 函数

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

以下部分提供了可用的 context 对象方法和属性的列表,可使用这些方法和属性来获取 Lambda 函数的运行时信息。

Context 对象方法 (Python)

context 对象提供了以下方法:

get_remaining_time_in_millis()

返回在 AWS Lambda 终止函数前剩余的执行时间(以毫秒为单位)。

Context 对象属性 (Python)

context 对象提供了以下属性:

function_name

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

function_version

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

invoked_function_arn

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

memory_limit_in_mb

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

aws_request_id

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

注意

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

log_group_name

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

log_stream_name

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

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

identity

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

  • identity.cognito_identity_id

  • identity.cognito_identity_pool_id

client_context

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

  • client_context.client.installation_id

  • client_context.client.app_title

  • client_context.client.app_version_name

  • client_context.client.app_version_code

  • client_context.client.app_package_name

  • client_context.custom

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

  • client_context.env

    由 AWS 移动软件开发工具包提供的环境信息的 dict