You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java获取Route 53中特定托管区域的全部资源记录集

解决Route53资源记录只返回100条的问题

嘿,这个问题我之前也踩过坑!AWS Route53的listResourceRecordSets API默认采用分页机制,单次请求最多返回100条记录——这就是你只能拿到部分数据的原因。要获取托管区域的所有资源记录,你需要处理分页逻辑,循环调用API直到拿到所有页的数据。

为什么会这样?

当托管区域的资源记录超过100条时,API响应里的IsTruncated字段会被设为true,同时返回NextRecordName、NextRecordType(必要时还有NextRecordIdentifier)这些标记,用来告诉客户端如何获取下一页的结果。你需要把这些标记作为参数传入下一次请求,直到IsTruncated变为false,才算拿到了所有记录。

修改后的完整代码

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.route53.AmazonRoute53;
import com.amazonaws.services.route53.AmazonRoute53Client;
import com.amazonaws.services.route53.model.ListResourceRecordSetsRequest;
import com.amazonaws.services.route53.model.ListResourceRecordSetsResult;
import com.amazonaws.services.route53.model.ResourceRecordSet;
import java.util.ArrayList;
import java.util.List;

public List<ResourceRecordSet> getResourceRecordSet(String hostedZoneId) {
    // 注意:AmazonRoute53Client已被废弃,推荐使用AmazonRoute53ClientBuilder创建客户端
    AmazonRoute53 route53Client = new AmazonRoute53Client(new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY));
    
    List<ResourceRecordSet> allRecordSets = new ArrayList<>();
    ListResourceRecordSetsRequest request = new ListResourceRecordSetsRequest();
    request.setHostedZoneId(hostedZoneId);
    
    boolean isTruncated;
    do {
        ListResourceRecordSetsResult result = route53Client.listResourceRecordSets(request);
        allRecordSets.addAll(result.getResourceRecordSets());
        
        isTruncated = result.getIsTruncated();
        if (isTruncated) {
            // 设置下一页的起始参数
            request.setStartRecordName(result.getNextRecordName());
            request.setStartRecordType(result.getNextRecordType());
            // 如果存在多值记录集,还需要设置StartRecordIdentifier
            if (result.getNextRecordIdentifier() != null) {
                request.setStartRecordIdentifier(result.getNextRecordIdentifier());
            }
        }
    } while (isTruncated);
    
    return allRecordSets;
}

关键细节说明

  • 初始化一个ArrayList来存储所有分页返回的记录集,避免每次请求覆盖结果
  • 使用do-while循环确保至少执行一次请求,然后根据IsTruncated判断是否继续
  • 每次循环后更新请求的起始参数,确保下一次请求从当前页的末尾开始
  • 注意处理NextRecordIdentifier:如果你的托管区域有多值资源记录集(比如加权路由的记录),这个参数是必须的,否则会导致分页错误

额外建议

旧的AmazonRoute53Client已经被AWS标记为废弃,推荐使用更现代的构建器方式创建客户端,示例如下:

AmazonRoute53 route53Client = AmazonRoute53ClientBuilder.standard()
        .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY)))
        .build();

这种方式更灵活,也更符合AWS SDK的最新规范。

内容的提问来源于stack exchange,提问作者Java learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:32:24