如何管理和连接EC2实例的动态IP?

时间:2011-05-18 07:28:15

标签: django memcached amazon-ec2 ip

使用Django等编写Web应用程序时,连接动态EC2实例的最佳方式是什么,例如Redis集群或memcache实例? IP地址在重新启动等之间会发生变化。默认情况下,弹性IP限制为5个 - 有哪些其他选项可用于自动发现/自动更新哪些计算机可用?

5 个答案:

答案 0 :(得分:2)

迟到的答案,但请使用Boto:http://boto.cloudhackers.com/en/latest/index.html

您可以使用安全组,标记和其他方法点击EC2 API,并在加载时为每个事物(数据库服务器,缓存服务器等)选择实例/ IP。我们在部署方面取得了巨大成功,并且正在使用我们的Django settings.py进行这种方式。

答案 1 :(得分:1)

我最近在AWS网络研讨会中提到的一种方法是将这种信息存储在SimpleDB中。实际上,您将使用SimpleDB作为中央配置位置,并且您启动的每个实例都将使用此配置注册其IP等,因此您始终可以在一个位置对所有实例进行完整描述。我在实践中没有看到这一点,所以我不知道最佳做法究竟是什么,但这个想法听起来很合理。我想你可以使用SNS或其他东西在配置发生变化时发出所有其他实例的信号,这样每个人都可以刷新配置的内存缓存。

我还不知道AWS管理API,但是可能会有一个API调用来列出您的EC2实例,此时您可以使用某种自定义协议来ping每个实例并询问它是什么 - - 部分memcache集群,Redis等。

答案 2 :(得分:1)

我遇到了类似的问题但尚未找到解决方案,因为我们还需要映射Load Balancers地址。

对于您的问题,有两个不错的选择:

如果您不使用EC2微型实例或负载均衡器,您绝对应该使用Amazon Virtual Private Cloud,因为它允许您控制实例IP和路由表(check all limitations before using this service)。

如果您只使用EC2实例,则可以编写一个脚本,该脚本使用EC2 API工具运行命令 ec2-describe-instances 以查找所有实例及其公共/私有IP。然后,脚本可以将实例名称参数化为主机并更新/ etc / hosts。最后,您应该将脚本放在需要访问EC2实例的每台计算机/实例的crontab中(请参阅ec2-describe-instances)。

答案 3 :(得分:0)

如果您想继续使用EC2实例(我在同一条船上,我已经读过您可以使用他们的VPC或使用S3桶或类似的东西来做这些事情。)但是对于EC2,我在写这样的东西的过程中......直到需要通过数据中心的服务器与服务器联系的部分,这一切都非常简单。我现在这样做的方式是使用API​​创建实例并启动它...然后一旦准备就绪,我联系服务器执行我在服务器上的powershell脚本.... powershell重命名计算机并重新启动...负责我们的数据中心防火墙需要主机名和MAC。我还没有找到远程重命名计算机的方法。

就知道IP而言,弹性IP是可行的方法。他们说你只允许5并且需要申请更多,但我们一直要求更多,他们会给我们。我们现在已经15岁了,他们还没有抱怨。

另一个选择,如果你不想做所有的计算机重命名等...你可以使用DHCP并设置你的计算机,所以当它启动它获取计算机名称和一切从DHCP ....我是我不确定如何准确地做到这一点,我遇到了非常聪明的人告诉我在亚马逊研究期间这样做的方法。

我肯定会建议您进入亚马逊API ...我已经使用它不到一个月了,我可以做各种疯狂的事情。我的代码可以检测到我们系统中面临压力的区域,启动了10台亚马逊服务器,这些服务器全部配置为充当任何需要缓解压力的工作,并准备好在不到7分钟内向所有人发送工作。给我的眼睛带来一滴泪。

文档非常完整...... API本身就是一件艺术品,也是一种喜欢编程的乐趣......我非常喜欢使用它。 (不,我不为他们工作大声笑)

答案 4 :(得分:0)

采用传统方式:使用DNS。这就是它的构建,所以使用它!当计算机启动时,请让它询问与其功能相关的域名,并将其用于您的配置。如果它停止响应,请重新解析DNS(或者只是定期执行此操作)。

如果你想坚持使用亚马逊解决方案,我认为route53和弹性负载平衡可以用来做到这一点。