Получить подробности об экземпляре AWS EC2 с помощью RunInstancesRequest
Я пытаюсь получить подробности об экземпляре AWS EC2 с помощью RunInstancesRequest. Для этого я следовал за документом AWS https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-ec2-instances.html.
RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
runInstancesRequest.withImageId(imageId).withInstanceType(instanceType).withMinCount(1).withMaxCount(count).withSecurityGroups(securityGroupName);
RunInstancesResult runInstancesResult = amazonEC2.runInstances(runInstancesRequest);
String instance_id = runInstancesResult.getReservation().getReservationId();
//waiting for 2 minute
DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
describeInstancesRequest.setInstanceIds(Arrays.asList(instance_id));
DescribeInstancesResult describeInstancesResult = amazonEC2.describeInstances(describeInstancesRequest);
for(Reservation reservation : describeInstancesResult.getReservations()){
for(Instance instance : reservation.getInstances()) {
System.out.println(instance.getPublicDnsName());
}
}
Здесь я могу запустить экземпляр AWS EC2, но проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить детали EC2 с помощью объекта RunInstancesResult. Согласно документации AWS кажется, что instance_id - это booking_id, но я считаю, что это не так. Как instance_id начать с "i-"
и booking_id с "r-"
,
Как я могу получить информацию только об одном EC2, который я создал с помощью API? Как я получил RunInstancesResult
объект как выход предыдущего API, поэтому возникает вопрос: как получить подробности об экземпляре AWS EC2 с помощью RunInstancesRequest?
2 ответа
Резервирование - это запрос на запуск экземпляров. Например, вы можете использовать один запрос на запуск для создания двух экземпляров. Таким образом, резервирование содержит несколько экземпляров.
Если вы посмотрите на объект ответа, то увидите, что Reservation действительно содержит несколько экземпляров, например:
{
"OwnerId": "123456789012",
"ReservationId": "r-08626e73c547023b1",
"Groups": [
{
"GroupName": "MySecurityGroup",
"GroupId": "sg-903004f8"
}
],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"RootDeviceType": "ebs",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2013-07-19T02:42:39.000Z",
"ProductCodes": [],
"StateTransitionReason": null,
"InstanceId": "i-1234567890abcdef0",
"ImageId": "ami-1a2b3c4d",
"PrivateDnsName": null,
"KeyName": "MyKeyPair",
etc.
В AWS doc создана небольшая путаница. Они ссылаются на идентификатор резервирования как instance_id. После изменения следующих изменений в моем коде удалось отфильтровать экземпляры:
String instance_id = runInstancesResult.getReservation().getInstances()..get(0).getInstanceId();