【问题标题】:Connection timeout sequelize on AWS Lambda on third party MYSQL第三方 MYSQL 上 AWS Lambda 的连接超时续集
【发布时间】:2020-02-28 22:34:42
【问题描述】:

我已经通过无服务器框架部署了我的 lambda 函数。当我在本地调用该函数时,它工作正常。但在 AWS Lambda 环境中,它无法连接到托管在 remotemysql.com 上的 MYSQL。每次都会出现超时错误。

试图增加超时但没有任何效果

sequelize = new Sequelize(
    process.env.DB_NAME,
    process.env.DB_USER,
    process.env.DB_PASSWORD,
    {
        host: process.env.DB_HOST,
        dialect: "mysql",
        logging: false,
        connectTimeout: 60000
    }
);

sequelize
    .authenticate()
    .then(() => {
        logger.info("Database connection established");
        // do my work
        // some api calls to xys hosts outside servers
    })
    .catch(error => {
        logger.error("Database connection failed", {
            code: error.original.code,
            errno: error.original.errno
        });
        process.exit(1);
    });

我的函数不在任何 VPC 内,它允许访问互联网,因为我验证它正在返回我正在向 AWS 之外的一些其他服务做出的 API 响应。

我不确定是因为 TCP 连接还是其他原因。

请指教

【问题讨论】:

  • 您能分享一下您是如何定义 DB_HOST 的吗?
  • 我已经尝试过 remotemysql.com37.59.55.185 在我的本地调用中都可以正常工作。
  • 您是否尝试删除数据库代码并查看是否仍然出现这种情况?可能是权限问题。
  • @Madeo 哪种权限?除了数据库一切正常。它只是数据库连接超时
  • 你确定 lambda 可以连接到互联网吗?

标签: amazon-web-services aws-lambda


【解决方案1】:

好的,所以我已经找出了导致问题的原因。这不是因为连接性,而是异步处理程序有问题。

我的处理程序就像

exports.handler = async () => { ... }

我删除了async,现在它工作正常。

【讨论】:

  • 很确定这不是的问题。可能你没有返回函数,但是如果没有看到整个代码就很难说。
  • 你能解释一下 async 有什么问题吗?正如文档中所遵循的那样。我仍然不清楚原因。谢谢
  • 从 Cloudwatch 日志中你能清楚地看到超时来自 Sequelize 吗?因为我怀疑这是来自 lambda。能否请您发布所有代码?
猜你喜欢
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2017-10-22
  • 2020-11-14
  • 2017-05-23
  • 2018-07-23
  • 2017-10-05
  • 1970-01-01
相关资源
最近更新 更多