我只是在Amazon AWS上设置我们的Rails应用程序。 我们有2个EC2实例,一个用于Rails应用程序,另一个用于Redis。 然后是Amazon RDS for MySQL。
当我将Rails应用程序连接到Redis时,需要设置包含IP地址的Redis URL。 但是,如果我重新启动Redis实例,其IP地址将会更改,并且我input到Redis的Rails应用程序的Redis URL IP将不起作用(因为重新启动Redis实例后会生成新的IP)。
如何处理这种行为? 如何在重新启动时避免“丢失”EC2实例? 亚马逊RDS也是如此 – 这是我在database.yml
设置主机的方式:
host: myapp-production.cg4mxcg62ca0.us-west-2.rds.amazonaws.com
先谢谢你。
问题1:
不应使用弹性IP地址来保留“后端”服务器的地址。 有两个原因:
相反,你应该通过它的私有IP地址来引用你的后端服务器。 停止并重新启动EC2实例不会更改私有IP地址。 只有当EC2实例终止时,才会释放内部IP地址。 而当你启动一个EC2实例时,你可以select它的私有IP地址。
您可以为您的后端服务器创buildDNS条目(路由53私有托pipe区域)。
你可以做的另一件事,但不是必需的,是用你的私人IP地址创build一个networking接口。 然后将该networking接口附加到EC2实例。 如果您需要新的后端服务器,那么只需将networking接口移动到新的实例,私有IP地址将随之移动。
问题2:
RDS实例端点不会随着时间而改变。
另外,RDS实例不能停止。 他们只能被删除。 但是,即使您删除RDS实例并重新创build它,如果它具有相同的RDS实例ID,那么它的端点将保持一致。
因此,通过主机名myapp-production.cg4mxcg62ca0.us-west-2.rds.amazonaws.com
引用您的RDS实例是安全的,也是最佳做法。
最后的想法:
将您的Redis服务器和您的RDS实例置于私有子网中的VPC中。 没有理由为什么公众需要访问他们。 您的Rails应用程序实例应该位于公共子网中,因为公众将通过该实例访问您的应用程序。