首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用无服务器框架通过AWS API网关返回以Node.js编写的AWS Lambda函数的错误?

如何使用无服务器框架通过AWS API网关返回以Node.js编写的AWS Lambda函数的错误?
EN

Stack Overflow用户
提问于 2018-11-16 20:48:23
回答 2查看 14.1K关注 0票数 6

我正在编写一个内部使用的应用程序接口,这是我第一次使用serverless framework。我正在用Node.js编写一个Lambda函数,并使用AWS API Gateway连接到它。

在某些情况下,我想返回一个自定义的错误消息,并且我正在尝试编写一个允许我这样做的函数。现在,每当Lambda进程失败时,我都会收到来自API的标准消息。在代码中,如果我尝试使用process.exit(1)终止进程,即使我已经使用callback()返回了一个错误,也会得到一个一般性错误

代码语言:javascript
运行
AI代码解释
复制
{
    "message": "Internal server error"
}

如果我不使用process.exit(1),我会在日志中看到通过callback()返回的错误,但该过程会继续,最终会超时:

代码语言:javascript
运行
AI代码解释
复制
{
    "message": "Endpoint request timed out"
}

我尝试过使用callback()方法返回错误的几种不同方法,但到目前为止还没有成功。我尝试过这种方法:

代码语言:javascript
运行
AI代码解释
复制
async function return_error(callback, context, error, returnCode){
  console.error("FATAL ERROR: ", error);
  let ErrorObj = {
    errorType : "InternalServerError",
    httpStatus : 500,
    requestId : context.awsRequestId,
    errorMessage : error
}
  callback(JSON.stringify(ErrorObj));
  process.exit(1);
}

还有这一条:

代码语言:javascript
运行
AI代码解释
复制
async function return_error(callback, error, returnCode){
  console.error("FATAL ERROR: ", error);
  callback({
    isBase64Encoded: false,
    statusCode: returnCode,
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({"Error Message:": error})
  }, null);
  process.exit(1);
}

(很抱歉,两者之间的语法稍有不同。)

到目前为止,我还不能通过API向用户返回任何错误。我的错误总是被记录下来,并且函数继续执行。任何帮助都将不胜感激。谢谢!

作为参考,我的serverless.yml文件的相关部分:

代码语言:javascript
运行
AI代码解释
复制
service: #Name of service


provider:
  name: aws
  runtime: nodejs8.10
  role: #ARN of Iam role

functions:
  screenshot:
    handler: #Name of handler
    timeout: 30
    memorySize: 1280
    reservedConcurrency: 10
    events:
      - http: 
          method: get
          path: #path
          contentHandling: CONVERT_TO_BINARY
          authorizer:
            type: aws_iam

plugins:
  - serverless-plugin-chrome
  - serverless-apigw-binary
  - serverless-apigwy-binary
package:
  exclude:
    - node_modules/puppeteer/.local-chromium/** 

custom:
  apigwBinary:
    types:
      - '*/*'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-11 23:21:05

Node.js的亚马逊网络服务错误回调并不像广告中所说的那样工作。根据docs的说法,所有人需要做的就是确保自定义错误扩展错误原型。然而,经过10多个小时的测试,我发现这完全不是真的。

返回错误回调的唯一方法是回调错误,就好像它是成功的一样(例如,如果你从{"message": "Internal server error"}网关触发了Lambda函数)。

TL;DR:callback(errorResponse, null)不起作用,但callback(null, errorResponse)起作用。

票数 17
EN

Stack Overflow用户

发布于 2018-11-17 15:01:04

为了让APIgateway检测到您的响应,您的lambda函数需要返回成功。试试这个:

