Amazon web services 连接EC2实例上的redis时拒绝连接
我正试图通过lambda函数连接到EC2实例上的本地redis数据库。然而,当我尝试执行代码时,我在日志中得到以下错误Amazon web services 连接EC2实例上的redis时拒绝连接,amazon-web-services,lambda,redis,localhost,econnrefused,Amazon Web Services,Lambda,Redis,Localhost,Econnrefused,我正试图通过lambda函数连接到EC2实例上的本地redis数据库。然而,当我尝试执行代码时,我在日志中得到以下错误 { "errorType": "Error", "errorMessage": "Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379", "code": "ECONNREFUSED", "stack": [ "Error:
{
"errorType": "Error",
"errorMessage": "Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379",
"code": "ECONNREFUSED",
"stack": [
"Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379",
" at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)"
],
"errno": "ECONNREFUSED",
"syscall": "connect",
"address": "127.0.0.1",
"port": 6379
}
安全组具有以下条目
Type: Custom TCP Rule
Port: 6379
Source: <my security group name>
Type: Custom TCP Rule
Port: 6379
Source: 0.0.0.0/0
请告诉我哪里出了问题。首先,您的lambda正在尝试连接到localhost,因此无法正常工作。您必须放置Redis实例的公共或私有IP 但是,你仍然需要确保这些事情
- 应与EC2实例位于同一VPC中
- 应允许安全组中的出站通信
- 分配子网
- 您的实例允许lambda与安全组中的Redis连接
您还可以研究一下这一点,首先,您的lambda试图连接到localhost,因此这将不起作用。您必须放置Redis实例的公共或私有IP 但是,你仍然需要确保这些事情
- 应与EC2实例位于同一VPC中
- 应允许安全组中的出站通信
- 分配子网
- 您的实例允许lambda与安全组中的Redis连接
您还可以在Linux Ubuntu server 20.04 LTS上查看此,我在EC2服务器重新启动后看到类似错误,对于我们的用例,EC2服务器通过cron作业运行express应用程序,使用passport.js连接nodeJs应用程序(随nvm安装)以使用Redis中的会话: Redis错误:错误:Redis连接到127.0.0.1:6379失败-连接到127.0.0.1:6379 在TCPConnectWrap.afterConnect[as oncomplete](net.js:1144:16){ 错误号:'econnrefered', 代码:'econnreference', 系统调用:“连接”, 地址:“127.0.0.1”, 港口:6379 } 当我的nodeJs应用程序以Ubuntu用户的身份运行时,我需要通过以下方式将该路径添加到/etc/crontab中:
sudo nano/etc/crontab
只需注释掉其中的原始路径,以便您可以在需要时切换回(我的原始路径设置为:path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin),并以以下格式附加您可能需要参考的bin的位置:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/home/ubuntu/.nvm/versions/node/v12.20.0/bin
对我来说,错误消失了
//redinit.js
const session = require('express-session');
const redis = require('redis');
const RedisStore = require('connect-redis')(session);
const { redisSecretKey } = process.env;
const redisClient = redis.createClient();
redisClient.on('error', (err) => {
console.log('Redis error: ', err);
});
const redisSession = session({
secret: redisSecretKey,
name: 'some_redis_store_name',
resave: true,
saveUninitialized: true,
cookie: { secure: false },
store: new RedisStore(
{
host: 'localhost', port: 6379, client: redisClient, ttl: 86400
}
)
});
module.exports=重新会话 在Linux Ubuntu server 20.04 LTS上,我在EC2服务器重新启动后看到了类似的错误,在我们的用例中,EC2服务器通过cron作业运行express应用程序,使用passport.js连接nodeJs应用程序(与nvm一起安装)以使用Redis中的会话: Redis错误:错误:Redis连接到127.0.0.1:6379失败-连接到127.0.0.1:6379 在TCPConnectWrap.afterConnect[as oncomplete](net.js:1144:16){ 错误号:'econnrefered', 代码:'econnreference', 系统调用:“连接”, 地址:“127.0.0.1”, 港口:6379 } 当我的nodeJs应用程序以Ubuntu用户的身份运行时,我需要通过以下方式将该路径添加到/etc/crontab中:
sudo nano/etc/crontab
只需注释掉其中的原始路径,以便您可以在需要时切换回(我的原始路径设置为:path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin),并以以下格式附加您可能需要参考的bin的位置:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/usr/bin:/home/ubuntu/.nvm/versions/node/v12.20.0/bin
对我来说,错误消失了
//redinit.js
const session = require('express-session');
const redis = require('redis');
const RedisStore = require('connect-redis')(session);
const { redisSecretKey } = process.env;
const redisClient = redis.createClient();
redisClient.on('error', (err) => {
console.log('Redis error: ', err);
});
const redisSession = session({
secret: redisSecretKey,
name: 'some_redis_store_name',
resave: true,
saveUninitialized: true,
cookie: { secure: false },
store: new RedisStore(
{
host: 'localhost', port: 6379, client: redisClient, ttl: 86400
}
)
});
module.exports=重新会话 谢谢,再见。我的redis实例在同一台EC2机器上。它不是作为服务部署的。我已经在EC2实例上手动安装了redis。您提到的要点是redis作为服务部署的时间。这是我的理解可能是我错了。我这样做的原因是因为我是aws的新成员,为了最小化我在同一实例上部署的学习曲线。谢谢ADII。我的redis实例在同一台EC2机器上。它不是作为服务部署的。我已经在EC2实例上手动安装了redis。您提到的要点是redis作为服务部署的时间。这是我的理解可能是我错了。我这样做的原因是因为我是aws的新加入者,为了最小化我在同一个实例上部署的学习曲线。
const session = require('express-session');
const redis = require('redis');
const RedisStore = require('connect-redis')(session);
const { redisSecretKey } = process.env;
const redisClient = redis.createClient();
redisClient.on('error', (err) => {
console.log('Redis error: ', err);
});
const redisSession = session({
secret: redisSecretKey,
name: 'some_redis_store_name',
resave: true,
saveUninitialized: true,
cookie: { secure: false },
store: new RedisStore(
{
host: 'localhost', port: 6379, client: redisClient, ttl: 86400
}
)
});