AWS Java SDK-获取EC2实例信息

时间:2019-03-19 09:24:16

标签: amazon-web-services

鉴于实例ID,我想获取EC2实例信息(例如其运行状态,私有IP,公共IP)。

我已经进行了一些研究(例如,查看此处发布的示例代码Managing Amazon EC2 Instances) 但是只有示例代码可以获取您帐户和区域的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 :(得分:0)

  

,但是只有示例代码可以获取您帐户和区域的Amazon EC2实例。

是的,您可能只会获得您有权阅读的实例信息。

  

工作正常,但我想知道从单个实例获取信息是否是最佳实践

您有多种选择。

  1. 要从任何客户端(例如,您的本地网络)获取EC2元数据,您的代码就可以了。

  2. 如果您正在AWS环境中(在EC2,lambda,docker,..上)运行代码,则可以指定服务角色,以允许从服务调用 describeInstances 操作。然后,您无需显式指定AWS凭证(DefaultAWSCredentialsProviderChain将起作用)。

  3. 如果要从实例本身获取EC2元数据,则可以使用the EC2 metadata service