Amazon仅为您提供一定数量的静态IP地址,并且每台EC2实例的本地(私有)ips可在计算机重新启动时更改 . 这使得创建一个稳定的平台,据我所知,EC2实例依赖于彼此非常难以使用 .
我在网上搜索了很多关于各种解决方案的内容,到目前为止,除了在EC2上分配弹性IP地址之外没有任何合理的解决方案,即使它不是公开的 . 有没有人有任何其他好的想法,实际上很容易执行?
谢谢!
请参阅AWS团队对问题Static local IP的回复:
EC2实例的内部IP地址通过DHCP分配 . 在实例关闭时,或者当DHCP租约到期时,IP地址将返回到可用于其他实例的常规EC2 DHCP地址池 . 无法保证在重新启动后获得相同的DHCP地址 .
Edit: 答案是使用Amazon VPC . 除了一小部分额外的设置之外没有任何缺点,因为现在你控制了路由器 . 它实际上是必要的,默认情况下将为所有未来的AWS设置启用VPC . 有关更多信息,请参阅此帖子:http://www.reddit.com/r/aws/comments/1a3n0r/ec2_update_virtual_private_clouds_for_everyone/
5 回答
股票答案是:
使用AWS VPC,这样您就可以完全控制实例寻址
使用弹性IP,当用于在EC2实例之间进行通信时,弹性IP将解析为实例的本地地址(不是公共的,如您所期望的那样)
我偶然发现了第三种选择 . Instragram人员有ec2-ssh . 它是一个全局安装的python shell脚本,允许您通过标记名称查询ec2实例的公共dns,也可以通过via标记名称查询
ssh
.它的文档几乎不存在 . 我已经写下了以下安装步骤:
要安装ec2-ssh:
sudo yum install python-boto
(ec2 api的python包装器)git clone https://github.com/Instagram/ec2-ssh
在〜/ .bash_profile中设置您的AWS访问密钥和密码,如下所示:
export AWS_ACCESS_KEY_ID = XYZ123
export AWS_SECRET_ACCESS_KEY = XYZ123
cd
进入repo的bin
文件夹,会有两个文件:ec2-host
和ec2-ssh
将它们复制到
/usr/bin
或/usr/local/bin
.现在你可以做一些很棒的东西,比如:
和
请注意,在常规shell脚本中,您可以使用反引号来调用这些全局工具 . 我已经对这些调用进行了定时,并且使用EC2实例需要0.25到0.5秒,所以这确实是唯一的缺点 . 也许您可以忍受延迟,或者使用公共DNS仅在重新启动时更改实例以解决问题的事实 .
请注意,这两个程序是命令行脚本,您不需要任何Python知识即可使用它们 . 对于PHP粉丝,或那些想要在不知道更改公共DNS的情况下轻松访问
scp
文件的人,您可以签出ec2dns .我曾经遇到过同样的情况 . 我仍然没有足够的专业知识来妥善解决它 . 我丑陋的解决方案是使用elb实际上不是用于负载 balancer 而是仅用于 endpoints .
但我认为使用aws vpc可以获得一个好的解决方案 .
这是Updating Route 53 DNS from instance on AWS的另一个Ruby解决方案 . 您不应在应用程序或服务器配置中引用原始第三方系统IP地址 .
you can change Ip Address using Elastic Ip: You Can Do Using C# Code:
after That DeAssociate It.
your Public Ip Will Change