AWS Java SDK - получение информации об экземпляре EC2 - PullRequest
0 голосов
/ 19 марта 2019

Учитывая идентификатор экземпляра, я хочу получить информацию об экземпляре EC2 (например, его статус выполнения, частный IP, публичный IP).

Я провел некоторое исследование (т. Е. Просматривал пример кода, размещенный здесь Управление инстансами Amazon EC2) но есть только пример кода получения экземпляров Amazon EC2 для вашей учетной записи и региона.

Я попытался изменить образец, и вот что я придумал:

private static AmazonEC2 getEc2StandardClient() {
    // Using StaticCredentialsProvider
    final String accessKey = "access_key";
    final String secretKey = "secret_key";
    BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

    return AmazonEC2ClientBuilder.standard()
            .withRegion(Regions.AP_NORTHEAST_1)
            .withCredentials(new AWSStaticCredentialsProvider(credentials))
            .build();
}

public static void getInstanceInfo(String instanceId) {
    final AmazonEC2 ec2 = getEc2StandardClient();

    DryRunSupportedRequest<DescribeInstancesRequest> dryRequest =
            () -> {
                DescribeInstancesRequest request = new DescribeInstancesRequest()
                    .withInstanceIds(instanceId);
                return request.getDryRunRequest();
            };

    DryRunResult<DescribeInstancesRequest> dryResponse = ec2.dryRun(dryRequest);
    if(!dryResponse.isSuccessful()) {
        System.out.println("Failed to get information of instance " + instanceId);
    }

    DescribeInstancesRequest request = new DescribeInstancesRequest()
            .withInstanceIds(instanceId);
    DescribeInstancesResult response = ec2.describeInstances(request);

    Reservation reservation = response.getReservations().get(0);
    Instance instance = reservation.getInstances().get(0);


    System.out.println("Instance id: " + instance.getInstanceId(), ", state: " + instance.getState().getName() + 
        ", public ip: " + instance.getPublicIpAddress() + ", private ip: " + instance.getPrivateIpAddress());
}

Работает нормально, но мне интересно, лучше ли получать информацию из одного экземпляра.

1 Ответ

0 голосов
/ 19 марта 2019

но есть только пример кода получения экземпляров Amazon EC2 для вашей учетной записи и региона.

Да, вы можете получить только информацию об экземпляре, для которой у вас есть разрешение на чтение.

Работает нормально, но мне интересно, лучше ли получать информацию из одного экземпляра

У вас есть несколько вариантов.

  1. Для получения метаданных EC2 от любого клиента (например, из вашей локальной сети) ваш код выглядит нормально.

  2. Если вы выполняете код в среде AWS (в EC2, lambda, docker, ...), вы можете указать разрешенную роль службы, вызывая из службы операцию descriptionInstances . Тогда вам не нужно явно указывать учетные данные AWS (будет работать DefaultAWSCredentialsProviderChain).

  3. Если вы получаете метаданные EC2 из самого экземпляра, вы можете использовать службу метаданных EC2 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...