草庐IT

go - API Gateway : custom error message 后面的 AWS Lambda

coder 2023-06-27 原文

我正在尝试处理用 Go 编写的 Lambda 函数中的错误。
Lambda 由 API 网关触发。
当我回复 200 时,我得到了正确的回复。
但是当我用 500 代码响应时,我总是收到 {"message": "Internal server error"}

部分代码如下:

func newErrReponse(message string) (events.APIGatewayProxyResponse, error) {
    return events.APIGatewayProxyResponse{
        Body:       message,
        StatusCode: 500,
    }, errors.New(message)
}

func handleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    return newErrReponse("some error")
}

func main() {
    lambda.Start(handleRequest)
}

我原以为“有些错误”,但我总是收到内部服务器错误。我在正文中尝试了 JSON,但这没有帮助。 集成请求的类型为 LAMBDA_PROXY。这是默认设置。

如何控制错误响应?

最佳答案

lambda 处理程序可以返回 2 个值。 接口(interface){}错误:
https://godoc.org/github.com/aws/aws-lambda-go/lambda

因为我使用的是API网关,所以接口(interface)类型是APIGatewayProxyResponse:
https://godoc.org/github.com/aws/aws-lambda-go/events#APIGatewayProxyResponse

如果 Lambda 成功,API 网关将从 APIGatewayProxyResponse 返回值。

但是如果 Lambda 没有成功,那么你会得到一个内部服务器错误。

如果您返回 nil 以外的错误,则 Lambda 失败。

当出现 panic() 或 os.Exit() 时,Lambda 也会失败。 这意味着 log.Fatal 也会使 Lambda 失败。

这里是关于错误的更多信息:
https://docs.aws.amazon.com/lambda/latest/dg/go-programming-model-errors.html

Lambda 在 CloudWatch 中记录 panic (和其他输出)

关于go - API Gateway : custom error message 后面的 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48452008/

