Python 中的 Lambda 函数处理程序
Lambda 函数处理程序是函数代码中处理事件的方法。当调用函数时,Lambda 运行处理程序方法。您的函数会一直运行,直到处理程序返回响应、退出或超时。
在 Python 中创建函数处理程序时,可以使用以下一般语法:
def
handler_name
(event, context): ... returnsome_value
命名
在创建 Lambda 函数时指定的 Lambda 函数处理程序名称来自以下内容:
-
Lambda 处理程序函数所在的文件名称。
-
Python 处理程序函数的名称。
函数处理程序可随意命名;但是,在 Lambda 控制台上的默认名称为 lambda_function.lambda_handler
。此功能处理程序名称将函数名称表示为 (lambda_handler
),存储处理程序代码的文件位于 (lambda_function.py
)。
如果您在控制台中使用不同的文件名或函数处理程序名称创建函数,则必须编辑默认处理程序名称。
更改函数处理程序名称(控制台)
-
打开 Lambda 控制台的函数
页面,然后选择一个函数。 -
选择节点选项卡。
-
向下滚动到运行时设置窗格并选择编辑。
-
在处理程序中,输入函数处理程序的新名称。
-
选择 Save(保存)。
工作原理
当 Lambda 调用函数处理程序时,Lambda 运行时会将两个参数传送给函数处理程序:
-
第一个参数是 事件对象。事件是 JSON 格式的文档,其中包含要处理的 Lambda 函数的数据。Lambda 运行时将事件转换为一个对象,并将该对象传递给函数代码。它通常是 Python
dict
类型。也可以是list
、str
、int
、float
、或NoneType
类型。事件对象包含来自调用服务的信息。在调用函数时,可以确定事件的结构和内容。当 Amazon 服务调用函数时,该服务会定义事件结构。有关 Amazon 服务中的事件的更多信息,请参阅 将 Amazon Lambda 与其他服务一起使用。
-
第二个参数是 上下文对象。在运行时由 Lambda 将上下文对象传递给函数。此对象提供的方法和属性包含有关调用、函数和运行时环境的信息。
返回值
(可选)处理程序可返回值。返回值所发生的状态取决于调用函数的调用类型和服务。例如:
-
如果您使用
RequestResponse
调用类型(例如 同步调用),Amazon Lambda 会将 Python 函数调用的结果返回到调用 Lambda 函数的客户端(在对调用请求的 HTTP 响应中,序列化为 JSON)。例如,Amazon Lambda 控制台使用RequestResponse
调用类型,因此当您使用控制台调用函数时,控制台将显示返回的值。 -
如果处理程序返回
json.dumps
无法序列化的对象,则运行时返回错误。 -
如果处理程序返回
None
(就像不具有return
语句的 Python 函数隐式执行的那样),则运行时返回null
。 -
如果您使用
Event
调用类型(一种异步调用),则该值将被丢弃。
注意
在 Python 3.9 及更高版本中,Lambda 在错误响应中包含调用的 requestId。
示例
以下部分介绍了可以与 Lambda 结合使用的 Python 函数的示例。如果您使用 Lambda 控制台编写函数,无需附加 zip 归档文件即可运行本部分中的功能。这些函数使用标准 Python 库,这些库位于您选择的 Lambda 运行时中。有关更多信息,请参阅Lambda 部署程序包。
返回消息
以下示例显示了名为 lambda_handler
的函数。该函数接受用户输入名字和姓氏,并从它接收为输入的事件返回包含数据的消息。
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
的函数。该函数在运行时使用 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 运行时会在初始化过程中设置多个环境变量。有关在运行时响应中返回的环境变量的更多信息,请参阅 使用 Lambda 环境变量。
本示例中的函数取决于 Invoke API 的成功响应(200
中)。有关调用 API 状态的更多信息,请参阅调用响应语法。
返回计算
以下示例显示了名为 lambda_handler
的函数。该函数接受用户输入并将计算返回给用户。有关此示例的更多信息,请参阅 aws-doc-sdk-examples GitHub 存储库
import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ... result = None action = event.get('action') if action == 'increment': result = event.get('number', 0) + 1 logger.info('Calculated result of %s', result) else: logger.error("%s is not a valid action.", action) response = {'result': result} return response
您可以使用以下事件数据 调用函数:
{ "action": "increment", "number": 3 }