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

Django 如何管理和连接EC2实例的动态IP?,django,memcached,amazon-ec2,ip,Django,Memcached,Amazon Ec2,Ip,在使用Django等编写web应用程序时,连接到动态EC2实例(例如Redis或memcache实例集群)的最佳方式是什么?IP地址在重新启动之间更改,等等。默认情况下,弹性IP限制为5个-自动发现/自动更新哪些机器可用还有哪些其他选项?我最近在AWS网络研讨会上提到的一种方法是将此类信息存储在SimpleDB中。基本上,您将使用SimpleDB作为中心配置位置,并且您启动的每个实例都将使用此配置注册其IP等,因此您将始终在一个位置拥有所有实例的完整描述。我还没有在实践中看到这一点,所以我不知道

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

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


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

如果您想继续使用EC2实例(我也有同感,我读到你可以用他们的VPC做这些事情,或者使用S3 bucket之类的东西。)但是,对于EC2,我正在编写这样的东西……这是非常简单的,直到你需要从你的数据中心或某个服务器与服务器联系的那一部分。我现在正在使用API创建实例并启动它……一旦它准备就绪,我就与服务器联系以执行PosiScript脚本。我在服务器上拥有的…powershell重命名计算机并重新启动它…这就解决了数据中心防火墙需要主机名和MAC的问题。我还没有找到远程重命名计算机的方法

就了解IP而言,弹性IP是一个不错的选择。他们说你只允许申请5个,还需要申请更多,但我们经常要求更多,他们会给我们。我们现在已经有15个了,他们还没有抱怨

另一个选择是,如果你不想做所有的计算机重命名等…你可以使用DHCP,并设置你的计算机,这样当它启动时,它会得到计算机名和DHCP中的所有信息…我不知道该怎么做,我遇到非常聪明的人告诉我,在我为亚马逊做研究的过程中,这样做是可行的

我绝对建议您使用Amazon API…我已经使用它不到一个月了,我可以做各种疯狂的事情。我的代码可以检测到系统中有压力的区域,启动10台Amazon服务器,所有这些服务器都配置为任何需要缓解压力的服务器,并准备在不到一个月的时间内向所有人发送作业7分钟。让我热泪盈眶


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

我遇到了类似的问题,但还没有找到解决方案,因为我们还需要映射负载平衡器的地址

对于您的问题,有两个很好的选择:

如果您没有使用EC2微实例或负载平衡器,那么您肯定应该使用Amazon虚拟私有云,因为它允许您控制实例IP和路由表()


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

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


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

稍后回答,但请同时使用:


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

为了澄清一些问题,我们需要采取重命名路线的问题是,我们的数据中心防火墙需要知道我们的计算机名和mac地址,然后才能让它与我们交互(或者更具体地说,它的服务与我们交互)。如果您不需要这些预防措施,那么您可以非常轻松地使用API获取您所需的有关正在运行的实例的所有信息……使用DescribeInstanceRequest和DescribeInstanceResponse方法。