Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 连接EC2实例上的redis时拒绝连接_Amazon Web Services_Lambda_Redis_Localhost_Econnrefused - Fatal编程技术网

Amazon web services 连接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:

我正试图通过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: 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
        }
    )
});