Python 中的 Lambda 函数处理程序 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Python 中的 Lambda 函数处理程序

注意

对 Python 2.7 运行时的支持将于 2021 年 7 月 15 日开始结束。有关更多信息,请参阅 运行时支持策略

Lambda 函数的处理程序 是函数代码中处理事件的方法。当调用函数时,Lambda 运行处理程序方法。处理程序退出或返回响应后,可处理另一个事件。

在 Python 中创建函数处理程序时,可以使用以下一般语法:

def handler_name(event, context): ... return some_value

命名

在创建 Lambda 函数时指定的 Lambda 函数处理程序名称来自:

  • Lambda 处理程序函数所在的文件名称。

  • Python 处理程序函数的名称。

函数处理程序可随意命名;但是,在 Lambda 控制台上默认名称为 lambda_function.lambda_handler。此函数处理程序名称反映了函数名称 (lambda_handler) 以及存储处理程序代码的文件 (lambda_function.py)。

要在 Lambda 控制台中更改函数处理程序名称,请在 Runtime settings(运行时设置)窗格中选择 Edit(编辑)。


        Lambda 控制台中的函数处理程序名称。

工作原理

当 Lambda 调用函数处理程序时,Lambda 运行时会将两个参数传递给函数处理程序:

  • 第一个参数是 事件对象。事件是 JSON 格式的文档,其中包含要处理的 Lambda 函数的数据。Lambda 运行时将事件转换为一个对象,并将该对象传递给函数代码。它通常是 Python dict 类型。也可以是 liststrintfloat、或 NoneType 类型。

    事件对象包含来自调用服务的信息。在调用函数时,可以确定事件的结构和内容。当 Amazon 服务调用函数时,该服务会定义事件结构。有关 Amazon 服务中的事件的更多信息,请参阅 将 Amazon Lambda 与其他服务一起使用

  • 第二个参数是 上下文对象。Lambda 在运行时将上下文对象传递给函数。此对象提供的方法和属性包含有关调用、函数和运行时环境的信息。

返回值

(可选)处理程序可返回值。返回值所发生的状态取决于调用类型将 Amazon Lambda 与其他服务一起使用。例如:

  • 如果您使用 RequestResponse(例如 ,Amazon Lambda 会将 Python 函数调用的结果返回到调用 Lambda 函数的客户端(在对调用请求的 HTTP 响应中,序列化为 JSON)。例如,Amazon Lambda 控制台使用 RequestResponse 调用类型,因此当您使用控制台调用函数时,控制台将显示返回的值。

  • 如果处理程序返回 json.dumps 无法序列化的对象,则运行时返回错误。

  • 如果处理程序返回 None(就像不具有 return 语句的 Python 函数隐式执行的那样),则运行时返回 null

  • 如果使用 Event异步调用 调用类型,则会放弃该值。

示例

以下部分介绍了可以与 Lambda 结合使用的 Python 函数的示例。如果您使用 Lambda 控制台编写函数,无需附加 .zip 存档文件即可运行本部分中的功能。这些函数使用标准 Python 库,这些库位于您选择的 Lambda 运行时中。有关更多信息,请参阅 Lambda 部署程序包

返回消息

以下示例展示了一个名为 lambda_handler 的函数如何使用 python3.8Lambda 运行时。该函数接受用户输入名字和姓氏,并从它接收为输入的事件返回包含数据的消息。

def lambda_handler(event, context): message = 'Hello {} {}!'.format(event['first_name'], event['last_name']) return { 'message' : message }

您可以使用以下事件数据 调用函数

{ "first_name": "John", "last_name": "Smith" }

响应显示作为输入传递的事件数据:

{ "message": "Hello John Smith!" }

解析响应

以下示例展示了一个名为 lambda_handler 的函数如何使用 python3.8Lambda 运行时。该函数在运行时使用 Lambda 传递的事件数据。它解析 JSON 响应中 AWS_REGION 返回的 环境变量

import os import json def lambda_handler(event, context): json_region = os.environ['AWS_REGION'] return { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "body": json.dumps({ "Region ": json_region }) }

您可以使用任何事件数据 调用函数

{ "key1": "value1", "key2": "value2", "key3": "value3" }

Lambda 运行时会在初始化过程中设置多个环境变量。有关在运行时响应中返回的环境变量的更多信息,请参阅 使用 Amazon Lambda 环境变量

本示例中的函数取决于 Invoke API 的成功响应(200 中)。有关调用 API 状态的更多信息,请参阅 调用 API 响应语法

返回计算

以下 GitHub 上的 Lambda Python 函数代码示例展示了一个名为 lambda_handler 的函数如何使用 python3.6 Lambda 运行时。该函数接受用户输入并将计算返回给用户。

您可以使用以下事件数据 调用函数

{ "action": "increment", "number": 3 }