使用AWS Elasticache Redis管理Sails.js中的会话

使用AWS Elasticache Redis管理Sails.js中的会话

问题描述:

我目前在我的Sails.js项目中使用connect-redis来利用本地安装的redis实例。将来,我想为多个服务器实例(负载均衡器后面)使用通用的Redis实例,所以我一直在关注AWS Elasticache。不过,我在配置时遇到了问题。使用AWS Elasticache Redis管理Sails.js中的会话

帆项目\设置\ session.js:

adapter: 'connect-redis', 
host: 'primary-endpoint.xxxxxx.ng.0001.apse1.cache.amazonaws.com', 
port: 6379, 
ttl: <redis session TTL in seconds>, 
db: 0, 
pass: <redis auth password>, 
prefix: 'sess:', 

应该采取什么TTL值是什么?通过属性应该以何种方式指向IAM?

我试图在IAM创建用户与AmazonElastiCacheFullAccess权限,并把它的访问密钥ID在pass属性,但我在服务器控制台得到这个错误(在我的Windows盒测试):

C:\repos\sails-project\node_modules\connect-redis\lib\connect-redis.js:83 
     throw err; 
    ^
AbortError: Redis connection lost and command aborted. It might have been processed. 
    at RedisClient.flush_and_error (C:\repos\sails-project\node_modules\redis\index.js:362:23) 
... 

任何想要改变什么?

+1

我猜TTL是您认为适合您的应用程序的任何内容,具体取决于您希望会话持续多长时间。 至于IAM的东西。 1)我不认为IAM用户会在这里工作?它要求您提供Elasticache用户名和密码,而不是AWS用户名/密码。 2)Redis的是默认打开的,所以你不会需要验证(这并不是说你不应该,但你应该看看Redis的土办法做到这一点)。 – d1ll1nger

+0

是的,当我在与服务器相同的实例上运行Redis时,我不提供配置中的任何凭据。不过,我认为指向不同服务器时需要进行身份验证。据我所知,似乎没有被任何“Elasticache用户名,”虽然如此,我对如何拼凑这些疑惑起来(或者如果它甚至有可能)。 – carpiediem

+0

是的,这有点奇怪。我听到的最后一句是弹性缓存redis服务应该被安全组锁定,就是这样。如果您需要进一步控制,那么在EC2上产生redis。 – d1ll1nger

我打算假设你的“windows box”在AWS之外。

对于Elasticache,您无法从AWS以外访问它。请参阅此处的安全性部分:https://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

最常见的用例是在VPC访问中使用EC2实例并使用Elasticache服务。除此之外,Elasticache Redis服务不采用身份验证,只允许通过安全组锁定。

如果你需要的东西,从这个配置的区别,那么你应该看看把Redis的EC2上,让你有完全控制权。

+0

啊哈,你是对的!到目前为止,我一直在测试我的笔记本电脑。我没有尝试过AWS,因为我认为这是由于代码中的错误。正如你所建议的那样,我会尝试在AWS上进行测试。 – carpiediem