再起動すると、AmazonインスタンスのIPアドレスが変更されます。 Java API?を使用して新しいIPアドレスを見つける方法
Elastic IPアドレスを割り当てたくないと仮定し(これが常に解決策ではない理由があります)、リブートされたインスタンスでDescribeInstances
を呼び出すだけで、パブリックIPアドレスなどの情報が返されます。
トピックの AWS EC2 Java API Documentation を参照してください。
再起動時に、EC2インスタンスのIPアドレスはnot変更します。通常、これらは非VPC EBSブートインスタンスの停止/開始時に変更されます。
あなたの関連する質問への私の答えはここにあります:
ただし、特定の言語で 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アドレス は、特定のサービスまたはサーバーの一貫した(静的な)外部に面したIPアドレスを維持するために推奨されます。これらは、停止/開始後にインスタンスに再割り当てする必要があります(ただし、再起動後は必要ありません)。
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
これは私がVPC内のUbuntu 12.04 EC2インスタンスでどのようにそれをしたかです:
curl ifconfig.me
理由はわかりませんが、public-ipv4はメタデータURLで見つかりませんでした
インスタンスのパブリック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());
}
}
}
EC2メタデータへのアクセスを容易にするutilクラスがあります。例えば
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;
}
}
インスタンスを再起動し、ゼロから起動するのではなく、ec2インスタンスに常に残るエラスティックIPを割り当てることができます(IPを別のサーバーに移動しない限り)。これにより、すべてのDNSをその1つのIPに向けることができ、再起動によって問題が発生する心配はありません。
私はそれがあなたの求めていることだと思いますが、あなたが尋ねることができる他のことがあります。サーバーの内部IPが変更され(再起動せずにインスタンスを再起動した場合)、それを「予約」できないため、新しいIPを保持するスクリプトを作成する必要があります(内部サービスを指す場合)。
それが役立つことを願って
AWSリソースに対してCLI CRUDアプリケーションを使用できます。 AWS-CRUD-Manage r
すべてのec2インスタンスを見つけるには
./awsconsole.py ec2 all
1つのec2インスタンスのすべてのデータを検索するには(IP privおよびpublicを含む)
./awsconsole.py ec2 find -i <id-insta`ce>