使用AWS Route53 Java API创建SIMPLE路由策略遇参数错误
问题根源
你在代码中添加了setIdentifier属性,这个属性仅用于非SIMPLE类型的路由策略(如加权、延迟、故障转移等),用来区分同一域名、同一记录类型下的多条不同记录集。当你设置了setIdentifier但未匹配提供对应路由策略的参数(比如Region、Weight)时,AWS会判定请求无效;而如果添加Region参数,会自动切换为Latency策略,不符合你需要的无地域限制SIMPLE策略需求。
修正后的代码
创建SIMPLE路由策略的记录集,只需移除setIdentifier即可——因为SIMPLE策略是单条记录,无需区分标识:
Change change = Change.builder() .action(ChangeAction.UPSERT) .resourceRecordSet(ResourceRecordSet.builder() .name(recordFqdn) .type(RRType.CNAME) .ttl(300L) .resourceRecords(resourceRecords) .build()) .build(); ChangeResourceRecordSetsRequest request = ChangeResourceRecordSetsRequest.builder() .hostedZoneId(hostedZone.id()) .changeBatch(ChangeBatch.builder() .changes(change) .build()) .build(); getRoute53Client().changeResourceRecordSets(request);
错误详情
原代码触发的错误信息:
software.amazon.awssdk.services.route53.model.InvalidInputException: Invalid request: Expected exactly one of [Weight, Region, Failover, GeoLocation, MultiValueAnswer, GeoProximityLocation, or AvailabilityZone], but found none in Change with [Action=UPSERT, Name=foo.mydomain.net, Type=CNAME, SetIdentifier=foo.mydomain.net] (Service: Route53, Status Code: 400, Request ID: xxxxxxxxxx)
at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125) at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82)
该错误的核心逻辑是:AWS检测到setIdentifier属性后,默认认为你要创建多记录集的路由策略,因此要求你指定对应的策略类型参数,但你未提供,所以请求被拒绝。
内容的提问来源于stack exchange,提问作者Vinay B

