2016-01-22 104 views
1

我無法弄清楚我怎麼能做到這一點:如何獲取EC2啓動實例請求上的公共IP地址?

runInstancesRequest.withImageId("ami-53170b32") 
       .withInstanceType("t2.micro") 
       .withMinCount(1) 
       .withMaxCount(1) 
       .withKeyName("mac") 
       .withSecurityGroupIds("sg-49025d2d"); 

RunInstancesResult runInstancesResult = 
       amazonEC2Client.runInstances(runInstancesRequest); 

到目前爲止,一切工作正常。現在我想從最近啓動的實例中獲取公共IP地址。我怎樣才能做到這一點?

我想:

runInstancesResult.getReservation().getInstances().get(0).getPublicIpAddress() 

但IP總是空。

回答

6

當一個實例啓動時,它將進入Pending狀態並且還沒有公共IP地址。您需要稍等一會才能使用它。

幾秒鐘後,用最初返回的實例ID調用DescribeInstances,然後提取PublicIpAddress

這裏有一個轉儲從AWS Command-Line Interface (CLI)做:

$ aws ec2 run-instances --image-id ami-1500742f ... 
{ 
    "OwnerId": "123456789012", 
    "ReservationId": "r-0d8cc4a12a94faba7", 
    "Groups": [], 
    "Instances": [ 
     { 
      "Monitoring": { 
       "State": "disabled" 
      }, 
      "PublicDnsName": "", 
      "KernelId": "aki-c362fff9", 
      "State": { 
       "Code": 0, 
       "Name": "pending" 
      }, 
      "EbsOptimized": false, 
      "LaunchTime": "2016-01-22T21:17:49.000Z", 
      "PrivateIpAddress": "172.31.12.208", 
      "ProductCodes": [], 
      "VpcId": "vpc-7d087014", 
      "StateTransitionReason": "", 
      "InstanceId": "i-0afe19e0d061b95b5", 
... 
} 

$ aws ec2 describe-instances --instance-ids i-0afe19e0d061b95b5 
{ 
    "Reservations": [ 
     { 
      "OwnerId": "123456789012", 
      "ReservationId": "r-0d8cc4a12a94faba7", 
      "Groups": [], 
      "Instances": [ 
       { 
        "Monitoring": { 
         "State": "disabled" 
        }, 
        "PublicDnsName": "ec2-52-62-35-146.ap-southeast-2.compute.amazonaws.com", 
        "RootDeviceType": "ebs", 
        "State": { 
         "Code": 16, 
         "Name": "running" 
        }, 
        "EbsOptimized": false, 
        "LaunchTime": "2016-01-22T21:17:49.000Z", 
        "PublicIpAddress": "52.62.35.146", 
        "PrivateIpAddress": "172.31.12.208", 
... 
}