7
votes

I have been reading through the Elastic Beanstalk and ElastiCache documentation on creating a connection between my EB instance and my Redis endpoint. I have added my endpoint to my session configuration in my Node.js app, but it doesn't appear that it is connecting to my Redis instance as indicated by an error that is getting thrown when accessing any pages that use the session. I know that the security groups between the Elastic Beanstalk and ElastiCache need to be the same, but do I need make adjustments to my environment to attach the two?

Here is my Redis connection in my Node.js app:

//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
    }
}));
1
What is the error?error2007s
Error: req.flash() requires sessions at /var/app/current/app/controllers/site-routes.js:34:15 which is linked to this code: siteRoutes.route('/login') .get(function(req, res){ res.render('pages/site/login.hbs',{ error: req.flash('error') }); }) which has been an issue in the past when I didn't have a redis correctly configured.cphill

1 Answers

8
votes

I'm not sure what you mean by this:

I know that the security groups between the Elastic Beanstalk and ElastiCache need to be the same

They don't need to be the same security group, if that is what you are saying. And they don't need to have the exact same settings, if that is what you are saying. Here's what you need to do:

  1. Elastic Beanstalk Servers are in a specific security group. We will call this SG1.
  2. ElastiCache instances are in a specific security group. We will call this SG2.
  3. Add a rule in SG2 that allows traffic on the port you specified when you configured the ElastiCache instances. The default port is 6379. In this Security Group rule use the ID of SG1 in the source field. For example if SG1 has an ID of sg-123456then enter that in the source field.

Once you have completed those steps then all Elastic Beanstalk instances will have access to your ElastiCache Redis instance(s).