【问题标题】:Solution for local ip changes of AWS EC2 instancesAWS EC2实例本地ip变更解决方案
【发布时间】:2012-05-30 18:52:32
【问题描述】:

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

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

谢谢!

查看 AWS 团队对问题 Static local IP 的回复:

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

无法保证您将获得相同的 DHCP 重新启动时的地址。

编辑: 答案是使用 Amazon VPC。除了微不足道的额外设置外,没有任何缺点,因为现在您可以控制路由器。这是一个不同于 AWS 上普通旧 EC2 实例的世界。事实上,默认情况下将为所有未来的 AWS 设置启用 VPC,这是非常必要的。有关更多信息,请参阅此帖子:http://www.reddit.com/r/aws/comments/1a3n0r/ec2_update_virtual_private_clouds_for_everyone/

【问题讨论】:

标签: amazon-ec2 amazon-web-services


【解决方案1】:

常见的答案是:

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

【讨论】:

  • 感谢 gabrtv。请注意,AWS VPC 不适用于微实例。我正在使用 Kue 创建一个发布/订阅工作队列,并且购买所有小型实例(以 4 倍的成本)是无法管理的。查看其他解决方案。
  • 此外,您可以拥有的弹性 IP 数量是有限的。我们的限制似乎是 10。
  • @MauvisLedford 我相信限制从 5 开始。但是您可以在此处请求更多弹性 IP:aws.amazon.com/contact-us/eip_limit_request
  • 这里有一个更新,VPC 现在可以与微实例一起使用,并且我有一个带有两个实例的可用 VPC 原型。一个可通过弹性 ip 公开寻址,另一个仅使用本地 ip,并且只能在我的专用网络内通信。这确实是要走的路。最重要的是无需额外付费使用。
  • “使用弹性 IP,当用于 EC2 实例之间通信时,它将解析为实例的本地地址(不是您所期望的公共地址)” 主要警告:如果您使用公共 DNS 名称,而不是公共 IP 地址,它只会这样解析。
【解决方案2】:

我偶然发现了第三个选项。 Instragram 的人有ec2-ssh。这是一个全局安装的 python shell 脚本,它可以让你通过标签名查询你的 ec2 实例的公共 dns,也可以通过标签名查询ssh

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

安装 ec2-ssh:

  1. sudo yum install python-boto(ec2 api 的 python 包装器)
  2. git 克隆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

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

【讨论】:

    【解决方案3】:

    我曾经遇到过同样的情况。我仍然没有专业知识来正确解决它。我丑陋的解决方案是使用 elb 而不是真正用于负载平衡,而只是用于端点。

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

    【讨论】:

    • 这可以加起来至少每月 18.60 美元 + 每处理 GB 数据 0.008 美元。感谢您讨论该选项。将调查 Amazon Virtual Private Cloud。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      您可以使用弹性 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 将发生变化

      【讨论】:

        猜你喜欢
        • 2021-04-19
        • 2018-11-15
        • 2022-01-07
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-11
        相关资源
        最近更新 更多