重启后,亚马逊实例的IP地址会发生变化。如何使用Java API找到新的IP地址?如何查找重启时的亚马逊EC2实例的IP地址
回答
假设你不想分配一个弹性IP地址(也有原因,这并不总是一个解决方案),那么只需拨打DescribeInstances
在重新启动实例,它返回一串信息包括公共IP地址。
这是关于主题的AWS EC2 Java API Documentation。
我向你提供了八位上师。你知道任何简单的方法来获取最后创建的实例的InstanceID,以便立即关联ElasticIP吗?据我所知,它需要从'ec2-run-instances'解析返回的信息,或者使用bash和'aws ec2 run-instances'中的返回JSON解析JSON。试图避免额外的依赖。 – JohnAllen
为了阐明上面的'DescribeInstances'命令,我喜欢使用这个命令:'aws ec2 describe-instances | grep“Value \ | PublicIpAddress”'(当然你需要安装aws cli) – modulitos
为什么感谢你,善良的匿名downvoter。通过严厉批评我六年前接受的答案,你的理由让我的代表略微下降是非常明显的,不需要任何评论! –
假设您重新启动实例并且不是从头开始启动,而是您可以分配始终保留在ec2实例中的弹性IP(除非将IP移动到另一台服务器)。这使您可以将所有DNS指向该IP,而不必担心重新启动会导致问题。
我认为这就是你要求的,但还有其他的东西你可能会问。服务器的内部IP会发生变化(如果您重新启动实例而不重新启动),并且您无法“保留”它,因此您可能需要创建一个脚本来为您提供新的IP(如果指向内部服务)。
希望帮助
重启后,EC2实例的IP地址做而不是更改。它们通常会在停止/启动非VPC EBS引导实例时进行更改。
见我的回答对你在这里相关的问题:
也就是说,你可以通过在您的特定语言的API调用DescribeInstances找到私人和公共IP地址。
如果你在该实例本身,你也可以用简单的HTTP找到通过用户数据API的IP地址:
http://instance-data/latest/meta-data/local-ipv4
http://instance-data/latest/meta-data/public-ipv4
例如,
wget -qO- http://instance-data/latest/meta-data/public-ipv4
Elastic IP addresses被推荐为为特定服务或服务器保持一致(静态)面向外部的IP地址。这些需要在停止/启动后重新分配给实例(但不是在重新启动后)。
这是一个可靠的完整答案。 “wget”提供了特定的正确答案,而周围的散文也很有帮助/有用。 – javadba
curl http://169.254.169.254/latest/meta-data/public-ipv4
这应该是公认的答案,也是他们在文档中说的。 http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html – jontsai
这是什么奇怪的IP?从服务器中调用这个未知IP是否是安全威胁? :D 我建议编辑解释IP,看起来好像不被接受 –
@RavindranathAkila不能,你可以在你的EC2实例中使用这个命令 –
这是我做这件事是一个Ubuntu 12.04 EC2实例的VPC内:
curl ifconfig.me
不知道为什么,但公众的IPv4没有元数据网址下找到
我试过了:它没有响应挂起 – javadba
在CentOS 7上工作 –
为了获取实例的公共IP,您首先需要获取该实例的实例ID。您可以使用以下Java代码获取实例的实例ID。
List<Instance> instances = runInstancesResult.getReservation().getInstances();
String instanceId = instances.get(0).toString().substring(13, 23);
现在为了获得公共IP,您可以使用下面的java代码。
public void fetchInstancePublicIP() {
DescribeInstancesRequest request = new DescribeInstancesRequest().withInstanceIds("i-d99ae7d2");
DescribeInstancesResult result= ec2.describeInstances(request);
List <Reservation> list = result.getReservations();
for (Reservation res:list) {
List <Instance> instanceList= res.getInstances();
for (Instance instance:instanceList){
System.out.println("Public IP :" + instance.getPublicIpAddress());
System.out.println("Public DNS :" + instance.getPublicDnsName());
System.out.println("Instance State :" + instance.getState());
System.out.println("Instance TAGS :" + instance.getTags());
}
}
}
它们有util类,它有助于访问EC2元数据。 例如
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicHostname();
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicIPv4s();
您可以使用此功能。
var ipofnewServer = string.Empty;
while (string.IsNullOrEmpty(ipofnewServer))
{
var statusRequest1 = new DescribeInstancesRequest
{
InstanceIds = new List<string>() { instanceId }
};
var result = amazonEc2client.DescribeInstances(statusRequest1);
var status = result.Reservations[0].Instances.FirstOrDefault();
if (status != null)
{
ipofnewServer = status.PublicIpAddress;
}
}
公共IPv4地址也可以从EC2实例,像这样:
curl checkip.amazonaws.com
而且公众主机名是:
dig -x $(curl -s checkip.amazonaws.com) +short
这实际上效果更好。上面的回答/ public-ipv4一直在运行直到最近,不确定AWS是否改变了某些东西,或者限制了通过ELB的流量产生了影响,但是我得到了两个实例上报告的弹性IP。然而,curl checkip正确无误,我的弹性ip在一个上,另一个是随机分配的。 –
- 1. 寻找亚马逊的IP地址aws
- 2. 亚马逊EC2实例
- 3. 亚马逊实例EC2连接超时
- 4. 亚马逊AWS Ec2 + Elastic IP
- 5. 亚马逊EC2 Linux实例中的GUI
- 6. 选择亚马逊EC2实例类型
- 7. 控制多个亚马逊EC2实例
- 8. 亚马逊EC2实例元数据
- 9. 亚马逊EC2实例连接
- 10. 亚马逊ec2托管服务器IP地址
- 11. 如何获得亚马逊网络服务实例的私有IP地址?
- 12. 寻找一个网站的亚马逊EC2托管实例
- 13. 寻找合适的亚马逊ec2 ubuntu实例
- 14. 如何让我的公有DNS(IPv4)的实例亚马逊EC2
- 15. 在亚马逊ec2的网址映射
- 16. 停止与“实例存储”的亚马逊EC2实例
- 17. 它如何体验EC2的新亚马逊集群GPU实例?
- 18. 如何预订正在运行的亚马逊EC2实例?
- 19. 亚马逊EC2 .NET API,启动随机实例
- 20. 与亚马逊EC2
- 21. 亚马逊EC2的用途
- 22. Datastax Cassandra - 亚马逊EC2实例 - 具有跨越亚马逊地区的三个节点的群集
- 23. 如何将DNS更改为亚马逊EC2实例
- 24. 如何在亚马逊ec2 ubuntu实例上获取GUI
- 25. 亚马逊实例商店
- 26. 通过公共ip的亚马逊EC2实例无法正常工作
- 27. 使用亚马逊EC2和绑定的IP与实例,但不工作
- 28. 更改EC2实例的公共IP地址弹性IP地址
- 29. 如何使用Chef在VPC内部启动亚马逊EC2实例?
- 30. 将旧的EBS卷安装到新的实例 - 亚马逊EC2
你为什么不分配一个固定的IP弹性? – okrasz