Получите сведения об экземпляре 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-", а reserve_id с "r-".

Как я могу получить подробную информацию только об одном EC2, который я создал с помощью API? Поскольку я получил объект RunInstancesResult как результат предыдущего API, возникает вопрос: как я могу получить сведения об экземпляре AWS EC2 с помощью RunInstancesRequest?


person Shashi Ranjan    schedule 19.05.2018    source источник


Ответы (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.
person John Rotenstein    schedule 20.05.2018
comment
Моя цель - получить подробную информацию об экземпляре за одно бронирование. Я не хочу перебирать все экземпляры. Они показывают пример получения всех резервирований и всех экземпляров в этом резервировании, которые мне не нужны. Мне нужны отфильтрованные данные. - person Shashi Ranjan; 21.05.2018

В документе AWS возникла небольшая путаница. Они ссылаются на идентификатор резервирования как instance_id. После изменения следующих изменений в моем коде я смог отфильтровать экземпляры:

String instance_id = runInstancesResult.getReservation().getInstances()..get(0).getInstanceId();
person Shashi Ranjan    schedule 21.05.2018
comment
Ой! В какой строке документации есть неточное объяснение? - person John Rotenstein; 22.05.2018
comment
Я не говорю, что документация неверна. Я просто говорю, что люди могут запутаться с String instance_id под Creating an Instance кодом в 8-й строке String instance_id = run_response.getReservation().getReservationId(); - person Shashi Ranjan; 22.05.2018
comment
Вы правы - это неправильный код. Я отправлю отзыв. - person John Rotenstein; 22.05.2018