首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Serverless在MySQL查询后调用AWS服务时AWS超时

使用Serverless在MySQL查询后调用AWS服务时AWS超时
EN

Stack Overflow用户
提问于 2020-05-05 19:49:22
回答 1查看 325关注 0票数 0

我正在处理一些业务代码,这些代码处理给定的事件,查询MySQL DB,然后将格式化的对象上传到DynamoDB。代码如下所示:

代码语言:javascript
复制
var mysql = require('mysql');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({ apiVersion: '2012-08-10' });

var pool = mysql.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE
});

module.exports.handle = (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  console.time("query");

  // more code

  pool.getConnection(function (err, connection) {
    if (err) callback(Error(`could not get a pool connection: ${err}`));

    connection.query(query, (err, res, fields) => {
      connection.release();
      if (err) {
        callback(Error(`could not execute query: ${err}`));
      } else {
        console.timeEnd("query");
        console.time("parsing");

        // more code

        let inputItem = {
          Item: item,
          TableName: "some_table"
        }

        console.timeEnd("parsing");
        console.time("putItem");

        // here it hangs... no err, no data

        dynamodb.putItem(inputItem, function (err, data) {
          if (err) callback(Error(`could not putItem: ${err}`))
          console.timeEnd("putItem");
          callback(null, JSON.stringify({
            message: "OK"
          }));
        });

      }
    });
  });
}

我使用Serverless捆绑这段代码并将其部署到AWS中。当我使用sls invoke local在本地执行lambda时,它可以工作,但是当我尝试运行已部署的lambda时(无论是从sls还是AWS控制台),每次都会得到一个超时。

这真的很奇怪,因为如果我删除了MySQL代码,它就会工作,也就是说,它会将项放到DynamoDB中。实际上,最初的代码是Go lambda。使用该代码,在调用一个AWS服务时,我有完全相同的错误:没有问题,当调用MySQL和AWS服务时,挂起……尝试了所有不同版本的Go,AWS包,等等.决定把它迁移到Node,认为这是个围棋问题。我真的不知道怎么回事..。

在角色和权限方面,正如我所说的,如果我只在Lambda执行期间调用AWS服务,代码就可以工作。

有什么可能是错的吗,或者如果我只是个白痴漏掉了什么东西?

我想唯一的解决办法是连锁兰巴斯..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-11 10:14:09

我做了一些研究,并发现这是实现了如何配置的VPC。我发现Lambda无法从VPC内部访问internet,所以您需要:

  1. 配置一个DB代理(不推荐用于生产,因为它在beta预览版中),并通过它建立到DB的连接。
  2. 配置VPC以访问internet。

资料来源:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61621780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档