46

再起動すると、Amazon インスタンスの IP アドレスが変更されます。Java APIを使用して新しいIPアドレスを見つける方法は?

4

11 に答える 11

104

再起動時に、EC2インスタンスのIPアドレスは変更されませ。これらは通常、非VPCEBSブートインスタンスの停止/開始時に変更されます。

ここであなたの関連する質問に対する私の答えを見てください:

https://stackoverflow.com/questions/7533871/difference-between-rebooting-and-stop-starting-an-amazon-ec2-instance

とはいえ、特定の言語でのDescribeInstancesのAPI呼び出しを介して、プライベートIPアドレスとパブリック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アドレスを維持するには、ElasticIPアドレスをお勧めします。これらは、停止/開始後にインスタンスに再割り当てする必要があります(ただし、再起動後ではありません)。

于 2011-09-24T01:16:33.957 に答える
52
curl http://169.254.169.254/latest/meta-data/public-ipv4
于 2012-05-15T05:08:17.233 に答える
41

パブリック IPv4 アドレスは、次のように EC2 インスタンスからも利用できます。

curl checkip.amazonaws.com

公開ホスト名は次のとおりです。

dig -x $(curl -s checkip.amazonaws.com) +short
于 2016-04-04T11:38:48.790 に答える
5

Elastic IP アドレスを割り当てたくない場合 (これが必ずしも解決策ではない理由があります) DescribeInstances、再起動したインスタンスを呼び出すだけで、パブリック IP アドレスを含む一連の情報が返されます。

このトピックに関するAWS EC2 Java API ドキュメントは次のとおりです。

于 2011-09-23T08:57:40.627 に答える
1

インスタンスのパブリック 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());
         }     
    }
}
于 2014-08-08T09:56:03.407 に答える
0

インスタンスを再起動し、最初から起動しないと仮定すると、(IP を別のサーバーに移動しない限り) 常に ec2 インスタンスに残るエラスティック IP を割り当てることができます。これにより、すべての DNS をその 1 つの IP に向けることができ、再起動によって問題が発生する心配はありません。

それがあなたの質問だと思いますが、他にも質問できることがあります。サーバーの内部 IP が変更され (再起動せずにインスタンスを再起動した場合)、それを「予約」できないため、新しい IP を保持するためのスクリプトを作成する必要がある場合があります (内部サービスがそれを指している場合)。

それが役立つことを願っています

于 2011-09-23T08:09:43.970 に答える