有关go - API Gateway : custom error message 后面的 AWS Lambda的更多相关文章

  1. ruby-on-rails - Textmate 'Go to symbol' 相当于 Vim - 2

    在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol

  2. ruby-on-rails - 用于 Ruby 的 vim 中的全局 "Go to definition"? - 2

    自97年以来我一直在使用vi/vim进行各种快速编辑和管理任务,但最近才考虑使用它来替换Netbeans作为我选择的ruby​​编辑器。我发现一件事在Netbeans和Eclipse中非常有用的是Ctrl+Click“转到定义”功能,您可以在其中按住Ctrl键并单击一个类或方法,然后它将带您了解定义。现在,我玩过丰富的ctags和rails.vim,而且很接近,但没有雪茄。这就是我想要的:默认情况下在Netbeans和Eclipse中,您可以在本地rails中按住ctrl并单击本地方法或类项目,但你也可以ctrl+click定义在gems或用Ruby编写的系统库。以Netbeans为例

  3. ruby - 从企业防火墙后面安装 gem - 2

    我怀疑公司防火墙阻止安装gem。我定义了HTTP_PROXY,我可以通过以下命令查看远程gem:jruby-Sgemlist-r但是当我去安装gem时,我得到一个404:jruby-Sgeminstallrails除了维护内部gem存储库之外,是否有解决此问题的良好解决方法? 最佳答案 对于ruby​​gems,将它放在我的gem.bat中这对我有用@"%~dp0ruby.exe""%~dpn0"%*--http-proxyhttp://domainname.ccc.com:8080对于jrubygems这有效@"%~dp0jrub

  4. 防火墙后面的 Mac 上的 Ruby gem 安装问题 - 2

    请为我提供以下问题的解决方案,1)如何在公司防火墙后面的Mac(OSX10.5.1)上安装ruby​​gems。问候,太阳 最佳答案 假设您使用HTTP代理,gem应用程序有一个--http-proxy选项。geminstall--http-proxyhttp://corporate-proxy:1234 关于防火墙后面的Mac上的Rubygem安装问题,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com

  5. ruby-on-rails - 有必要把Unicorn放在Nginx(或Apache)后面吗 - 2

    我对这个架构有点困惑。在我正在进行的一个项目中,Unicorn被选为Rails服务器。它放在Nginx网络服务器后面。据我了解,Unicorn是功能齐全的Web服务器,我们不打算在同一服务器实例上托管任何其他Rails应用程序。所以我的问题是:在链中添加附加层有什么好处:client->nginx->unicorn->unicornworker 最佳答案 Unicorn不是为处理“慢客户端”而设计的。您可以在PHILOSOPHY中阅读更多相关信息帮助文件:Mostbenchmarkswe’veseendon’ttellyouthis

  6. ruby-on-rails - Rails 上的 ruby : How to have multiple submit buttons going to different methods (maybe with with_action? ) - 2

    这个问题在这里已经有了答案:HowdoIcreatemultiplesubmitbuttonsforthesameforminRails?(7个答案)关闭9年前。所以..'save'%>'library'%>然后在我的Controller中:with_actiondo|a|a.savedoenda.librarydoendend问题是只有一个操作被调用...两个submit_tags调用相同的操作...知道为什么吗?或者我如何获得两个按钮以将表单提交给两种不同的方法?

  7. DiFi: A Go-as-You-Pay Wi-Fi Access System 精读笔记(三) - 2

    IV.SYSTEMIMPLEMENTATIONWeadoptmodulardesignfollowingtheintegrationofblockchain.Itbringsmoreflexibilitybyseparatingtheimplementationofdifferentfunctionalities,sowecouldleveragetheadvantagesoftheblockchain-basedsmartcontractwhilereducingoverhead.Figure3illustrateshowdifferentmodulesareinvolvedintheint

  8. go-templates - 如何根据表达式有条件地在 Go 模板中设置变量,如果不使用 if 语句包装可能会导致错误 - 2

    问题我该如何做这样的事情:{{$use_ssl:=(ne$.Env.CERT_NAME"")}}其中$.Env.CERT_NAME可能为零/未定义。如果它是零,它给出这个错误:at:errorcallingne:invalidtypeforcomparison注意:我无法控制传递给Go模板的对象,因此必须完全在模板本身内解决这个问题。我尝试过的我试图通过首先检查它是否为非空来变通:{{$use_ssl:=(($.Env.CERT_NAME)&&(ne$.Env.CERT_NAME""))}}但它给出了这个错误:unexpected"&"inoperand所以我切换到这个,这在语法上是允

  9. ruby-on-rails - ruby on rails,变量后面或前面的冒号 - 2

    我是ruby​​和rails的新手。我认为Rails是最好的API之一,而ruby​​非常独特,似乎ruby​​可以巧妙地做“假设”来帮助开发人员。但我不太确定扩展到什么程度。我的问题是关于变量中的冒号。到目前为止我所理解的是:variable在ruby中,就是说这个变量将无法改变,这类似于其他语言中的常量。我对么??然后我的困惑是,有时我会看到变量前面的冒号,就像这样Rails.application.config.session_store:cookie_store,key:'_blog_session'key:和method:前面都有冒号,这代表什么?此外Blog::Applic

  10. Go time与string的相爱相杀 - 2

    time包与string包可以说是在Go语言的开发中常用的两个包实际开发过程中(例如web开发)经常会遇到time类型与string类型的交互,计算比较等场景首先来了解GO语言里非常浪漫的一个点,即2006-01-0215:04:05,GO语言诞生的时间,通常用来做时间的格式化time转stringt:=time.Now()//当前时间timeLayoutStr:="2006-01-0215:04:05"t.Format(timeLayoutStr)//返回值为string,可以用一个值来接收它上述例子中,将time类型t转换为string类型,并格式化为年-月-日时-分-秒,这里的格式化是可

随机推荐