在AWS Java SDK中使用查询对AMI进行排序

时间:2018-06-13 07:36:25

标签: amazon-web-services aws-sdk aws-cli

有人可以帮助我根据最新创建日期对amis进行排序吗?

像这样的东西

 aws ec2 describe-images  --filters "Name=name,Values=Ubuntu 16.04 LTS*" "Name=owner-id,Values=715140769385"  --query 'Images[*].[ImageId,CreationDate]'

目前我使用下面的代码来获取动画,但不知道如何排序。

    final AmazonEC2 ec2 = getEC2Client();
    DescribeImagesRequest request = new DescribeImagesRequest();
    request.getFilters().add(new Filter().withName("name").withValues("Ubuntu 16.04 LTS service*"));
    DescribeImagesResult result = ec2.describeImages(request);
    for(Image images :result.getImages()){
        System.out.println(images);
    }

任何帮助?

1 个答案:

答案 0 :(得分:0)

我可以使用下面的代码来实现它。它有点冗长。我希望得到一些过滤器来解决这个问题。

    final AmazonEC2 ec2 = awsClient.getEC2Client();
    DescribeImagesRequest request = new DescribeImagesRequest();
    request.getFilters().add(new Filter().withName("name").withValues("Ubuntu 16.04 LTS service*"));
    DescribeImagesResult result = ec2.describeImages(request);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    Map<Date, String> imagesMap = new TreeMap<Date, String>(new Comparator<Date>() {
        @Override
        public int compare(Date d1, Date d2) {
            return d1.before(d2) ? 1 : -1;
        }
    });

    for (Image images : result.getImages()) {
        try {
            Date date = new Date(sdf.parse(images.getCreationDate()).getTime());
            imagesMap.put(date, images.getImageId());
        } catch (ParseException e) {
            LOG.error("Could not parse date for after fetching AMIs");
        }
    }

    if (imagesMap.size() > 0)
        return imagesMap.values().stream().findFirst().get();
    else
        return null;