Search code examples
javaamazon-web-servicesgroovyamazon-route53

How to perform batching when requesting records from route53 hosted zone to retrieve all the records


My hosted zone has over 2500 records. I wrote java code that retrieves the resource records from a specified hosted zone using ListResourceRecordSetsRequest. However, it is only listing 300 records at max. How can I perform batching so I can retrieve all 2500 records?

ListResourceRecordSetsRequest request = ListResourceRecordSetsRequest.builder()
                .hostedZoneId(hostedZone.id())
                .maxItems("1000")
                .build() as ListResourceRecordSetsRequest
        ListResourceRecordSetsResponse listResourceRecordSets = route53Client.listResourceRecordSets(request);
        List<ResourceRecordSet> records = listResourceRecordSets.resourceRecordSets();
        return records

The code above is what I use and it returns 300 records at best


Solution

  • You can use following snippet to iterate through all records.

    final ListResourceRecordSetsRequest listRecordSetRequest = new ListResourceRecordSetsRequest().
                    withHostedZoneId(hostedZone.getId());
    ListResourceRecordSetsResult listRecordSetResult;
    final List<ResourceRecordSet> resourceRecordSets = new ArrayList<>();
    do {
          listRecordSetResult = route53.listResourceRecordSets(listRecordSetRequest);
          resourceRecordSets.addAll(listRecordSetResult.getResourceRecordSets());
                listRecordSetRequest.setStartRecordIdentifier(listRecordSetResult.getNextRecordIdentifier());
    } while (listRecordSetResult.isTruncated());