Opsworks:Rails Layer连接到Elasticache:Redis

时间:2014-11-03 21:04:16

标签: ruby-on-rails amazon-web-services redis aws-opsworks

我正在尝试将在Opsworks中运行的Rails应用程序连接到Elasticache Redis层。 我无法让它发挥作用。

我目前的配置:

1堆叠(2个实例)
图层
  - Rails App Server   - MySQL

rails应用程序位于AWS-OpsWorks-Rails-App-Server安全组。

1个ElasticCache群集 ES群集位于default security sg-ff58559a (VPC)(active)安全组。

我使用'主要端点'尝试连接。

此值可从中看到   ElastiCache>复制组
仪表板。

看起来与此相似:
<name>.oveuui.ng.0001.use1.cache.amazonaws.com:6379

在我的rails控制台中(在SSH进入rails层之后)我尝试:

>r = Redis.new(:url => 'redis://<name>.oveuui.ng.0001.use1.cache.amazonaws.com:6379')
>r.connected

结果是:

Redis::CannotConnectError: Timed out connecting to Redis on...

2 个答案:

答案 0 :(得分:5)

如果您将群集启动到Amazon Virtual Private Cloud(Amazon VPC),则只能从在同一Amazon VPC中运行的Amazon EC2实例连接到ElastiCache群集。在这种情况下,您需要向群集授予网络入口。 授予从Amazon VPC安全组到群集的网络入口:

1.登录AWS管理控制台并在https://console.aws.amazon.com/ec2/打开Amazon EC2控制台。

2.在左侧导航窗格中的Network&amp;单击安全性,单击安全组。

3.在安全组列表中,单击Amazon VPC的安全组。如果您是新的ElastiCache用户,则此安全组将被命名为default。

4.单击“入站”选项卡,然后执行以下操作:

一个。单击“编辑”。

湾单击添加规则。

℃。在“类型”列中,选择“自定义TCP规则”。

d。在“端口范围”框中,键入缓存群集节点的端口号。此编号必须与启动群集时指定的编号相同。默认端口如下:

 Memcached: port 11211

 Redis: port 6379

即在“源”框中,选择具有端口范围(0.0.0.0/0)的Anywhere,以便在Amazon VPC中启动的任何Amazon EC2实例都可以连接到ElastiCache节点。

F。单击“保存”。

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/GettingStarted.AuthorizeAccess.html

答案 1 :(得分:3)

亚马逊只允许与您的Elasticache服务器位于同一安全组中的服务器与之通信。

此博客文章将引导您完成将Rails服务器层添加到正确的安全组的过程:http://aws.amazon.com/blogs/aws/using-aws-elasticache-for-redis-with-aws-opsworks/。它假设您在创建Elasticache集群时选择了&#34;默认&#34;安全组,似乎是这样的。如果是这样,请转到OpsWorks - &gt; (选择正确的堆栈) - &gt;单击图层,然后单击Rails App Server层的安全性。你应该看到这个:

您希望确保已添加&#34;默认&#34;安全组然后重新启动您的实例。请注意,当我这样做时,它仍然无法正常工作。我决定在EC2控制台(而不是OpsWorks控制台)中查看我的实例的详细信息,并发现新的&#34;默认&#34;我添加到图层的安全组实际上没有传播到我的实例。我不知道为什么会这样,所以我删除了实例并创建了一个全新的实例,这个新实例有了#34; AWS-OpsWorks-Rails-App-Server&#34;和&#34;默认&#34;安全组成功应用于它。因此,请记住这一点,以防万一不能立即工作并单击实例查看其设置并确认显示两个安全组。

请告诉我这是否适合您。