首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问node.js中的MySQL或MySQL时,AWS Lambda ETIMEDOUT

问访问node.js中的MySQL或MySQL时,AWS Lambda ETIMEDOUT
EN

Stack Overflow用户
提问于 2017-05-16 17:36:51
回答 1查看 2.9K关注 0票数 2

我正在尝试将AWS Lambda函数连接到RDS中的数据库中,我跟踪了一些帖子,这些帖子表明它们都需要在同一个VPC中,但亚马逊支持部门告诉我,情况并非如此。虽然我已经尝试了一个多子网VPC与nat网关和安全组允许访问,但没有占上风。

我能够在或MySQL工作台中与数据库实例对话,而不会出现任何问题。

10:13 2017-05-16T10:13:00.509Z回调connection.connect() 10:13:00 2017-05-16T10:13:00.547Z错误ETIMEDOUT

我已经尝试了几种不同的连接方法,我使用了一个例子,如文章中所示,唯一的区别是这个数据库不是在RDS中。

Querying a MySQL database from a NodeJS AWS Lambda Function

我尝试过MSSQL和MSSQL数据库实例,这两个实例都经历了连接超时。我已经把所有相关政策都附加到lambda函数上了。

我在下面包含了一个简单的测试,只是为了得到一个连接。

下面添加了测试代码,而不是在alexa调用的底部。

代码语言:javascript
复制
function mysqltest2() {
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'endpoint.rds.amazonaws.com',
      user     : 'user',
      password : 'pass',
      database : 'db'
      });
                  var test;
                  console.log(`Intent Request`);
                  console.log('Then run MySQL code:');
                  connection.connect(function(err) {
                      console.log('Inside connection.connect() callback');
                      if (!err) {
                          console.log("Database is connected ... ");
                          connection.query("SELECT 1 + 1 AS solution",
                              function(err, result) {
                                  console.log("Inside connection.query() callback")
                                  if (!err) {
                                      console.log(result);
                                      console.log("Query Successful! Ending Connection.");
                                      test = result;
                                      connection.end();
                            } else {
                                      console.log("Query error!");
                                  }
                              });
                      } else {
                          console.log("Error connecting database ..." +             err.message);
                      }
                  });
                  return test;
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 15:25:14

有两个问题。

1 VPC设置

VPC的设置,阅读@ Michael - sqlbot关于VPC的帖子帮助了很多。

在VPC中使用lambda时,需要考虑以下因素。

  • Lambda执行角色需要能够创建、描述和删除网络接口。
  • Lambda函数和RDS实例需要在同一个VPC中。
  • Lambda函数和RDS实例需要在同一个子网中。
  • Lambda函数和RDS实例需要共享一个安全组。
  • 该安全组需要有允许来自同一安全组中其他实体的通信的规则。
  • 子网需要有空闲的地址空间来允许lambda创建弹性网络接口。 源Amazon服务支持

2. Node.js回调

第二个基本上是node.js的回调地狱

当从Alexa意图调用该函数时,它在回调启动之前执行content.success。这在下一次执行代码时会导致超时,因为代码仍在忙着执行前面的命令。我通过使所有回调嵌套并在回调中生成SpeechletResponse来解决这个问题。

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

https://stackoverflow.com/questions/44008102

复制
相关文章

相似问题

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