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

函数错误 (Python)

如果 Lambda 函数引发异常,AWS Lambda 会识别失败,将异常信息序列化为 JSON 并将其返回。考虑以下示例:

Copy
def always_failed_handler(event, context): raise Exception('I failed!')

在调用此 Lambda 函数时,它将引发异常,并且 AWS Lambda 返回以下错误消息:

Copy
{ "errorMessage": "I failed!", "stackTrace": [ [ "/var/task/lambda_function.py", 3, "my_always_fails_handler", "raise Exception('I failed!')" ] ], "errorType": "Exception" }

注意:堆栈跟踪以 stackTrace JSON 数组的形式返回堆栈跟踪元素。

取回错误信息的方式取决于在函数调用时客户端指定的调用类型:

  • 如果客户端指定 RequestResponse 调用类型(即同步执行),则它会将结果返回发出此调用的客户端。

    例如,控制台始终使用 RequestResponse 调用类型,因此控制台将在 Execution result 部分中显示错误,如下所示:

    相同的信息也将发送到 CloudWatch,并且 Log output 部分显示相同的日志。

  • 如果客户端指定 Event 调用类型(即异步执行),则 AWS Lambda 将不会返回任何信息。相反,它将错误信息记录到 CloudWatch 日志。您还可在 CloudWatch 指标中查看错误指标。

AWS Lambda 可能会重试失败的 Lambda 函数,具体视事件源而定。例如,如果 Kinesis 为事件源,则 AWS Lambda 会重试失败的调用,直到 Lambda 函数成功或流中的记录过期。

测试之前的 Python 代码(控制台)

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

  2. 将模板代码替换为此部分中提供的代码。

  3. 使用 Lambda 控制台中提供的名为 Hello WorldSample event template 测试 Lambda 函数。

函数错误处理

您可以创建自定义错误处理机制,直接从您的 Lambda 函数引发异常,并直接在 AWS Step Functions 状态机中进行处理 (重试或捕获)。有关更多信息,请参阅使用状态机处理错误情况

请将 CreateAccount 状态看作使用 Lambda 函数将客户的详细信息写入数据库的任务

  • 如果任务成功,会创建账户并发送欢迎电子邮件。

  • 如果用户尝试创建的账户用户名已存在,Lambda 函数将出错,状态机会建议其他用户名,并重试账户创建过程。

以下代码示例演示了如何执行此操作。请注意,Python 中的自定义错误必须扩展 Exception 类型。

Copy
class AccountAlreadyExistsException(Exception): pass def create_account(event, context): raise AccountAlreadyExistsException('Account is in use!')

您可以配置 Step Functions,使用 Catch 规则捕获错误。Lambda 会自动将错误名称设置为运行时异常的简单类名称:

Copy
{ "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:CreateAccount", "Next": "SendWelcomeEmail", "Catch": [ { "ErrorEquals": ["AccountAlreadyExistsException"], "Next": "SuggestAccountName" } ] }, … } }

AWS Step Functions 可于运行时捕获错误,按照 Next 转换中指定的方式,转换SuggestAccountName 状态。

自定义错误处理机制使创建无服务器应用程序变得更加容易。此功能与 Lambda 编程模型 支持的所有语言相集成,您可以任选编辑语言设计您的应用程序,并进行混合搭配。

要进一步了解如何使用 AWS Step Functions 和 AWS Lambda 创建您自己的无服务器应用程序,请参阅 AWS Step Functions

本页内容: