amazon-web-services - 连接到 EC2 实例上的 redis 时连接被拒绝

标签 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: 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 函数具有以下代码。

'use strict';
const Redis = require('redis');

module.exports.hello = async event => {
  var redis = Redis.createClient({
      port: 6379,
      host: '127.0.0.1',
      password: ''
    });

  redis.on('connect', function(){
    console.log("Redis client conected : " );   
  });

  redis.set('age', 38, function(err, reply) {
    console.log(err);
    console.log(reply);
  });

  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'The lambda function is called..!!',
        input: event,
        redis: redis.get('age')
      },
      null,
      2
    ),
  };

};

请让我知道哪里出错了。

最佳答案

首先,您的 lambda 尝试连接到本地主机,因此这将不起作用。您必须放置 Redis 实例的公共(public)或私有(private) IP。

但是,你仍然需要确保这些事情

  • 应该与您的 EC2 实例在同一个 VPC 中
  • 应允许安全组中的出站流量
  • 分配子网
  • 你的实例允许lambda连接到安全组中的Redis
const redis = require('redis');
const redis_client = redis.createClient({
    host: 'you_instance_IP',
    port: 6379
});

    exports.handler = (event, context, callback) => {
        redis_client.set("foo", "bar");

        redis_client.get("foo", function(err, reply) {
            redis_client.unref();
            callback(null, reply);
        });
    };

你也可以看看这个how-should-i-connect-to-a-redis-instance-from-an-aws-lambda-function

关于amazon-web-services - 连接到 EC2 实例上的 redis 时连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57721208/

相关文章:

php - 502 高负载下使用 PHP-FPM 的 nginx 网关错误

java - Java 8 与 Java 9 中的 Stream.peek() 方法

redis - Redis作为时序数据库的可扩展性有多大

python - 如何使用 redis 存储和检索字典

amazon-web-services - 我收到一些 AWS CodeBuild 错误。我不知道如何解决它

amazon-web-services - 有没有办法在AWS SAM中导入am sql文件的内容?

c++ - 访问默认 lambda 参数中的模板类参数

c# - Spring.NET - 作为依赖项的 Lambdas - 可能使用 XML?

python - redis如何使不同哈希中的键过期

amazon-web-services - Amazon AWS EC2 Container Service 是否支持卷?