再起動すると、Amazon インスタンスの IP アドレスが変更されます。Java APIを使用して新しいIPアドレスを見つける方法は?
11 に答える
再起動時に、EC2インスタンスのIPアドレスは変更されません。これらは通常、非VPCEBSブートインスタンスの停止/開始時に変更されます。
ここであなたの関連する質問に対する私の答えを見てください:
とはいえ、特定の言語での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アドレスをお勧めします。これらは、停止/開始後にインスタンスに再割り当てする必要があります(ただし、再起動後ではありません)。
curl http://169.254.169.254/latest/meta-data/public-ipv4
パブリック IPv4 アドレスは、次のように EC2 インスタンスからも利用できます。
curl checkip.amazonaws.com
公開ホスト名は次のとおりです。
dig -x $(curl -s checkip.amazonaws.com) +short
Elastic IP アドレスを割り当てたくない場合 (これが必ずしも解決策ではない理由があります) DescribeInstances
、再起動したインスタンスを呼び出すだけで、パブリック IP アドレスを含む一連の情報が返されます。
このトピックに関するAWS EC2 Java API ドキュメントは次のとおりです。
インスタンスのパブリック 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());
}
}
}
インスタンスを再起動し、最初から起動しないと仮定すると、(IP を別のサーバーに移動しない限り) 常に ec2 インスタンスに残るエラスティック IP を割り当てることができます。これにより、すべての DNS をその 1 つの IP に向けることができ、再起動によって問題が発生する心配はありません。
それがあなたの質問だと思いますが、他にも質問できることがあります。サーバーの内部 IP が変更され (再起動せずにインスタンスを再起動した場合)、それを「予約」できないため、新しい IP を保持するためのスクリプトを作成する必要がある場合があります (内部サービスがそれを指している場合)。
それが役立つことを願っています