2016-01-22 7 views
1

Я не могу понять, как я могу это сделать:Как получить публичный IP-адрес в запросе экземпляра запуска EC2?

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-адреса. Вам нужно будет немного подождать, пока он будет доступен.

Через несколько секунд позвоните 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", 
... 
}