AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Go 中的 AWS Lambda 函数错误

您可以创建自定义错误处理机制,直接从您的 Lambda 函数引发异常,并直接进行处理。

以下代码示例演示了如何执行此操作。请注意,Go 中的自定义错误必须导入 errors 模块。

package main import ( "errors" "github.com/aws/aws-lambda-go/lambda" ) func OnlyErrors() error { return errors.New("something went wrong!") } func main() { lambda.Start(OnlyErrors) }

将返回以下内容:

{ "errorMessage": "something went wrong!", "errorType": "errorString" }

函数错误处理

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

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

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

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

以下代码示例演示了如何执行此操作。

package main type CustomError struct {} func (e *CustomError) Error() string { return "bad stuff happened..." } func MyHandler() (string, error) { return "", &CustomError{} }

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

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

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

处理意外错误

Lambda 可能会由于您无法控制的原因而失败,例如网络中断。这些是特殊情况。在 Go 中,panic 解决了这些问题。如果您的代码 panic,Lambda 将尝试捕获错误并将其序列化为标准错误 json 格式。Lambda 还会尝试将 panic 的值插入函数的 CloudWatch 日志。在返回响应后,Lambda 将自动重新创建该函数。如果您觉得有必要,您可以在您的代码中包含 panic 函数,以自定义错误响应。

package main import ( "errors" "github.com/aws/aws-lambda-go/lambda" ) func handler(string) (string, error) { panic(errors.New("Something went wrong")) } func main() { lambda.Start(handler) }

这将返回以下 json 格式的堆栈:

{ "errorMessage": "Something went wrong", "errorType": "errorString", "stackTrace": [ { "path": "github.com/aws/aws-lambda-go/lambda/function.go", "line": 27, "label": "(*Function).Invoke.function" }, ... ] }