将 ElastiCache 连接到 Elastic Beanstalk 实例
Posted
技术标签:
【中文标题】将 ElastiCache 连接到 Elastic Beanstalk 实例【英文标题】:Connect ElastiCache to Elastic Beanstalk Instance 【发布时间】:2016-12-21 05:29:48 【问题描述】:我一直在阅读有关在我的 EB 实例和我的 Redis 端点之间创建连接的 Elastic Beanstalk 和 ElastiCache 文档。我已将端点添加到我的 Node.js 应用程序中的会话配置中,但它似乎没有连接到我的 Redis 实例,正如访问使用会话的任何页面时抛出的错误所指示的那样。我知道 Elastic Beanstalk 和 ElastiCache 之间的安全组需要相同,但我是否需要对我的环境进行调整以附加两者?
这是我的 Node.js 应用程序中的 Redis 连接:
//Session Cookie
app.use(cookieParser());
app.use(session(
store: new RedisStore(
host: 'redis-production.dfdfa.0001.use1.cache.amazonaws.com',
port: 6379
),
secret: process.env.SECRET,
resave: true,
saveUninitialized: true,
cookie:
httpOnly: true,
secure: false //turn to true on production once https is in place
));
【问题讨论】:
错误是什么?Error: req.flash() requires sessions
at /var/app/current/app/controllers/site-routes.js:34:15
链接到此代码:siteRoutes.route('/login') .get(function(req, res) res.render('pages/site/login.hbs', error: req.flash('error') ); )
过去当我没有正确配置 redis 时这是一个问题。
【参考方案1】:
我不确定你的意思是什么:
我知道 Elastic Beanstalk 和 ElastiCache 需要相同
他们不需要是同一个安全组,如果这就是你所说的。如果这就是您所说的,它们不需要具有完全相同的设置。以下是您需要做的:
-
Elastic Beanstalk 服务器位于特定的安全组中。我们称之为 SG1。
ElastiCache 实例位于特定的安全组中。我们将其称为 SG2。
在 SG2 中添加一个规则,允许您在配置 ElastiCache 实例时指定的端口上的流量。默认端口为
6379
。在此安全组规则中,在源字段中使用 SG1 的 ID。例如,如果 SG1 的 ID 为 sg-123456
,则在源字段中输入该 ID。
完成这些步骤后,所有 Elastic Beanstalk 实例都将有权访问您的 ElastiCache Redis 实例。
【讨论】:
感谢您解决了我对安全组依赖项的困惑。我应该使用什么字段类型来输入sg-123456
值?
我不确定您所说的“字段类型”是什么意思。您需要找到 EB 安全组的“Group ID”,它将被格式化为“sg-xxxxx”。找到它,然后将其复制/粘贴到 ElastiCache 安全组中入站规则的“源”字段中。如果您开始在“来源”字段中输入“sg”,它将显示您的安全组列表供您选择。
@MarkB 如果他们都在同一个安全组中,我应该添加任何规则吗?这些规则是什么?如果不是,为什么我在尝试从 Elastic Beanstalk 连接到 ElastiCache 时仍然收到超时错误?
@Mouneer 在 AWS 中让两个资源共享一个安全组是没有意义的。这本身并没有打开两个资源之间的任何通信方式。您必须为任何网络流量定义特定的入站规则。
@MarkB 但文档说任何安全组的默认入站规则都是“允许来自分配给同一安全组的实例的入站流量”。 docs.aws.amazon.com/vpc/latest/userguide/… 我定义了这个 sg-xxxxxxx
规则。可能是什么问题?以上是关于将 ElastiCache 连接到 Elastic Beanstalk 实例的主要内容,如果未能解决你的问题,请参考以下文章
Opsworks:Rails 层连接到 Elasticache:Redis
如何从本地机器上运行的 Django App 连接到 ElastiCache 实例 (Redis)
无法使用用于 memcached 的 Membase 客户端库连接到 AWS ElastiCache 集群
如何使用 `redis` 通过 SSL 跨 ssh 隧道连接到 Redis 实例(AWS elasticache)?
从 ECS 集群中的 docker nodejs EC2 容器连接到 Redis Elasticache 集群
Django Channels 2.4 和 Websockets 在 Elastic Beanstalk 和 ElastiCache 上给出 502 错误