AWS EC2实例的本地IP更改解决方案

时间:2012-05-24 07:44:59

标签: amazon-ec2 amazon-web-services

Amazon仅为您提供一定数量的静态IP地址,并且每台EC2实例的本地(私有)ips可以在重新启动计算机时更改。这使得创建一个稳定的平台,据我所知,EC2实例依赖于彼此非常难以使用。

我已经在网上搜索了很多关于各种解决方案的内容,到目前为止,除了在EC2上分配弹性IP地址外,没有任何合理的解决方案,即使它不是公开的。有没有人有任何其他好的想法,实际上很容易执行?

谢谢!

请参阅AWS团队对问题Static local IP的回复:

  

EC2实例的内部IP地址通过DHCP分配。上   实例关闭,或DHCP租约到期时,IP地址为   返回一般EC2 DHCP池可用于其他地址   实例

     

无法保证您将获得相同的DHCP   在重新启动时解决。

编辑:答案是使用Amazon VPC。除了一小部分额外的设置之外没有任何缺点,因为现在你控制了路由器。它与AWS上的普通旧EC2实例不同。事实上,默认情况下,VPC将针对所有未来的AWS设置启用。有关详情,请参阅此帖子:http://www.reddit.com/r/aws/comments/1a3n0r/ec2_update_virtual_private_clouds_for_everyone/

5 个答案:

答案 0 :(得分:16)

股票答案是:

  1. 使用AWS VPC,以便您可以完全控制实例寻址
  2. 使用弹性IP,当用于在EC2实例之间进行通信时,弹性IP将解析为实例的本地地址(不是公共的,如您所期望的那样)

答案 1 :(得分:13)

我偶然发现了第三种选择。 Instragram人员有ec2-ssh。它是一个全局安装的python shell脚本,允许您通过标记名称查询ec2实例的公共dns,也可以通过via标记名称查询ssh

它的文档几乎不存在。我已经写下了下面安装的步骤:

安装ec2-ssh:

  1. sudo yum install python-boto(ec2 api的python包装器)
  2. git clone https://github.com/Instagram/ec2-ssh
  3. 在您的〜/ .bash_profile中设置您的AWS访问密钥和密码,如下所示:

    导出AWS_ACCESS_KEY_ID = XYZ123

    导出AWS_SECRET_ACCESS_KEY = XYZ123

  4. cd进入repo的bin文件夹,会有两个文件:

    ec2-hostec2-ssh

  5. 将它们复制到/usr/bin/usr/local/bin

    现在你可以做一些很棒的事情:

    $ ec2-host ZenWorker
    ec2-999-xy-999-99.compute-1.amazonaws.com
    

    $ ec2-ssh ZenWorker
    Connecting to ec2-999-xy-999-99.compute-1.amazonaws.com.
    

    请注意,在常规shell脚本中,您可以使用反引号来调用这些全局工具。我已经对这些调用进行了定时,并且使用EC2实例需要0.25到0.5秒,所以这确实是唯一的缺点。也许您可以忍受延迟,或者使用公共DNS仅在重新启动时更改实例以解决问题的事实。

    请注意,这两个程序是命令行脚本,您不需要任何Python知识就可以使用它们。对于PHP粉丝,或者想要在不知道更改公共DNS的情况下轻松访问scp文件的人,您可以结帐ec2dns

答案 2 :(得分:1)

我曾经遇到过同样的情况。我仍然没有足够的专业知识来妥善解决它。我丑陋的解决方案是使用elb实际上不是用于负载平衡,而是仅用于端点。

但我认为使用aws vpc可以获得一个好的解决方案。

答案 3 :(得分:1)

这是Updating Route 53 DNS from instance on AWS的另一个Ruby解决方案。您不应在应用程序或服务器配置中引用原始第三方系统IP地址。

答案 4 :(得分:0)

您可以使用Elastic Ip更改IP地址:  您可以使用C#代码:

 var associateRequest = new AssociateAddressRequest
            {
                 PublicIp = your Elastic Ip,
                 InstanceId = Your Instance Id Which You Assign
            };    
        amazonEc2Client.AssociateAddress(associateRequest);
之后

        var disAssociateRequest = new isassociateAddressRequest(publicIp.ElasticIpAddress1);
  AmazonEc2Client.DisassociateAddress(your Elastic Ip);

您的公共IP将改变