如何获得一个EC实例的静态IP? 或者,如何使用

我只是在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地址来保留“后端”服务器的地址。 有两个原因:

  1. 通常情况下,您不希望将后端服务器暴露给Internet,并且弹性IP地址只能从Internet工作到您的EC2实例。
  2. 如果您通过弹性IP地址从一个EC2实例连接到另一个EC2实例,则连接将离开您的VPC并重新进入VPC。 这使得安全性更高,并会导致数据stream量费用。

相反,你应该通过它的私有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应用程序实例应该位于公共子网中,因为公众将通过该实例访问您的应用程序。