我正在尝试使用 Node 编写一个 Lambda 函数.js该函数连接到我的 RDS 数据库。该数据库正在运行,可以从我的 Elastic Beanstalk 环境访问。当我运行该函数时,它返回超时错误。
尝试将超时增加到 5 分钟,结果完全相同。
经过一些研究,我得出的结论是,这可能是一个安全问题,但在亚马逊的留档或这个答案中找不到解决方案(这是我在这个话题上唯一能找到的答案)。
以下是安全详细信息:
我的代码是:
'use strict';
console.log("Loading getContacts function");
var AWS = require('aws-sdk');
var mysql = require('mysql');
exports.handler = (event, context, callback) => {
var connection = mysql.createConnection({
host : '...',
user : '...',
password : '...',
port : 3306,
database: 'ebdb',
debug : false
});
connection.connect(function(err) {
if (err) callback(null, 'error ' +err);
else callback(null, 'Success');
});
};
我得到的结果是:
"errorMessage": "2017-03-05T05:57:46.851Z 9ae64c49-0168-11e7-b49a-a1e77ae6f56c Task timed out after 10.00 seconds"
RDS和Lambda都在同一安全组中。
这是关键。默认情况下,不允许在同一个安全组内进行通信。而且你需要明确的允许(E.x sg-xxxxx ALL TCP)。只有当你的lambda试图通过私有ip访问db时,这才会起作用。
如果它试图通过公共 IP 访问它,它将不起作用,您也需要为此打出必要的整体。
但是有更好的方法:
3306
上的入站流量(适用于 lambdas sg)。我想感谢每一个帮助我的人,这个问题和我想象的不一样。出于某种原因,代码中的< code>callback不起作用,尽管它在AMAZON自己的默认示例中。
工作代码如下:
'use strict';
console.log("Loading getContacts function");
var AWS = require('aws-sdk');
var mysql = require('mysql');
exports.handler = (event, context) => {
var connection = mysql.createConnection({
host : '...',
user : '...',
password : '...',
port : 3306,
database: 'ebdb',
debug : false
});
connection.connect(function(err) {
if (err) context.fail();
else context.succeed('Success');
});
};
虽然使用context会起作用,但是只需要添加< code > context . callbackwaitsforemptyeventloop = false;到处理程序,然后像这样正常使用回调:
exports.handler = (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
var connection = mysql.createConnection({
//connection info
});
connection.connect(function(err) {
if (err) callback(err);
else callback(null, 'Success');
});
};
答案在文档中(我花了几个小时才找到):http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-using-old-runtime.html
在“比较上下文和回调方法”部分,它有一个“重要”注释来解释事情。
纸条的底部写着:
因此,如果需要与上下文方法相同的行为,则必须将上下文对象属性 callbackWaitsForEmptyEventLoop 设置为 false。
基本上,回调继续到事件循环的结束,而不是结束事件循环的上下文。因此,设置回调WaitsFor
问题内容: 我在代码中使用了RMI: 这些是4个.java文件。 接下来,我编译所有这些文件。然后创建一个using 。之后,我使用来在服务器端启动rmi注册表。然后,我开始使用服务器,最后使用客户端。 但是什么也没发生 客户端抛出的异常是 原因是什么,我该如何解决? 在客户端计算机上,这些是以下.class文件,在服务器端 问题答案: 错误消息说明了一切:您的连接超时。这意味着您的请求在某个(默
代码片段如下所示: 如果有人有决议,请帮忙?
**dataframe2:从另一个来源获得的键的Dataframe(这些键是上表中ID列的分区键)-此表中不同键的数量约为0.15万** 现在,此代码总是导致“com.datastax.oss.driver.api.core.servererrors.ReadFailureException:在一致性LOCAL_ONE读取查询期间Cassandra失败(需要1个响应,但只有0个副本响应,1个失败)
我正在使用带有PostgreSQL数据库服务器的桌面应用程序。当我连续10到20分钟不使用应用程序时,数据库连接会断开。我正在使用PostgresqlJDBC进行数据库连接。 请帮我在这个数据库连接超时。 谢谢
我正在使用Java套接字创建加密通信终端。我的问题是,当我通过“localhost”或我的计算机局域网地址连接时,程序连接完美,并按预期工作,但当我使用我的公共IP地址连接时,连接被拒绝,我得到 java.net.连接异常:连接超时:连接java.base/java.net.DualStackPlainSocketImpl.connect0(本地方法)在java.base/java.net.Dua
我在vm上运行rabbitMQ服务器。我正在学习rabbitMQ java教程。它在vm上本地运行良好,但当尝试从主机发送时,我遇到了一个异常 以下是我正在使用的发送代码: 我可以ping服务器在192.168.198.100但我不能访问管理UI在192.168.198.100:15672/ 有人能帮我弄清楚这个问题出了什么问题吗?提前感谢。
在将AndroidStudio 2.3升级到3.0之后,我犯了很多错误,做了很多工作,但都没有成功 错误:无法解析配置“:app:debugCompileClasspath”的所有文件。 无法解析com。Android支持:appcompat-v7:26.1.0。必需:项目:应用无法解析com。Android支持:appcompat-v7:26.1.0。无法分析POMhttps://dl.goog
我想在云运行应用程序中连接云SQL。我使用了golang。这是关于sql连接设置的代码。 我在Cloud Run设置控制台设置了环境变量。delpoy Application后,Cloud Run控制台显示和