繁体   English   中英

无法联系EC2元数据服务

[英]Unable to contact EC2 metadata service

我正在尝试使用AWS开发工具包获取AWS中所有EC2实例的实例ID。

    AmazonEC2 ec2Service = null;
    String aWSAccessId = "XXXXXXXXXXXXXXXXXXXX";
    String aWSSecretKey = "XXXXXXXXXXXXXXXXXXXXX";
    if (null != aWSAccessId && !"".equals(aWSAccessId)
            && null != aWSSecretKey && !"".equals(aWSSecretKey)) {
        ec2Service = new AmazonEC2Client(new BasicAWSCredentials(aWSAccessId, aWSSecretKey));
    }
    DescribeInstancesResult result = ec2Service.describeInstances();
    String instanceid = EC2MetadataUtils.getInstanceId();
    String availabilityZone = EC2MetadataUtils.getAvailabilityZone();
    System.out.println("availabilityZone-----> "+availabilityZone);
     System.out.println("instanceid-----> "+instanceid);
    List<Reservation> reservations = result.getReservations();
    System.out.println("reservations-----> "+reservations.toString());

    for (Reservation reservation : reservations) 
    {
        List<Instance> instances = reservation.getInstances();
        System.out.println("instances-----> "+instances.size());
        for (Instance instance : instances) 
        {

            System.out.println("Instances----> "+instance.getInstanceId());
        }
    }

但是我无法获取实例,还尝试通过在eclipse ide中配置sdk来使用EC2MetadataUtils.java来获取详细信息。

    EC2MetadataUtils ec2Meta = new EC2MetadataUtils();
    String amiId = ec2Meta.getAmiId();
    System.out.println("Ec2 Metadata ----amiId---> "+amiId);

    String availabilityZone = ec2Meta.getAvailabilityZone();
    System.out.println("Ec2 Metadata ----AvailabilityZone---> "+availabilityZone);

    /*String eC2InstanceRegion = ec2Meta.getEC2InstanceRegion();
    System.out.println("Ec2 Metadata ----eC2InstanceRegion---> "+eC2InstanceRegion);*/

    String instanceId = ec2Meta.getInstanceId();
    System.out.println("Ec2 Metadata ----instanceId---> "+instanceId);

    InstanceInfo instanceInfo = ec2Meta.getInstanceInfo();
    System.out.println("Ec2 Metadata  "+instanceInfo.getAccountId());
    System.out.println("Ec2 Metadata  "+instanceInfo.getInstanceId());
    System.out.println("Ec2 Metadata  "+instanceInfo.getPrivateIp());
    System.out.println("Ec2 Metadata "+instanceInfo.getRegion());
    System.out.println("Ec2 Metadata  "+instanceInfo.getArchitecture());
    System.out.println("Ec2 Metadata "+instanceInfo.getInstanceType());
    System.out.println("Ec2 Metadata  "+instanceInfo.getVersion());
    System.out.println("Ec2 Metadata  "+instanceInfo.getImageId());     
    String publicKey = EC2MetadataUtils.getPublicKey();
    System.out.println("Ec2 Metadata "+publicKey);      
     IAMInfo AMInstanceProfileInfo = EC2MetadataUtils.getIAMInstanceProfileInfo();
    System.out.println("Ec2 Metadata "+AMInstanceProfileInfo.lastUpdated);

    String MacAddress = EC2MetadataUtils.getMacAddress();
    System.out.println("Ec2 Metadata "+MacAddress);

但是我仅对初始字段获取null,最后得到以下错误。

Ec2 Metadata  null
Ec2 Metadata  null
Ec2 Metadata  null

Exception in thread "main" com.amazonaws.SdkClientException: Unable to contact EC2 metadata service.

Anthony在他的评论中正确地提到EC2元数据服务仅在您正在运行的EC2实例中可用。 我遇到类似的情况,需要与AWS账户关联的所有EC2实例的区域信息。 这就是我读取实例的区域信息的方式:

List<Instance> ec2Instances = describeInstancesResult.getReservations().stream().map(d -> d.getInstances()).flatMap(l -> l.stream()).collect(Collectors.toList()); 
//describeInstancesResult is the response of describeInstance operation on the aws client generated for a given aws account.

ec2Instances.stream().forEach((instance) -> {
    String region = instance.getPlacement().getAvailabilityZone();
    //do operations on the region value.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM