使用无服务器框架(AWS Lambda / Gateway),Express,Mongoose / MongoDB Atlas的应用频繁超时

亚伯

触发警告:初学者问题。

我使用Express和Mongoose以及MongoDB Atlas DB构建了一个api。

在大多数情况下,它可以正常工作,但经常会出现超时错误。这似乎是随机发生的,涉及所有路线,等等。确切地说,我得到:

`502 Internal server error via POSTMAN`

在无服务器仪表板中,我得到:

invocation
time invoked 1 day ago, mar 08 at 1:38pm
fatal error Function execution duration going to exceeded configured timeout limit.
cold start
duration 48.9 s
memory used na

request
endpoint /{proxy+}
method POST
status 502
message Internal server error
latency 27 ms

并跨度和日志:

跨接并登录无服务器仪表板

我使用本教程包装了我的express应用程序,以使用无服务器框架进行部署:https : //dev.to/adnanrahic/a-crash-course-on-serverless-apis-with-express-and-mongodb-193k

Serverless.yml文件:

service: serviceName
app: appName
org: orgName

provider:
  name: aws
  runtime: nodejs12.x
  stage: ${env:NODE_ENV}
  region: eu-central-1
  environment:
    NODE_ENV: ${env:NODE_ENV}
    DB: ${env:DB}

functions:
  app:
    handler: server.run
    events:
      - http:
          path: /
          method: ANY
          cors: true
      - http:
          path: /{proxy+}
          method: ANY
          cors: true

plugins:
  - serverless-offline # Utiliser pour tester localement
  - serverless-dotenv-plugin

server.js文件:

const sls = require('serverless-http')
const app = require('./app')
module.exports.run = sls(app)

app.js文件:

const express = require('express')
const cors = require('cors')
const bodyParser = require('body-parser')

const newRoutes = require('./routes/file')

const app = express()

app.use(bodyParser.json())
const helmet = require('helmet')
app.use(helmet())

app.options('*', cors())
app.use(cors({ allowedHeaders: 'Content-Type, Authorization' }))

app.use('/new-route', newRoutes)

app.use((error, req, res, next) => {
  console.log(error)
  const status = error.status || 500
  const message = error.message
  res.status(status).json({
    status: status,
    message: message
  })
})

// Gère la connexion à la base de donnée :
require('./db')

module.exports = app

最后是db.js文件:

const mongoose = require('mongoose')

mongoose
  .connect(
    process.env.DB, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    })
  .then(() => {
    console.log('connected')
  })
  .catch(err => console.log(err))