代码语言:javascript
运行
AI代码解释
复制
async function return_error(callback, error, returnCode){
  console.error("FATAL ERROR: ", error);
  callback(null, {
    isBase64Encoded: false,
    statusCode: returnCode,
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({"Error Message:": error})
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53345168

复制
相关文章
Serverless 微服务架构案例无服务器架构 (Serverless Architectures) 简介 AWS Lambda 的编程模型Amazon API Gateway + AWS Lamb
Serverless 架构最早可以追溯到 Ken Fromm 发表的文章《Why The Future Of Software And Apps Is Serverless》。在这篇文章里, Ken Fromm 描述了未来云计算基础设施成熟的条件下应用程序是不需要服务器端的。在无武器场景下构建应用程序的时候。开发人员和运维人员无需担心服务器如何安装配置,如何设置网络和负载均衡,无需监控状态,甚至不再会出现服务器相关的工作内容。这样可以让原本建设机房的时间成本和货币成本从按年计算缩短至按秒计算。
顾宇
2018/08/17
2.4K0
首个针对AWS Lambda无服务器平台的恶意软件出现了
据The Hacker News消息,第一个专门设计针对亚马逊网络服务AWS Lambda无服务器计算平台的恶意软件已经在野外被发现。
FB客服
2022/04/12
8990
首个针对AWS Lambda无服务器平台的恶意软件出现了
[ 后端篇 ] 08 - AWS DynamoDB batchGet() API 返回 Error
意思是 : 如您请求超过100个项目,BatchGetItem将返回ValidationException,并显示消息“Too many items requested for the BatchGetItem call”。
程序手艺人
2019/04/22
7990
[ 后端篇 ] 08 - AWS DynamoDB batchGet() API 返回 Error
AWS Lambda 快速入门
但以上的几个方法都需要关注服务器的存储和计算资源,以便随时调整以满足更高的性能,并且高并发的请求也是分时段的,配置了更高性能的服务器在访问量变低的时候也是资源浪费。
goodspeed
2020/12/22
2.8K0
AWS Lambda  快速入门
AWS lambda and dynamodb with Java
使用aws lambda已经一年多了,下面使用java构建一个简单的lambda服务,大家可以自己扩展想要的功能,废话不多说,开始吧。
wblearn
2020/09/16
1K0
FaaS 的简单实践
FaaS 或者说serverless是一种云计算模型,其主要特点是用户根本不需要租用任何虚拟机ーー从启动虚拟机,执行代码,返回结果和停止虚拟机这些由云提供商处理的整个过程。这比其他云计算实现更具成本效益。它还使开发人员能够更加专注于开发业务逻辑,因为应用程序的某些部分由云提供程序处理。
半吊子全栈工匠
2018/12/27
3.7K0
[ 后端篇 ] 10 - AWS API 返回 Endpoint request time out
设备访问服务端的时候,返回Endpoint request time out,在stackoverflow看到有类似的问题 Amazon API gateway timeout
程序手艺人
2019/05/07
1.6K0
[ 后端篇 ] 10 - AWS API 返回 Endpoint request time out
从aws lambda谈serverless
一、基于aws lambda构建监控告警的思考二、什么是serverless?三、serverless解决了什么问题四、常见serverless应用场景五、为什么serverless淡出视野?六、参考
叔牙
2023/06/21
3830
从aws lambda谈serverless
热爱开源,为我带来了什么?
众多开源项目支持了 Serverless 的发展。开发者如何参与开源,共同打造 Serverless 的未来生态?本文由 Serverless Operations CEO Takahiro Horike 在 Techo TVP 开发者峰会 ServerlessDays China 2021 上的演讲 "The Future of Serverless Accelerated by OpenSource" 整理而成,向大家分享他的经验,本次分享完整视频请见文末。
腾讯云开发者
2021/08/09
2.7K1
如何利用AWS的Lambda服务逗女朋友开心
我们正处在一个前所未有的时代。新冠疫情席卷全球,我们唯一能做的就是把自己锁在屋里。
人工智能小咖
2020/05/09
1.3K0
如何利用AWS的Lambda服务逗女朋友开心
投入 Serverless 开源,为我带来了什么?
关注 TencentServerless 公众号,回复「PPT」,即可领取本届大会演讲 PPT。 众多开源项目支持了 Serverless 的发展。开发者如何参与开源,共同打造 Serverless 的未来生态?本文由 Serverless Operations CEO Takahiro Horike 在 Techo TVP 开发者峰会 ServerlessDays China 2021 上的演讲 "The Future of Serverless Accelerated by OpenSource" 整
腾讯云serverless团队
2021/07/06
1.3K0
使用 Node.js 快速开启 ServerLess Functions:入门实践指南
近一年来我在很多地方看到 ServerLess 这一词出现,概念介绍的相对比较多,但是真正实践的还是很少,也是出于对新技术的好奇,所以我打算进一步的对 ServerLess 做一个了解,以便体验到 ServerLess 能给我们带来什么便捷,最好的例子还是先从一个 Hello World 开始。
五月君
2020/02/11
2.7K0
使用 Node.js 快速开启 ServerLess Functions:入门实践指南
微服务部署策略的选择
动机 部署单体应用程序意味着运行多个通常是单个大型应用程序的相同副本。您通常会提供N个服务器(物理或虚拟)并在每个服务器上运行M个应用程序的实例。部署单体应用程序并不简单,但它比部署微服务应用程序要简单得多。 微服务应用程序由数十甚至上百个服务组成。服务由各种语言和框架编写。每个应用程序都是具有自己特定部署、资源、扩展和监视要求的小型应用程序。例如,您需要根据该服务的需求运行一定数量的每个服务的实例。此外,每个服务实例必须提供相应的CPU、内存和I / O资源。除了复杂性外,更具挑战性的是部署服务必须快速,
用户1263954
2018/01/30
1.7K0
微服务部署策略的选择
2017 年会是 Serverless 爆发之年吗
中小型公司,尤其是互联网行业的创业公司,本身并没有太多的技术人员,如果设计系统时需要考虑诸多的技术问题,例如 Web 应用服务器如何配置、数据库如何配置、消息服务中间件如何搭建等等,那对于他们来说人员成本、系统成本会很高,Serverless 架构的出现,让这种情况可能可以大幅度改善。
Debian中国
2018/12/20
7390
无服务器的十大属性
无服务器计算或函数即服务(FaaS)正在不断,亚马逊正在通过将Lambda扩展到边缘设备和内容分发网络来推动创新。IBM, Microsoft和Google在公共云中拥有自己的FaaS产品,有超过六个开源无服务器项目正在引起开发人员的注意。预计今年将出现这一细分市场中出现的新平台。
lyb-geek
2022/03/10
1.5K0
逆向 AWS API 设计
云计算爱好者
2017/12/20
9700
使用Lambda和API网关在Java中开发RESTful微服务
原题:Developing RESTful APIs in Java using Amazon APIGateway and AWS Lambda
yuanyi928
2018/09/14
1.8K0
使用Lambda和API网关在Java中开发RESTful微服务
基于亚马逊AWS-如何快速搭建Lambda架构
在Amazon Web Services (AWS)中,Lambda是最流行的服务之一。要定义它,Lambda是一个无服务器的计算软件,它自动将您作为函数上传的任何代码上载到它。使用AWS Lambda,开发人员无需编写太多代码、启动服务器、配置服务器或为它们的运行支付费用。Lambda让节省成本和资源完成任务工作成为可能。它还允许用户编写简单的函数,然后将这些函数连接到一个请求或一个事件,在此之后,每当请求/事件发生时,Lambda都会执行该函数。此外,用户只有在代码运行时才会实行收费。
35岁程序员那些事
2020/02/24
1.6K0
深入浅出Serverless:3 Serverless的实现
AWS Lambda、Microsoft Azure Functions及Google Cloud Functions支持的开发语言
yeedomliu
2019/09/27
3.5K0
AWS医疗NLP
命名实体识别(Named Entity Recognition,NER)是目前最流行和最有需求的自然语言处理任务之一。随着NER的扩展,它也变得更加特定于领域。
磐创AI
2021/09/03
1.5K0

相似问题

通过AWS Lambda/API网关返回JSONP

32

通过无服务器框架的AWS API网关响应

13

通过API创建AWS Lambda API网关和Lambda函数

22

使用AWS API网关和AWS SNS无Lambda发送SMS

12

AWS API网关返回200,即使Lambda返回错误

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档