【问题标题】:Get Elastic IP from running instance从正在运行的实例中获取弹性 IP
【发布时间】:2012-05-08 10:55:56
【问题描述】:

通过在 EC2 实例上运行的 java 应用程序,我想知道我自己的弹性 IP 地址是从管理控制台手动分配的。有没有办法为此查询 EC2 API?

【问题讨论】:

  • 我认为您的方法可能有些不习惯。可能有更好的方法来实现你的最终目标,但我本人对 EC2 很陌生,所以我不能告诉你常见的 sdlc 模式是什么。但是,我假设您的建议(即需要在运行时找出您自己的 ip)可能不需要,除非在某些极端情况下。
  • 可能不会。我试图将我的解释范围限制在易于理解的范围内,这使您有些受阻。似乎我的回复失败了。基本上我想说的是,我正在寻找确切问题的答案而不是解决方法,因为我有非常特殊的理由需要这样做,我不想详细解释。 :)

标签: java amazon-ec2 amazon-web-services


【解决方案1】:

替代方案(不是最清晰的解决方案),可能是请求这样的外部服务来了解您的公共 IP。 http://whatismyip.org/

编辑:我发现了一个返回 json 或文本格式的好服务。 https://www.ipify.org/

【讨论】:

  • 它确实有效,但是当然需要解析响应。
【解决方案2】:

如果您使用的是 linux ec2 实例,这应该可以:

命令:

curl http://169.254.169.254/latest/meta-data/public-ipv4

Java 代码:

public static String getIP() throws IOException, InterruptedException {
    Process p = Runtime.getRuntime().exec("curl http://169.254.169.254/latest/meta-data/public-ipv4");
    int returnCode = p.waitFor();
    if ( returnCode == 0 ) {
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String ip = r.readLine();
        r.close();
        return ip;
    }
    else {
        //handle error
        return null;
    }
}

【讨论】:

  • 谢谢,我打算做一些类似的事情,因为这似乎是唯一可行的方法。我希望有更多的直接 API 调用,但我可以将上述内容包装到 jax-rs 调用中,以使其更加 api-ish。 :)
  • 好的,我已经将它实现为一个 jaxrs 服务并且对它很满意。似乎我们没有得到更优雅的答案,所以我会接受你的。谢谢。
【解决方案3】:

您可以致电DescribeInstances - 它会返回一堆信息,包括公共 IP 地址(ip-address 过滤器)。

...
DescribeInstancesRequest dis = new DescribeInstancesRequest();   
DescribeInstancesResult disresult = ec2.describeInstances(dis);
...

【讨论】:

  • 是的,我试过了,但它并没有告诉我其中哪一个是我的。从 sdlc 的角度考虑一下。我有一个开发 EC2 实例和一个生产 EC2 实例。我希望开发 EC2 实例连接到开发数据库,​​生产实例指向生产数据库。我不想创建自定义应用程序、配置等进行部署。我想问问亚马逊我目前使用的是什么弹性 IP 地址。我想要这种能力还有很多其他原因。这只是一个例子。
  • @hockey_dave,你如何创建开发/测试实例?
  • 您只需创建一个实例,然后将其用于您想要的。 EC2 没有开发实例的概念。这是我们自己的内部名称。我们为其实例添加了一个有意义的标签,以便我们可以轻松地判断 AWS 控制台中的内容。
  • 等一下,您在亚马逊云上运行并尝试减少对亚马逊 AWS API 的依赖?这对我来说没有任何意义。
  • @aviad 尝试从业务角度考虑它。供应商锁定对企业来说不是一件好事。将需要某种适配层来将他的应用程序从 AWS 移植到(例如)OpenStack。如果需要包装的 API 更少,更换提供商的成本和风险就会降低。
猜你喜欢
  • 2016-09-17
  • 2019-10-13
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2018-04-17
  • 2021-02-18
相关资源
最近更新 更多