据我了解,这与Lambda中的冷启动以及API网关处理超时(!?)的方式有关。我已经在猫鼬的文档(https://mongoosejs.com/docs/lambda.html上阅读了此内容,还阅读了其他教程,但是我并不觉得应该多么适应我的情况。

感谢您的帮助

Noetix

该问题可能是由于您打开的数据库连接引起的。建立此连接后,对的任何调用callback都不会返回给客户端,并且您的函数将超时。

您需要设置context.callbackWaitsForEmptyEventLoopfalse

这是docs的解释

callbackWaitsForEmptyEventLoop –设置为false可在回调执行时立即发送响应,而不是等待Node.js事件循环为空。如果为假,则所有未完成的事件在下一次调用期间将继续运行。

有了serverless-http你可以设置这个选项,你的内很容易server.js的文件:

const sls = require('serverless-http')
const app = require('./app')

module.exports.run = sls(app, { callbackWaitsForEmptyEventLoop: false })

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用无服务器框架时如何从AWS Lambda访问DynamoDB?

来自分类Dev

IntelliJ + AWS Toolkit +无服务器应用程序:“必须能够在项目中找到处理程序,才能部署到Lambda”

来自分类Dev

如何使用无服务器框架通过AWS Lambda函数环境变量访问SSM参数存储值?

来自分类Dev

无法使用AWS无服务器脱机从另一个Lambda调用Lambda

来自分类Dev

无服务器框架lambda执行角色不匹配?

来自分类Dev

使用graphql,aws lambda和无服务器框架的多个URL路径选项错误

来自分类Dev

无服务器框架Python lambda直接返回JSON

来自分类Dev

无服务器框架-在AWS API Gateway中将现有应用程序从REST切换到HTTP

来自分类Dev

AWS Lambda和API Gateway是否不使用服务器?为什么将它们称为“无服务器”?

来自分类Dev

如何在无lambda的无服务器框架配置(适用于AWS)中实现重定向(301代码)模拟

来自分类Dev

使用AWS Lambda作为s3的无服务器输入消毒代理

来自分类Dev

使用无服务器和chrome-aws-lambda节点包在AWS Lambda上找不到Chrome Binary

来自分类Dev

分别上载AWS无服务器应用程序lambda吗?(没有ApiGateway设置)

来自分类Dev

如何引用使用无服务器框架创建的Arn和AWS lambda函数的名称

来自分类Dev

Nestjs在lambda函数上运行,而没有创建与AWS API Gateway结合的实际服务器?

来自分类Dev

使用Express,Mongoose搜索嵌套的MongoDB文档

来自分类Dev

如何使用适用于AWS Lambda的无服务器框架获取最新的Layer版本

来自分类Dev

AWS Lambda:通过无服务器框架部署时,“ ELF加载命令地址/偏移未正确对齐”

来自分类Dev

无服务器框架-用于预定义的Cloud Front分布的Lambda @ Edge部署

来自分类Dev

无服务器-无法使用cloudwatch事件触发AWS Lambda

来自分类Dev

psycopg2不适用于AWS Lambda上的无服务器框架部署

来自分类Dev

调用RDS无服务器时AWS Lambda超时

来自分类Dev

使用无服务器功能通过Mongoose在MongoDB数据库中的findById,并以React形式呈现结果-不起作用

来自分类Dev

Express.js应用无服务器,使用Lambda或Functions-一个好主意?

来自分类Dev

无服务器-在Lambda函数中运行Express实例,好还是坏?

来自分类Dev

AWS Lambda:Express res.render始终发送“内部服务器错误”

来自分类Dev

通过结合使用无服务器框架和AWS,Sequelize的自动生成的表别名会根据环境(脱机与Lambda)而有所不同。

来自分类Dev

连接已关闭:多个节点应用程序使用Mongoose连接到同一MongoDB服务器

来自分类Dev

从 aws lambda 函数与 mongodb 通信

Related 相关文章

  1. 1

    使用无服务器框架时如何从AWS Lambda访问DynamoDB?

  2. 2

    IntelliJ + AWS Toolkit +无服务器应用程序:“必须能够在项目中找到处理程序,才能部署到Lambda”

  3. 3

    如何使用无服务器框架通过AWS Lambda函数环境变量访问SSM参数存储值?

  4. 4

    无法使用AWS无服务器脱机从另一个Lambda调用Lambda

  5. 5

    无服务器框架lambda执行角色不匹配?

  6. 6

    使用graphql,aws lambda和无服务器框架的多个URL路径选项错误

  7. 7

    无服务器框架Python lambda直接返回JSON

  8. 8

    无服务器框架-在AWS API Gateway中将现有应用程序从REST切换到HTTP

  9. 9

    AWS Lambda和API Gateway是否不使用服务器?为什么将它们称为“无服务器”?

  10. 10

    如何在无lambda的无服务器框架配置(适用于AWS)中实现重定向(301代码)模拟

  11. 11

    使用AWS Lambda作为s3的无服务器输入消毒代理

  12. 12

    使用无服务器和chrome-aws-lambda节点包在AWS Lambda上找不到Chrome Binary

  13. 13

    分别上载AWS无服务器应用程序lambda吗?(没有ApiGateway设置)

  14. 14

    如何引用使用无服务器框架创建的Arn和AWS lambda函数的名称

  15. 15

    Nestjs在lambda函数上运行,而没有创建与AWS API Gateway结合的实际服务器?

  16. 16

    使用Express,Mongoose搜索嵌套的MongoDB文档

  17. 17

    如何使用适用于AWS Lambda的无服务器框架获取最新的Layer版本

  18. 18

    AWS Lambda:通过无服务器框架部署时,“ ELF加载命令地址/偏移未正确对齐”

  19. 19

    无服务器框架-用于预定义的Cloud Front分布的Lambda @ Edge部署

  20. 20

    无服务器-无法使用cloudwatch事件触发AWS Lambda

  21. 21

    psycopg2不适用于AWS Lambda上的无服务器框架部署

  22. 22

    调用RDS无服务器时AWS Lambda超时

  23. 23

    使用无服务器功能通过Mongoose在MongoDB数据库中的findById,并以React形式呈现结果-不起作用

  24. 24

    Express.js应用无服务器,使用Lambda或Functions-一个好主意?

  25. 25

    无服务器-在Lambda函数中运行Express实例,好还是坏?

  26. 26

    AWS Lambda:Express res.render始终发送“内部服务器错误”

  27. 27

    通过结合使用无服务器框架和AWS,Sequelize的自动生成的表别名会根据环境(脱机与Lambda)而有所不同。

  28. 28

    连接已关闭:多个节点应用程序使用Mongoose连接到同一MongoDB服务器

  29. 29

    从 aws lambda 函数与 mongodb 通信

热门标签

归档