鉴于实例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());
}
它工作正常,但我想知道从单个实例获取信息是否是最佳实践。
答案 0 :(得分:0)
,但是只有示例代码可以获取您帐户和区域的Amazon EC2实例。
是的,您可能只会获得您有权阅读的实例信息。
工作正常,但我想知道从单个实例获取信息是否是最佳实践
您有多种选择。
要从任何客户端(例如,您的本地网络)获取EC2元数据,您的代码就可以了。
如果您正在AWS环境中(在EC2,lambda,docker,..上)运行代码,则可以指定服务角色,以允许从服务调用 describeInstances 操作。然后,您无需显式指定AWS凭证(DefaultAWSCredentialsProviderChain将起作用)。
如果要从实例本身获取EC2元数据,则可以使用the EC2 metadata service。