web-dev-qa-db-ja.com

再起動時にAmazon EC2インスタンスのIPアドレスを見つける方法

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

45
figaro

Elastic IPアドレスを割り当てたくないと仮定し(これが常に解決策ではない理由があります)、リブートされたインスタンスでDescribeInstancesを呼び出すだけで、パブリックIPアドレスなどの情報が返されます。

トピックの AWS EC2 Java API Documentation を参照してください。

5
Eight-Bit Guru

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

あなたの関連する質問への私の答えはここにあります:

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アドレス は、特定のサービスまたはサーバーの一貫した(静的な)外部に面したIPアドレスを維持するために推奨されます。これらは、停止/開始後にインスタンスに再割り当てする必要があります(ただし、再起動後は必要ありません)。

102
Eric Hammond
curl http://169.254.169.254/latest/meta-data/public-ipv4
51
buley

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

curl checkip.amazonaws.com

パブリックホスト名は次のとおりです。

Dig -x $(curl -s checkip.amazonaws.com) +short
38
holmb

これは私がVPC内のUbuntu 12.04 EC2インスタンスでどのようにそれをしたかです:

curl ifconfig.me

理由はわかりませんが、public-ipv4はメタデータURLで見つかりませんでした

3
Amir Aliabadi

インスタンスのパブリック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());
         }     
    }
}
1
Sachin Gaykar

EC2メタデータへのアクセスを容易にするutilクラスがあります。例えば

EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicHostname();
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicIPv4s();
1
Igor

これを使用できます。

                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;
                    }
                }
0
Viral Prajapati

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

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

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

0
Lostsoul

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>
0
Rafal