aws-lambda - Lambda 连接到同一 VPC 中 ec2 内的 redis,但连接 ECONNREFUSED 失败
问题描述
我正在使用 redis npm,下面是我的代码的一部分:
const redis = require("redis");
const client = redis.createClient({ port: settings.redis_port, host: settings.redis_host });
当我在我的电脑上进行本地开发时,redis_host
设置为"127.0.0.1"
,当在 lambda 中时,redis_host
设置为"172.12.34.56"
. 在本地开发时,我需要先运行ssh -i "D:/Project/mykey.pem" -fNg -L 6379:localhost:6379 ubuntu@3.1.3.90 -p 22
,然后我上面的代码才能连接到redis。无论如何,在完成上述所有操作后,我的本地部署与 redis 连接得很好。
问题是当我将代码部署到 lambda 时。它总是会返回错误
ERROR Uncaught Exception {"errorType":"Error","errorMessage":"Redis connection to 172.12.34.56:6379 failed - connect ECONNREFUSED 172.12.34.56:6379","code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect","address":"172.12.34.56","port":6379,"stack":["Error: Redis connection to 172.12.34.56:6379 failed - connect ECONNREFUSED 172.12.34.56:6379"," at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)"]}
问题是,redis 与我的 MongoDB 驻留在同一个 ec2 实例中,我的 lambda 可以使用连接字符串毫无问题地访问 MongoDBmongoose.connect('mongodb://172.12.34.56:27017/mydb')
我还在6379
我的 ec2 实例的安全组入站规则中添加了端口,如下图所示:
我错过了什么吗?
解决方案
我通过以下方式解决了这个问题:
- 编辑
redis.conf
和注释掉bind 127.0.0.1 ::1
和 - 放
protected-mode no
我的 ec2 实例已经无法公开访问,因此切换保护模式应该不是问题。
推荐阅读
- r - 在R中第一次出现字符串后删除数据
- android - Android Spannable:仅在 Edittext 中复制/剪切自定义 Span 粘贴基类
- excel - 复制单元格范围并使用偏移按顺序粘贴
- java - 从 ZipInputStream 复制条目
- django - Django模型设计问题与关系
- java - Java - 使用 mkdir() 创建新目录?
- php - loop csv column values and concatenate values to new column in php
- java - Spring Auto REST Docs - don't work properly
- datatables - Does YADCF multi_select work with custom_select initialized via initSelectPluginCustomTriggers
- react-native - React Native font scale