Amazon ec2 如何在重新启动时查找amazon EC2实例的IP地址
重新启动时,amazon实例的IP地址会更改。如何使用java API查找新的IP地址?假设您重新启动了实例,并且没有从头启动,那么您可以分配一个始终保留在ec2实例中的弹性IP(除非您将IP移动到另一台服务器)。这允许您将所有DNS指向该IP,而不必担心重新启动会导致问题 我想这就是你的要求,但你还可以问其他的问题。服务器的内部IP发生变化(如果您重新启动实例而不是重新启动),并且您无法“保留”它,因此您可能需要创建一个脚本来保留新的IP(如果您的内部服务指向它)Amazon ec2 如何在重新启动时查找amazon EC2实例的IP地址,amazon-ec2,reboot,Amazon Ec2,Reboot,重新启动时,amazon实例的IP地址会更改。如何使用java API查找新的IP地址?假设您重新启动了实例,并且没有从头启动,那么您可以分配一个始终保留在ec2实例中的弹性IP(除非您将IP移动到另一台服务器)。这允许您将所有DNS指向该IP,而不必担心重新启动会导致问题 我想这就是你的要求,但你还可以问其他的问题。服务器的内部IP发生变化(如果您重新启动实例而不是重新启动),并且您无法“保留”它,因此您可能需要创建一个脚本来保留新的IP(如果您的内部服务指向它) 如果您不想分配弹性IP地址(
如果您不想分配弹性IP地址(这并不总是一个解决方案,这是有原因的),那么只需在重新启动的实例上调用
descripbeinstances
,它将返回一系列信息,包括公共IP地址
以下是有关此主题的详细信息。重新启动时,EC2实例的IP地址不会更改。它们通常在非VPC EBS引导实例停止/启动时发生更改 请参见我对您相关问题的回答: 也就是说,您可以通过特定语言的API调用找到私有和公共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
建议为特定服务或服务器保留一致的(静态)面向外部的IP地址。在停止/启动后(但不是重新启动后),这些需要重新分配给实例。这是我在VPC中的Ubuntu 12.04 EC2实例上所做的:
curl ifconfig.me
不确定原因,但在元数据url下未找到public-ipv4。要获取实例的公共IP,首先需要获取该实例的实例id。您可以使用以下java代码获取实例的实例id
List<Instance> instances = runInstancesResult.getReservation().getInstances();
String instanceId = instances.get(0).toString().substring(13, 23);
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());
}
}
}
List instances=runInstancesResult.getReservation().getInstances();
字符串instanceId=instances.get(0).toString().substring(13,23);
现在,为了获得公共IP,您可以使用以下java代码
List<Instance> instances = runInstancesResult.getReservation().getInstances();
String instanceId = instances.get(0).toString().substring(13, 23);
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());
}
}
}
public void fetchInstancePublicIP(){
DescribeInstanceRequest请求=新的DescribeInstanceRequest()。带有InstanceId(“i-d99ae7d2”);
DescribeInstancesResult结果=ec2。describeInstances(请求);
List=result.getReservations();
用于(预订资源:列表){
List instanceList=res.getInstances();
例如(实例:instanceList){
System.out.println(“公共IP:+instance.getPublicIpAddress());
System.out.println(“公共DNS:+instance.getPublicDnsName());
System.out.println(“实例状态:+Instance.getState());
System.out.println(“实例标记:“+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;
}
}
var-ipofnewServer=string.Empty;
while(string.IsNullOrEmpty(ipofnewServer))
{
var statusRequest1=新描述安装请求
{
instanceId=新列表(){instanceId}
};
var result=amazonEc2client.descripbeinstances(statusRequest1);
var status=result.Reservations[0]。Instances.FirstOrDefault();
如果(状态!=null)
{
ipofnewServer=status.PublicIpAddress;
}
}
公共IPv4地址也可从EC2实例获得,如下所示:
curl checkip.amazonaws.com
公共主机名为:
dig -x $(curl -s checkip.amazonaws.com) +short
您可以将CLI CRUD应用程序用于AWS资源。 r 查找所有ec2实例
./awsconsole.py ec2 all
查找一个ec2实例的所有数据(包括IP priv和public)
/awsconsole.py ec2 find-i
你为什么不分配一个固定的弹性IP?我把你选为八位大师。您知道有什么简单的方法可以获取上次创建的实例的InstanceID,以便立即关联ElasticIP吗?据我所知,它需要解析从ec2运行实例返回的信息
,或者使用bash解析JSON,并从aws ec2运行实例返回JSON。试图避免额外的依赖关系。为了澄清上面的descripbeinstances
命令,我喜欢使用以下命令:aws ec2 description instances | grep“Value\| PublicIpAddress”
(当然,您需要安装aws cli)谢谢,谢谢。你责骂我六岁时接受的答案,从而使我的代表稍受打击,这是显而易见的,不需要任何评论!这是一个可靠的完整答案。“wget”提供了具体的正确答案,周围的文章也很有帮助/有用。这应该是公认的答案,也是他们在文档中所说的。那奇怪的IP是什么?从服务器调用此未知IP是否存在安全威胁我建议编辑一下,解释一下IP,但看起来不是accepted@RavindranathAkila不,您可以在EC2实例中使用此命令。此命令不再有效,他们显然已经更新了元数据API。这实际上效果更好。上面的答案/public-ipv4直到最近才起作用,不确定AWS是否改变了什么,或者限制通过ELB的流量是否起到了作用,但我在这两个实例上都得到了弹性IP的报告。但是卷曲校验正确,一个是我的弹性ip,另一个是随机分配的。适用于CentOS 7