将 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 错误