首页 文章

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

提问于
浏览
24

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 回答

  • 16

    股票答案是:

    • 使用AWS VPC,这样您就可以完全控制实例寻址

    • 使用弹性IP,当用于在EC2实例之间进行通信时,弹性IP将解析为实例的本地地址(不是公共的,如您所期望的那样)

  • 1

    我偶然发现了第三种选择 . 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-hostec2-ssh

    将它们复制到 /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 .

  • 0

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

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

  • 1

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

  • 13

    you can change Ip Address using Elastic Ip: You Can Do Using C# Code:

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

    after That DeAssociate It.

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

    your Public Ip Will Change

相关问题